Class: Droonga::EngineState

Inherits:
Object
  • Object
show all
Includes:
Loggable
Defined in:
lib/droonga/engine_state.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#catalogObject

Returns the value of attribute catalog.



36
37
38
# File 'lib/droonga/engine_state.rb', line 36

def catalog
  @catalog
end

#forwarderObject (readonly)

Returns the value of attribute forwarder.



32
33
34
# File 'lib/droonga/engine_state.rb', line 32

def forwarder
  @forwarder
end

#internal_nameObject (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

#loopObject (readonly)

Returns the value of attribute loop.



29
30
31
# File 'lib/droonga/engine_state.rb', line 29

def loop
  @loop
end

#nameObject (readonly)

Returns the value of attribute name.



30
31
32
# File 'lib/droonga/engine_state.rb', line 30

def name
  @name
end

#on_finishObject

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_readyObject



130
131
132
# File 'lib/droonga/engine_state.rb', line 130

def on_ready
  @on_ready.call if @on_ready
end

#replierObject (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_nodesObject



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_idObject



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

Returns:

  • (Boolean)


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

def have_session?
  not @sessions.empty?
end

#live_nodesObject



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

Returns:

  • (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

#shutdownObject



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

#startObject



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