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