Class: Droonga::Engine

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

Constant Summary collapse

VERSION =
"1.0.9"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(loop, name, internal_name) ⇒ Engine

Returns a new instance of Engine.



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

def initialize(loop, name, internal_name)
  @state = EngineState.new(loop, name, internal_name)
  @catalog = load_catalog
  @state.catalog = @catalog
  @dispatcher = create_dispatcher
  @live_nodes_list_observer = FileObserver.new(loop, Path.live_nodes)
  @live_nodes_list_observer.on_change = lambda do
    @state.live_nodes = load_live_nodes
  end
  @node_status_observer = FileObserver.new(loop, Path.node_status)
  @node_status_observer.on_change = lambda do
    logger.trace("reloading node_status: start")
    node_status.reload
    logger.trace("reloading node_status: done")
  end
  @on_ready = nil
end

Instance Attribute Details

#on_ready=(value) ⇒ Object (writeonly)

Sets the attribute on_ready

Parameters:

  • value

    the value to set the attribute on_ready to.



33
34
35
# File 'lib/droonga/engine.rb', line 33

def on_ready=(value)
  @on_ready = value
end

Instance Method Details

#node_statusObject



104
105
106
# File 'lib/droonga/engine.rb', line 104

def node_status
  @node_status ||= NodeStatus.new
end

#process(message) ⇒ Object



98
99
100
101
102
# File 'lib/droonga/engine.rb', line 98

def process(message)
  return unless effective_message?(message)
  @last_processed_message_timestamp = message["date"]
  @dispatcher.process_message(message)
end

#startObject



52
53
54
55
56
57
58
59
60
61
62
# File 'lib/droonga/engine.rb', line 52

def start
  logger.trace("start: start")
  @state.on_ready = lambda do
    @on_ready.call if @on_ready
  end
  @state.start
  @live_nodes_list_observer.start
  @node_status_observer.start
  @dispatcher.start
  logger.trace("start: done")
end

#stop_gracefullyObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/droonga/engine.rb', line 64

def stop_gracefully
  logger.trace("stop_gracefully: start")
  @live_nodes_list_observer.stop
  @node_status_observer.stop
  on_finish = lambda do
    logger.trace("stop_gracefully/on_finish: start")
    save_last_processed_message_timestamp
    @dispatcher.stop_gracefully do
      @state.shutdown
      yield
    end
    logger.trace("stop_gracefully/on_finish: done")
  end
  if @state.have_session?
    logger.trace("stop_gracefully/having sessions")
    @state.on_finish = on_finish
  else
    logger.trace("stop_gracefully/no session")
    on_finish.call
  end
  logger.trace("stop_gracefully: done")
end

#stop_immediatelyObject

It may be called after stop_gracefully.



88
89
90
91
92
93
94
95
96
# File 'lib/droonga/engine.rb', line 88

def stop_immediately
  logger.trace("stop_immediately: start")
  save_last_processed_message_timestamp
  @live_nodes_list_observer.stop
  @node_status_observer.stop
  @dispatcher.stop_immediately
  @state.shutdown
  logger.trace("stop_immediately: done")
end