YUKI Hiroshi
null+****@clear*****
Fri Jun 27 13:58:08 JST 2014
YUKI Hiroshi 2014-06-27 13:58:08 +0900 (Fri, 27 Jun 2014) New Revision: 60bbd9df3209dc55fcb88f7abc566628d891fbc9 https://github.com/droonga/droonga-engine/commit/60bbd9df3209dc55fcb88f7abc566628d891fbc9 Message: Determine serf port based on its role Modified files: lib/droonga/command/droonga_engine.rb lib/droonga/command/serf_event_handler.rb lib/droonga/serf.rb Modified: lib/droonga/command/droonga_engine.rb (+8 -8) =================================================================== --- lib/droonga/command/droonga_engine.rb 2014-06-27 13:35:09 +0900 (420c620) +++ lib/droonga/command/droonga_engine.rb 2014-06-27 13:58:08 +0900 (c6e81e5) @@ -237,7 +237,7 @@ module Droonga def run @serf = run_serf - @serf_port_observer = run_serf_port_observer + @serf_status_observer = run_serf_status_observer @service_runner = run_service @catalog_observer = run_catalog_observer @loop_breaker = Coolio::AsyncWatcher.new @@ -279,7 +279,7 @@ module Droonga @loop_breaker.signal @loop_breaker.detach @serf.shutdown - @serf_port_observer.stop + @serf_status_observer.stop @catalog_observer.stop @service_runner.stop_gracefully end @@ -288,7 +288,7 @@ module Droonga @loop_breaker.signal @loop_breaker.detach @serf.shutdown - @serf_port_observer.stop + @serf_status_observer.stop @catalog_observer.stop @service_runner.stop_immediately end @@ -331,13 +331,13 @@ module Droonga @serf = run_serf end - def run_serf_port_observer - serf_port_observer = FileObserver.new(@loop, Serf.port_file) - serf_port_observer.on_change = lambda do + def run_serf_status_observer + serf_status_observer = FileObserver.new(@loop, Serf.status_file) + serf_status_observer.on_change = lambda do restart_serf end - serf_port_observer.start - serf_port_observer + serf_status_observer.start + serf_status_observer end def run_catalog_observer Modified: lib/droonga/command/serf_event_handler.rb (+7 -6) =================================================================== --- lib/droonga/command/serf_event_handler.rb 2014-06-27 13:35:09 +0900 (23b7d6b) +++ lib/droonga/command/serf_event_handler.rb 2014-06-27 13:58:08 +0900 (bf97ed7) @@ -68,10 +68,9 @@ module Droonga end def process_event - if @event_name == "user:change_port" or - @event_name == "query:change_port" - serf_port = @payload["port"] - output_port_file(serf_port) + if @event_name == "user:change_role" or + @event_name == "query:change_role" + save_status(:role, @payload["role"]) end end @@ -96,8 +95,10 @@ module Droonga output(path, file_contents) end - def output_port_file(port) - output(Serf.port_file, port) + def save_status(key, value) + status = Serf.load_status + status[key] = value + output(Serf.status_file, JSON.pretty_generate(status)) end def output(path, file_contents) Modified: lib/droonga/serf.rb (+36 -19) =================================================================== --- lib/droonga/serf.rb 2014-06-27 13:35:09 +0900 (7f4d0df) +++ lib/droonga/serf.rb 2014-06-27 13:58:08 +0900 (725e173) @@ -28,20 +28,32 @@ module Droonga Droonga::Path.base + "serf" end - def port_file - Droonga::Path.state + "serf_port" + def status_file + Droonga::Path.state + "status_file" end - def default_port - 7946 + ROLE = { + :default => { + :port => 7946, + }, + :source => { + :port => 7947, + }, + :destination => { + :port => 7948, + }, + } end - def dump_source_port - 7947 - end - - def dump_destination_port - 7948 + def load_status + status_file = status_file + if status_file.exist? + contents = status_file.read + unless contents.empty? + return JSON.parse(contents, :symbolize_names => true) + end + end + {} end end @@ -132,16 +144,21 @@ module Droonga "#{extract_host(@name)}:7373" end + def status + @status ||= self.class.load_status + end + + def role + return :default unless status[:role] + + role = status[:role].to_sym + return :default unless self.class::ROLE.keys.include?(role) + + role + end + def port - port_file = self.class.port_file - if port_file.exist? - contents = port_file.read - unless contents.empty? - return contents.to_i - end - end - - self.class.default_port + self.class::ROLE[role][:port] end def detect_other_hosts -------------- next part -------------- HTML����������������������������... ダウンロード