class Roma::Client::Proxy::Daemon
Attributes
daemon[R]
Public Class Methods
new(argv = nil)
click to toggle source
# File lib/roma/client/proxy/daemon.rb 139 def initialize(argv = nil) 140 options(argv) 141 initialize_logger 142 @sender = Roma::Client::Sender.new 143 update_rttable(@init_nodes) 144 end
rttable()
click to toggle source
# File lib/roma/client/proxy/daemon.rb 135 def self.rttable 136 @@rttable 137 end
Private Class Methods
daemon() { || ... }
click to toggle source
# File lib/roma/client/proxy/daemon.rb 246 def self.daemon 247 p = Process.fork { 248 pid=Process.setsid 249 Signal.trap(:INT){ 250 exit! 0 251 } 252 Signal.trap(:TERM){ 253 exit! 0 254 } 255 Signal.trap(:HUP){ 256 exit! 0 257 } 258 File.open("/dev/null","r+"){|f| 259 STDIN.reopen f 260 STDOUT.reopen f 261 STDERR.reopen f 262 } 263 yield 264 } 265 $stderr.puts p 266 exit! 0 267 end
Public Instance Methods
initialize_logger()
click to toggle source
# File lib/roma/client/proxy/daemon.rb 146 def initialize_logger 147 Roma::Logging::RLogger.create_singleton_instance(@log_path, 148 @log_age, 149 @log_size) 150 end
start()
click to toggle source
# File lib/roma/client/proxy/daemon.rb 152 def start 153 154 timer 155 156 loop do 157 begin 158 EventMachine::run do 159 EventMachine.start_server('0.0.0.0', @port, ClientHandler) 160 EventMachine.start_unix_domain_server("/tmp/#{@uds_name}", ClientHandler) 161 end 162 rescue =>e 163 $log.error("#{e} #{$@}") 164 retry 165 end 166 end 167 end
Private Instance Methods
make_rttable(node)
click to toggle source
# File lib/roma/client/proxy/daemon.rb 184 def make_rttable(node) 185 mklhash = @sender.send_route_mklhash_command(node) 186 return nil unless mklhash 187 188 if @@rttable && @@rttable.mklhash == mklhash 189 return @@rttable 190 end 191 192 rd = @sender.send_routedump_command(node) 193 if rd 194 ret = Roma::Client::ClientRoutingTable.new(rd) 195 ret.mklhash = mklhash 196 return ret 197 end 198 nil 199 rescue =>e 200 $log.error("#{e} #{$@}") 201 nil 202 end
options(argv)
click to toggle source
# File lib/roma/client/proxy/daemon.rb 204 def options(argv) 205 opts = OptionParser.new 206 opts.banner="usage:#{File.basename($0)} [options] addr_port" 207 208 @uds_name = 'roma' 209 opts.on("-n", "--name [name]","Unix domain socket name.default=roma") { |v| @uds_name = v } 210 @port = 12345 211 opts.on("-p", "--port [port number]","default=12345"){ |v| @port = v.to_i } 212 @log_path = "./rcdaemon.log" 213 opts.on("-l", "--log [path]","default=./"){ |v| 214 @log_path = v 215 @log_path << "/" if @log_path[-1] != "/" 216 @log_path << "rcdaemon.log" 217 } 218 219 @daemon = true 220 opts.on(nil, "--debug"){ @daemon = false } 221 @log_age = 10 222 @log_size = 1024 * 1024 223 224 opts.parse!(argv) 225 raise OptionParser::ParseError.new if argv.length < 1 226 @init_nodes = argv 227 rescue OptionParser::ParseError => e 228 $stderr.puts e.message 229 $stderr.puts opts.help 230 exit 1 231 end
timer()
click to toggle source
# File lib/roma/client/proxy/daemon.rb 233 def timer 234 Thread.new do 235 loop do 236 sleep 10 237 timer_event_10sec 238 end 239 end 240 end
timer_event_10sec()
click to toggle source
# File lib/roma/client/proxy/daemon.rb 242 def timer_event_10sec 243 update_rttable(@@rttable.nodes) 244 end
update_rttable(nodes)
click to toggle source
# File lib/roma/client/proxy/daemon.rb 171 def update_rttable(nodes) 172 raise RuntimeError.new("nodes must not be nil.") unless nodes 173 174 nodes.each { |node| 175 rt = make_rttable(node) 176 if rt != nil 177 @@rttable = rt 178 return 179 end 180 } 181 raise RuntimeError.new("fatal error") 182 end