YUKI Hiroshi
null+****@clear*****
Sun Nov 30 00:43:09 JST 2014
YUKI Hiroshi 2014-11-30 00:43:09 +0900 (Sun, 30 Nov 2014) New Revision: 84b2ba235a08fa80c35e9f0fe22e7d8a7c753393 https://github.com/droonga/droonga-engine/commit/84b2ba235a08fa80c35e9f0fe22e7d8a7c753393 Message: Make Serf agent restartable Modified files: lib/droonga/serf.rb Modified: lib/droonga/serf.rb (+25 -0) =================================================================== --- lib/droonga/serf.rb 2014-11-29 17:40:47 +0900 (8828969) +++ lib/droonga/serf.rb 2014-11-30 00:43:09 +0900 (a03e63b) @@ -18,6 +18,7 @@ require "English" require "json" require "coolio" require "open3" +require "fileutils" require "droonga/path" require "droonga/loggable" @@ -25,6 +26,7 @@ require "droonga/catalog_loader" require "droonga/node_status" require "droonga/serf_downloader" require "droonga/line_buffer" +require "droonga/file_observer" module Droonga class Serf @@ -44,6 +46,10 @@ module Droonga def path Droonga::Path.base + "serf" end + + def restart_file + Droonga::Path.state + "restart_serf" + end end include Loggable @@ -72,6 +78,16 @@ module Droonga "-log-level", log_level, "-tag", "role=engine", *retry_joins) + + FileUtils.mkdir_p(self.class.restart_file.parent) + FileUtils.touch(self.class.restart_file) + + @restart_file_observer = FileObserver.new(@loop, self.class.restart_file) + @restart_file_observer.on_change = lambda do + restart + end + @restart_file_observer.start + logger.trace("start: done") end @@ -82,11 +98,20 @@ module Droonga def stop logger.trace("stop: start") run("leave").stop + @restart_file_observer.stop + @restart_file_observer = nil @agent.stop @agent = nil logger.trace("stop: done") end + def restart + logger.trace("restart: start") + stop + start + logger.trace("restart: done") + end + def join(*hosts) ensure_serf nodes = hosts.collect do |host| -------------- next part -------------- HTML����������������������������... 下載