[Groonga-commit] droonga/droonga-engine at 60bbd9d [master] Determine serf port based on its role

アーカイブの一覧に戻る

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����������������������������...
ダウンロード 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る