[Groonga-commit] droonga/droonga-engine at 84b2ba2 [master] Make Serf agent restartable

Back to archive index

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����������������������������...
下載 



More information about the Groonga-commit mailing list
Back to archive index