[Groonga-commit] droonga/droonga-engine at 6c24fd4 [master] Add --ready-notify-fd

Back to archive index

Kouhei Sutou null+****@clear*****
Sun Jul 20 23:40:31 JST 2014


Kouhei Sutou	2014-07-20 23:40:31 +0900 (Sun, 20 Jul 2014)

  New Revision: 6c24fd491494fca63e68ed32e0d52a66846a82ff
  https://github.com/droonga/droonga-engine/commit/6c24fd491494fca63e68ed32e0d52a66846a82ff

  Message:
    Add --ready-notify-fd
    
    It is for tools like drntest. It is useful to wait until droonga-engine
    is ready.

  Modified files:
    lib/droonga/command/droonga_engine.rb
    lib/droonga/command/droonga_engine_service.rb
    lib/droonga/command/droonga_engine_worker.rb
    lib/droonga/dispatcher.rb
    lib/droonga/engine.rb
    lib/droonga/engine_state.rb
    lib/droonga/farm.rb
    lib/droonga/slice.rb
    lib/droonga/supervisor.rb
    lib/droonga/worker_process_agent.rb

  Modified: lib/droonga/command/droonga_engine.rb (+19 -0)
===================================================================
--- lib/droonga/command/droonga_engine.rb    2014-07-20 23:17:03 +0900 (e10e112)
+++ lib/droonga/command/droonga_engine.rb    2014-07-20 23:40:31 +0900 (619969f)
@@ -112,6 +112,7 @@ module Droonga
         DEFAULT_PORT = 10031
 
         attr_reader :host, :port, :tag, :log_file, :pid_file_path
+        attr_reader :ready_notify_fd
         def initialize
           @host = DEFAULT_HOST
           @port = DEFAULT_PORT
@@ -119,6 +120,7 @@ module Droonga
           @log_file = nil
           @daemon = false
           @pid_file_path = nil
+          @ready_notify_fd = nil
         end
 
         def engine_name
@@ -150,6 +152,7 @@ module Droonga
           add_log_options(parser)
           add_process_options(parser)
           add_path_options(parser)
+          add_notification_options(parser)
         end
 
         def listen_socket
@@ -221,6 +224,15 @@ module Droonga
           end
         end
 
+        def add_notification_options(parser)
+          parser.separator("")
+          parser.separator("Notification:")
+          parser.on("--ready-notify-fd=FD", Integer,
+                    "Send 'ready' message to FD on ready") do |fd|
+            @ready_notify_fd = fd
+          end
+        end
+
         def bind_heartbeat_socket
           socket = UDPSocket.new(address_family)
           socket.bind(@host, @port)
@@ -238,6 +250,13 @@ module Droonga
           @serf = run_serf
           @serf_status_observer = run_serf_status_observer
           @service_runner = run_service
+          if****@confi*****_notify_fd
+            @service_runner.on_ready = lambda do
+              output = IO.new(@configuration.ready_notify_fd)
+              output.puts("ready")
+              output.close
+            end
+          end
           @catalog_observer = run_catalog_observer
           @loop_breaker = Coolio::AsyncWatcher.new
           @loop.attach(@loop_breaker)

  Modified: lib/droonga/command/droonga_engine_service.rb (+3 -0)
===================================================================
--- lib/droonga/command/droonga_engine_service.rb    2014-07-20 23:17:03 +0900 (f5d74ec)
+++ lib/droonga/command/droonga_engine_service.rb    2014-07-20 23:40:31 +0900 (ff5c19f)
@@ -140,6 +140,9 @@ module Droonga
 
       def run_engine
         @engine = Engine.new(@loop, @engine_name, @internal_engine_name)
+        @engine.on_ready = lambda do
+          @worker_process_agent.ready
+        end
         @engine.start
       end
 

  Modified: lib/droonga/command/droonga_engine_worker.rb (+1 -0)
===================================================================
--- lib/droonga/command/droonga_engine_worker.rb    2014-07-20 23:17:03 +0900 (0e8b4d1)
+++ lib/droonga/command/droonga_engine_worker.rb    2014-07-20 23:40:31 +0900 (d9d7c93)
@@ -216,6 +216,7 @@ module Droonga
           stop_immediately
         end
         @worker_process_agent.start
+        @worker_process_agent.ready
       end
 
       def stop_worker_process_agent

  Modified: lib/droonga/dispatcher.rb (+3 -0)
===================================================================
--- lib/droonga/dispatcher.rb    2014-07-20 23:17:03 +0900 (2e12f30)
+++ lib/droonga/dispatcher.rb    2014-07-20 23:40:31 +0900 (cbfb23f)
@@ -63,6 +63,9 @@ module Droonga
     end
 
     def start
+      @farm.on_ready = lambda do
+        @engine_state.on_ready
+      end
       @farm.start
     end
 

  Modified: lib/droonga/engine.rb (+5 -0)
===================================================================
--- lib/droonga/engine.rb    2014-07-20 23:17:03 +0900 (41f837f)
+++ lib/droonga/engine.rb    2014-07-20 23:40:31 +0900 (3a5b324)
@@ -29,6 +29,7 @@ module Droonga
   class Engine
     include Loggable
 
+    attr_writer :on_ready
     def initialize(loop, name, internal_name)
       @state = EngineState.new(loop, name, internal_name)
       @catalog = load_catalog
@@ -38,10 +39,14 @@ module Droonga
       @live_nodes_list_observer.on_change = lambda do
         @state.live_nodes = load_live_nodes
       end
