[Groonga-commit] droonga/droonga-engine at 76c35f0 [master] Make shutdown processes yieldable

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri Sep 5 15:45:32 JST 2014


YUKI Hiroshi	2014-09-05 15:45:32 +0900 (Fri, 05 Sep 2014)

  New Revision: 76c35f01e996632ff129876cb84227b769bd2ff5
  https://github.com/droonga/droonga-engine/commit/76c35f01e996632ff129876cb84227b769bd2ff5

  Message:
    Make shutdown processes yieldable

  Modified files:
    lib/droonga/command/droonga_engine_service.rb
    lib/droonga/engine.rb
    lib/droonga/fluent_message_receiver.rb
    lib/droonga/internal_fluent_message_receiver.rb
    lib/droonga/worker_process_agent.rb

  Modified: lib/droonga/command/droonga_engine_service.rb (+28 -6)
===================================================================
--- lib/droonga/command/droonga_engine_service.rb    2014-09-05 14:22:40 +0900 (1037804)
+++ lib/droonga/command/droonga_engine_service.rb    2014-09-05 15:45:32 +0900 (b1def56)
@@ -133,9 +133,14 @@ module Droonga
       end
 
       def shutdown_internal_message_receiver
-        return if @internal_message_receiver.nil?
+        if @internal_message_receiver.nil?
+          yield
+          return
+        end
         @internal_message_receiver, receiver = nil, @internal_message_receiver
-        receiver.shutdown
+        receiver.shutdown do
+          yield
+        end
       end
 
       def run_engine
@@ -167,7 +172,9 @@ module Droonga
       end
 
       def shutdown_worker_process_agent
-        @worker_process_agent.stop
+        @worker_process_agent.stop do
+          yield
+        end
       end
 
       def create_receiver
@@ -205,10 +212,25 @@ module Droonga
       def stop_gracefully
         return if @stopping
         @stopping = true
-        @receiver.stop_gracefully
+
+        n_rest_shutdowns = 3
+        on_finish = lambda do
+          n_rest_shutdowns -= 1
+          if n_rest_shutdowns.zero?
+            yield
+          end
+        end
+
+        @receiver.stop_gracefully do
+          on_finish.call
+        end
         @engine.stop_gracefully do
-          shutdown_worker_process_agent
-          shutdown_internal_message_receiver
+          shutdown_worker_process_agent do
+            on_finish.call
+          end
+          shutdown_internal_message_receiver do
+            on_finish.call
+          end
         end
       end
 

  Modified: lib/droonga/engine.rb (+13 -3)
===================================================================
--- lib/droonga/engine.rb    2014-09-05 14:22:40 +0900 (c47ebac)
+++ lib/droonga/engine.rb    2014-09-05 15:45:32 +0900 (deb1657)
@@ -55,13 +55,23 @@ module Droonga
 
     def stop_gracefully
       logger.trace("stop_gracefully: start")
+      n_rest_shutdowns = 2
       @live_nodes_list_observer.stop
       on_finish = lambda do
         logger.trace("stop_gracefully/on_finish: start")
         output_last_processed_timestamp
-        @dispatcher.shutdown
-        @state.shutdown
-        yield
+        on_completely_finish = lambda do
+          n_rest_shutdowns -= 1
+          if n_rest_shutdowns.zero?
+            yield
+          end
+        end
+        @dispatcher.shutdown do
+          on_completely_finish.call
+        end
+        @state.shutdown do
+          on_completely_finish.call
+        end
         logger.trace("stop_gracefully/on_finish: done")
       end
       if****@state*****_session?

  Modified: lib/droonga/fluent_message_receiver.rb (+27 -9)
===================================================================
--- lib/droonga/fluent_message_receiver.rb    2014-09-05 14:22:40 +0900 (c54a6d3)
+++ lib/droonga/fluent_message_receiver.rb    2014-09-05 15:45:32 +0900 (65b0b94)
@@ -42,17 +42,30 @@ module Droonga
 
     def stop_gracefully
       logger.trace("stop_gracefully: start")
-      shutdown_heartbeat_receiver
-      logger.trace("stop_gracefully: middle")
-      shutdown_server
-      logger.trace("stop_gracefully: done")
+      n_rest_shutdowns = 2
+      on_finish = lambda do
+        n_rest_shutdowns -= 1
+        if n_rest_shutdowns.zero?
+          yield
+          logger.trace("stop_gracefully: done")
+        end
+      end
+      shutdown_heartbeat_receiver do
+        on_finish.call
+      end
+      shutdown_server do
+        on_finish.call
+      end
     end
 
     def stop_immediately
       logger.trace("stop_immediately: start")
-      stop_gracefully
-      shutdown_clients
-      logger.trace("stop_immediately: done")
+      stop_gracefully do
+        shutdown_clients do
+          yield
+          logger.trace("stop_immediately: done")
+        end
+      end
     end
 
     private
@@ -65,8 +78,10 @@ module Droonga
 
     def shutdown_heartbeat_receiver
       logger.trace("shutdown_heartbeat_receiver: start")
-      @heartbeat_receiver.shutdown
-      logger.trace("shutdown_heartbeat_receiver: done")
+      @heartbeat_receiver.shutdown do
+        yield
+        logger.trace("shutdown_heartbeat_receiver: done")
+      end
     end
 
     def start_server
@@ -91,6 +106,7 @@ module Droonga
     def shutdown_server
       logger.trace("shutdown_server: start")
       @server.close
+      yield
       logger.trace("shutdown_server: done")
     end
 
@@ -98,6 +114,7 @@ module Droonga
       @clients.each do |client|
         client.close
       end
+      yield
     end
 
     def log_tag
@@ -126,6 +143,7 @@ module Droonga
       def shutdown
         @socket.close
         @watcher.detach
+        yield
       end
 
       private

  Modified: lib/droonga/internal_fluent_message_receiver.rb (+1 -0)
===================================================================
--- lib/droonga/internal_fluent_message_receiver.rb    2014-09-05 14:22:40 +0900 (181c213)
+++ lib/droonga/internal_fluent_message_receiver.rb    2014-09-05 15:45:32 +0900 (4de0dec)
@@ -43,6 +43,7 @@ module Droonga
       shutdown_message_receiver
       shutdown_heartbeat_socket
       shutdown_listen_socket
+      yield
       logger.trace("shutdown: done")
     end
 

  Modified: lib/droonga/worker_process_agent.rb (+15 -1)
===================================================================
--- lib/droonga/worker_process_agent.rb    2014-09-05 14:22:40 +0900 (fa75b39)
+++ lib/droonga/worker_process_agent.rb    2014-09-05 15:45:32 +0900 (f158316)
@@ -41,18 +41,32 @@ module Droonga
 
     def stop
       logger.trace("stop: start")
+
+      n_rest_closes = 2
+      on_finish = lambda do
+        n_rest_closes -= 1
+        if n_rest_closes.zero?
+          yield
+          logger.trace("stop: done")
+        end
+      end
+
       if @output
         @output, output = nil, @output
         output.write(Messages::FINISH)
         output.on_write_complete do
           output.close
+          on_finish.call
         end
+      else
+        on_finish.call
       end
+
       if @input
         @input, input = nil, @input
         input.close
       end
-      logger.trace("stop: done")
+      on_finish.call
     end
 
     def ready
-------------- next part --------------
HTML����������������������������...
Download 



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