class ManqodServer
this file is part of manqod manqod is distributed under the CDDL licence the author of manqod is Dobai-Pataky Balint(dpblnt@gmail.com)
Attributes
connected_clients[R]
dbs[R]
starting_up[R]
uri[R]
Public Class Methods
new(opts)
click to toggle source
# File lib/ManqodServer.rb, line 11 def initialize(opts) @starting_up=true @uri=opts[:bind] @logdev=opts[:log] @log_level=opts[:debug] @report_address=opts[:report] @path=opts[:path] @connections_conf=opts[:connections_conf] @conns=Hash.new @dbs=Hash.new @connected_clients=Hash.new end
Public Instance Methods
alive?()
click to toggle source
# File lib/ManqodServer.rb, line 155 def alive? true end
conn(conn_name)
click to toggle source
# File lib/ManqodServer.rb, line 66 def conn(conn_name) @conns[conn_name] end
conn_list() { |conn_name,conn| ... }
click to toggle source
# File lib/ManqodServer.rb, line 70 def conn_list @conns.each_pair{|conn_name,conn| yield conn_name,conn } end
default_connection()
click to toggle source
# File lib/ManqodServer.rb, line 76 def default_connection dc=nil @conns.each_pair{|cn,c| dc=c if c.has_key?("client_default") && c["client_default"]} dc end
free_conn(conn_name)
click to toggle source
# File lib/ManqodServer.rb, line 125 def free_conn(conn_name) if @dbs.has_key?(conn_name) @dbs[conn_name].exit @dbs.delete(conn_name) einfo("#{conn_name} freed.") end end
init()
click to toggle source
# File lib/ManqodServer.rb, line 26 def init ManqodLogger.instance.set_log(@logdev) if @logdev einfo("setting log level to #{@log_level}") ManqodLogger.instance.set_level(@log_level) if @log_level ManqodLogger.instance.set_report_address(@report_address) if @report_address load_conns begin DRb.start_service(@uri,self) rescue =>err eerror("starting main server failed: #{err}") return false end @conns.sort{|a,b| a[1]["auto_load_order"] <=> b[1]["auto_load_order"]}.each{|conn| load_conn(conn[0]) if conn[1]["auto_load"] } setup_clients init_HeartBeat @starting_up=false eprint("serving") DRb.thread.join einfo("graceful shutdown") end
load_conn(conn_name)
click to toggle source
# File lib/ManqodServer.rb, line 90 def load_conn(conn_name) if @conns.has_key?(conn_name) begin @conns[conn_name]["key_name"]=conn_name @conns[conn_name]['pid']=fork{ th=DrbDb.new(@conns[conn_name],@uri) th.init } Process.detach(@conns[conn_name]['pid']) edebug("forked \"#{conn_name}\" [#{@conns[conn_name]['uri']}](#{@conns[conn_name]['pid']})") begin sleep 1 @dbs[conn_name]=DRb::DRbObject.new_with_uri(@conns[conn_name]['uri']) # @dbs[conn_name].alive? @dbs[conn_name].state @dbs[conn_name].setup_client rescue => err #check if pid is alive begin Process::kill(0,@conns[conn_name]['pid']) rescue Errno::ESRCH raise("Process with pid #{@conns[conn_name]['pid']} is dead") end ewarn("waiting for startup of #{conn_name} (#{err})") retry end while @dbs[conn_name].state != DrbDb::SERVING rescue =>err eerror("error starting connection:#{conn_name} #{err}, retrying") sleep 1 retry end end end
register_client(client_id,client_object,client_db)
click to toggle source
# File lib/ManqodServer.rb, line 146 def register_client(client_id,client_object,client_db) @connected_clients[client_id.clone]={:object => client_object, :db => client_db} unless @connected_clients.has_key?(client_id) einfo("#{client_id} registered to [#{client_db}]") end
reload_conn(conn_name)
click to toggle source
# File lib/ManqodServer.rb, line 82 def reload_conn(conn_name) if @conns.has_key?(conn_name) free_conn(conn_name) if @dbs.has_key?(conn_name) load_conn(conn_name) setup_clients end end
setup_clients()
click to toggle source
# File lib/ManqodServer.rb, line 49 def setup_clients #wait for all clients to start up begin begin found=false @dbs.each_value{|drbdb| unless drbdb.serving? found = true sleep 1 end } end while found @dbs.each_pair{|conn_name,drbdb| drbdb.setup_client unless drbdb.client and drbdb.client.alive?} rescue end end
stop()
click to toggle source
# File lib/ManqodServer.rb, line 133 def stop @dbs.each_key{|dbn| begin free_conn(dbn) rescue =>err eerror("cannot stop #{dbn}:#{err}") end } current_server.stop_service einfo("server halted") exit end
to_s()
click to toggle source
# File lib/ManqodServer.rb, line 159 def to_s "ManqodServer" end
unregister_client(client_id)
click to toggle source
# File lib/ManqodServer.rb, line 150 def unregister_client(client_id) @connected_clients.delete(client_id) einfo("#{client_id} unregistered") end