Class: Droonga::Farm

Inherits:
Object
  • Object
show all
Includes:
Deferrable, Loggable
Defined in:
lib/droonga/farm.rb

Defined Under Namespace

Classes: NoSlice

Instance Method Summary collapse

Methods included from Deferrable

#wait_until_ready

Constructor Details

#initialize(name, catalog, loop, options = {}) ⇒ Farm

Returns a new instance of Farm.



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/droonga/farm.rb', line 34

def initialize(name, catalog, loop, options={})
  @name = name
  @catalog = catalog
  @loop = loop
  @options = options
  @slices = {}
  slices = @catalog.slices(name)
  slices.each do |slice_name, slice_options|
    dataset = @catalog.datasets[slice_options[:dataset]]
    slice = Droonga::Slice.new(slice_name, dataset,
                               @loop,
                               @options.merge(slice_options))
    @slices[slice_name] = slice
  end
end

Instance Method Details

#process(slice_name, message) ⇒ Object



102
103
104
105
106
107
# File 'lib/droonga/farm.rb', line 102

def process(slice_name, message)
  unless @slices.key?(slice_name)
    raise NoSlice.new(slice_name, :message => message, :slices => @slices.keys)
  end
  @slices[slice_name].process(message)
end

#refresh_node_referenceObject



96
97
98
99
100
# File 'lib/droonga/farm.rb', line 96

def refresh_node_reference
  @slices.each_value do |slice|
    slice.refresh_node_reference
  end
end

#startObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/droonga/farm.rb', line 50

def start
  n_slices = @slices.size
  if n_slices.zero?
    on_ready
    return
  end

  n_ready_slices = 0
  @slices.each_value do |slice|
    slice.on_ready = lambda do
      n_ready_slices += 1
      if n_ready_slices == n_slices
        on_ready
      end
    end
    slice.start
  end
end

#stop_gracefullyObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/droonga/farm.rb', line 69

def stop_gracefully
  logger.trace("stop_gracefully: start")
  n_slices = @slices.size
  if n_slices.zero?
    yield if block_given?
    logger.trace("stop_gracefully: done")
    return
  end

  n_done_slices = 0
  @slices.each_value do |slice|
    slice.stop_gracefully do
      n_done_slices += 1
      if n_done_slices == n_slices
        yield if block_given?
        logger.trace("stop_gracefully: done")
      end
    end
  end
end

#stop_immediatelyObject



90
91
92
93
94
# File 'lib/droonga/farm.rb', line 90

def stop_immediately
  @slices.each_value do |slice|
    slice.stop_immediately
  end
end