+      @on_ready = nil
     end
 
     def start
       logger.trace("start: start")
+      @state.on_ready = lambda do
+        @on_ready.call if @on_ready
+      end
       @state.start
       @live_nodes_list_observer.start
       @dispatcher.start

  Modified: lib/droonga/engine_state.rb (+6 -0)
===================================================================
--- lib/droonga/engine_state.rb    2014-07-20 23:17:03 +0900 (8b78288)
+++ lib/droonga/engine_state.rb    2014-07-20 23:40:31 +0900 (01e02f8)
@@ -31,6 +31,7 @@ module Droonga
     attr_reader :internal_name
     attr_reader :forwarder
     attr_reader :replier
+    attr_writer :on_ready
     attr_accessor :on_finish
     attr_accessor :catalog
     def initialize(loop, name, internal_name)
@@ -42,6 +43,7 @@ module Droonga
       @forwarder = Forwarder.new(@loop)
       @forwarder.resume
       @replier = Replier.new(@forwarder)
+      @on_ready = nil
       @on_finish = nil
       @catalog = nil
       @live_nodes = nil
@@ -124,6 +126,10 @@ module Droonga
       end
     end
 
+    def on_ready
+      @on_ready.call if @on_ready
+    end
+
     private
     def log_tag
       "engine_state"

  Modified: lib/droonga/farm.rb (+8 -0)
===================================================================
--- lib/droonga/farm.rb    2014-07-20 23:17:03 +0900 (6f82c3d)
+++ lib/droonga/farm.rb    2014-07-20 23:40:31 +0900 (fa2f13e)
@@ -19,6 +19,7 @@ require "droonga/slice"
 
 module Droonga
   class Farm
+    attr_writer :on_ready
     def initialize(name, catalog, loop, options={})
       @name = name
       @catalog = catalog
@@ -36,7 +37,14 @@ module Droonga
     end
 
     def start
+      n_ready_slices = 0
       @slices.each_value do |slice|
+        slice.on_ready = lambda do
+          n_ready_slices += 1
+          if n_ready_slices ==****@slice*****
+            @on_ready.call if @on_ready
+          end
+        end
         slice.start
       end
     end

  Modified: lib/droonga/slice.rb (+13 -1)
===================================================================
--- lib/droonga/slice.rb    2014-07-20 23:17:03 +0900 (2b8520e)
+++ lib/droonga/slice.rb    2014-07-20 23:40:31 +0900 (68f2d3f)
@@ -24,6 +24,7 @@ module Droonga
   class Slice
     include Loggable
 
+    attr_accessor :on_ready
     def initialize(dataset, loop, options={})
       @dataset = dataset
       @loop = loop
@@ -33,6 +34,7 @@ module Droonga
       @job_pusher = JobPusher.new(@loop, @database_path)
       @processor = Processor.new(@loop, @job_pusher, @options)
       @supervisor = nil
+      @on_ready = nil
     end
 
     def start
@@ -86,7 +88,10 @@ module Droonga
     end
 
     def start_supervisor
-      return if @n_workers.zero?
+      if @n_workers.zero?
+        on_ready
+        return
+      end
 
       config = Supervisor::WorkerConfiguration.new
       config.name = @options[:name]
@@ -95,6 +100,9 @@ module Droonga
       config.plugins = @options[:plugins]
       config.job_pusher = @job_pusher
       @supervisor = Supervisor.new(@loop, @n_workers, config)
+      @supervisor.on_ready = lambda do
+        on_ready
+      end
       @supervisor.start
     end
 
@@ -105,6 +113,10 @@ module Droonga
     end
 
     private
+    def on_ready
+      @on_ready.call if @on_ready
+    end
+
     def log_tag
       "slice"
     end

  Modified: lib/droonga/supervisor.rb (+9 -0)
===================================================================
--- lib/droonga/supervisor.rb    2014-07-20 23:17:03 +0900 (bbddff9)
+++ lib/droonga/supervisor.rb    2014-07-20 23:40:31 +0900 (da3a302)
@@ -20,15 +20,24 @@ module Droonga
   class Supervisor
     include Loggable
 
+    attr_writer :on_ready
     def initialize(loop, n_workers, config)
       @loop = loop
       @n_workers = n_workers
       @config = config
+      @on_ready = nil
     end
 
     def start
+      n_ready_workers = 0
       @worker_runners = @n_workers.times.collect do |i|
         worker_runner = WorkerRunner.new(@loop, i, @config)
+        worker_runner.on_ready = lambda do
+          n_ready_workers += 1
+          if n_ready_workers == @n_workers
+            @on_ready.call if @on_ready
+          end
+        end
         worker_runner.start
         # TODO: support auto re-run
         worker_runner

  Modified: lib/droonga/worker_process_agent.rb (+4 -2)
===================================================================
--- lib/droonga/worker_process_agent.rb    2014-07-20 23:17:03 +0900 (878cdb4)
+++ lib/droonga/worker_process_agent.rb    2014-07-20 23:40:31 +0900 (1cb757d)
@@ -33,8 +33,6 @@ module Droonga
     def start
       @loop.attach(@input)
       @loop.attach(@output)
-
-      @output.write(Messages::READY)
     end
 
     def stop
@@ -49,6 +47,10 @@ module Droonga
       end
     end
 
+    def ready
+      @output.write(Messages::READY)
+    end
+
     def on_stop_gracefully=(callback)
       @on_stop_gracefully = callback
     end
-------------- next part --------------
HTML����������������������������...
Download 



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