Class: Droonga::EngineState
- Inherits:
-
Object
- Object
- Droonga::EngineState
- Includes:
- Loggable
- Defined in:
- lib/droonga/engine_state.rb
Instance Attribute Summary collapse
-
#catalog ⇒ Object
Returns the value of attribute catalog.
-
#forwarder ⇒ Object
readonly
Returns the value of attribute forwarder.
-
#internal_name ⇒ Object
readonly
Returns the value of attribute internal_name.
-
#loop ⇒ Object
readonly
Returns the value of attribute loop.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#on_finish ⇒ Object
Returns the value of attribute on_finish.
- #on_ready ⇒ Object
-
#replier ⇒ Object
readonly
Returns the value of attribute replier.
Instance Method Summary collapse
- #all_nodes ⇒ Object
- #farm_path(route) ⇒ Object
- #find_session(id) ⇒ Object
- #generate_id ⇒ Object
- #have_session? ⇒ Boolean
-
#initialize(loop, name, internal_name) ⇒ EngineState
constructor
A new instance of EngineState.
- #live_nodes ⇒ Object
- #live_nodes=(nodes) ⇒ Object
- #local_route?(route) ⇒ Boolean
- #register_session(id, session) ⇒ Object
- #remove_dead_routes(routes) ⇒ Object
- #shutdown ⇒ Object
- #start ⇒ Object
- #unregister_session(id) ⇒ Object
Constructor Details
#initialize(loop, name, internal_name) ⇒ EngineState
Returns a new instance of EngineState.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/droonga/engine_state.rb', line 37 def initialize(loop, name, internal_name) @loop = loop @name = name @internal_name = internal_name @sessions = {} @current_id = 0 @forwarder = Forwarder.new(@loop, :buffering => true) @replier = Replier.new(@forwarder) @on_ready = nil @on_finish = nil @catalog = nil @live_nodes = nil @dead_nodes = [] end |
Instance Attribute Details
#catalog ⇒ Object
Returns the value of attribute catalog.
36 37 38 |
# File 'lib/droonga/engine_state.rb', line 36 def catalog @catalog end |
#forwarder ⇒ Object (readonly)
Returns the value of attribute forwarder.
32 33 34 |
# File 'lib/droonga/engine_state.rb', line 32 def forwarder @forwarder end |
#internal_name ⇒ Object (readonly)
Returns the value of attribute internal_name.
31 32 33 |
# File 'lib/droonga/engine_state.rb', line 31 def internal_name @internal_name end |
#loop ⇒ Object (readonly)
Returns the value of attribute loop.
29 30 31 |
# File 'lib/droonga/engine_state.rb', line 29 def loop @loop end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
30 31 32 |
# File 'lib/droonga/engine_state.rb', line 30 def name @name end |
#on_finish ⇒ Object
Returns the value of attribute on_finish.
35 36 37 |
# File 'lib/droonga/engine_state.rb', line 35 def on_finish @on_finish end |
#on_ready ⇒ Object
130 131 132 |
# File 'lib/droonga/engine_state.rb', line 130 def on_ready @on_ready.call if @on_ready end |
#replier ⇒ Object (readonly)
Returns the value of attribute replier.
33 34 35 |
# File 'lib/droonga/engine_state.rb', line 33 def replier @replier end |
Instance Method Details
#all_nodes ⇒ Object
108 109 110 |
# File 'lib/droonga/engine_state.rb', line 108 def all_nodes @catalog.all_nodes end |
#farm_path(route) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/droonga/engine_state.rb', line 68 def farm_path(route) if /\A[^:]+:\d+\/[^.]+/ =~ route name = $MATCH if name == @internal_name @name else name end else route end end |
#find_session(id) ⇒ Object
87 88 89 |
# File 'lib/droonga/engine_state.rb', line 87 def find_session(id) @sessions[id] end |
#generate_id ⇒ Object
81 82 83 84 85 |
# File 'lib/droonga/engine_state.rb', line 81 def generate_id id = @current_id @current_id = id.succ return [@internal_name, id].join(".#") end |
#have_session? ⇒ Boolean
104 105 106 |
# File 'lib/droonga/engine_state.rb', line 104 def have_session? not @sessions.empty? end |
#live_nodes ⇒ Object
112 113 114 |
# File 'lib/droonga/engine_state.rb', line 112 def live_nodes @live_nodes || @catalog.all_nodes end |
#live_nodes=(nodes) ⇒ Object
116 117 118 119 120 121 122 |
# File 'lib/droonga/engine_state.rb', line 116 def live_nodes=(nodes) old_live_nodes = @live_nodes @live_nodes = nodes @dead_nodes = all_nodes - @live_nodes @forwarder.resume if old_live_nodes != @live_nodes @live_nodes end |
#local_route?(route) ⇒ Boolean
64 65 66 |
# File 'lib/droonga/engine_state.rb', line 64 def local_route?(route) route.start_with?(@name) or route.start_with?(@internal_name) end |
#register_session(id, session) ⇒ Object
91 92 93 94 |
# File 'lib/droonga/engine_state.rb', line 91 def register_session(id, session) @sessions[id] = session logger.trace("new session #{id} is registered. rest sessions=#{@sessions.size}") end |
#remove_dead_routes(routes) ⇒ Object
124 125 126 127 128 |
# File 'lib/droonga/engine_state.rb', line 124 def remove_dead_routes(routes) routes.reject do |route| @dead_nodes.include?(farm_path(route)) end end |
#shutdown ⇒ Object
58 59 60 61 62 |
# File 'lib/droonga/engine_state.rb', line 58 def shutdown logger.trace("shutdown: start") @forwarder.shutdown logger.trace("shutdown: done") end |
#start ⇒ Object
52 53 54 55 56 |
# File 'lib/droonga/engine_state.rb', line 52 def start logger.trace("start start") @forwarder.start logger.trace("start done") end |
#unregister_session(id) ⇒ Object
96 97 98 99 100 101 102 |
# File 'lib/droonga/engine_state.rb', line 96 def unregister_session(id) @sessions.delete(id) unless have_session? @on_finish.call if @on_finish end logger.trace("session #{id} is unregistered. rest sessions=#{@sessions.size}") end |