YUKI Hiroshi
null+****@clear*****
Fri Nov 21 18:21:07 JST 2014
YUKI Hiroshi 2014-11-21 18:21:07 +0900 (Fri, 21 Nov 2014) New Revision: 7f4934dad4110956188ce1db410ce784aa56e283 https://github.com/droonga/droonga-engine/commit/7f4934dad4110956188ce1db410ce784aa56e283 Message: Move implementation to generate progress message to the data absorber itself Modified files: bin/droonga-engine-absorb-data bin/droonga-engine-join lib/droonga/data_absorber.rb Modified: bin/droonga-engine-absorb-data (+5 -16) =================================================================== --- bin/droonga-engine-absorb-data 2014-11-21 18:08:11 +0900 (6717b3f) +++ bin/droonga-engine-absorb-data 2014-11-21 18:21:07 +0900 (f05648f) @@ -104,10 +104,9 @@ absorber_options = { :tag => options.tag, } absorber = Droonga::DataAbsorber.new(absorber_options) -calculated_required_time = absorber.required_time_in_seconds if options.remote - start = Time.new.to_i + start_time_in_seconds = Time.new.to_i run_remote_command(destination_node, "absorb_data", "node" => destination_node, "source" => options.source_host, @@ -122,15 +121,8 @@ if options.remote absorbing = response["value"] break unless absorbing - if calculated_required_time != Droonga::DataAbsorber::TIME_UNKNOWN and - calculated_required_time > 0 - elapsed_time = Time.new.to_i - start - progress = elapsed_time / calculated_required_time - progress = [(progress * 100).to_i, 100].min - remaining_time_in_seconds = [calculated_required_time - elapsed_time, 0].max - remaining_time_in_minutes = remaining_time_in_seconds / 60 - puts "#{progress}% done (maybe #{remaining_time_in_minutes}minutes remaining)" - end + progress = absorber.report_progress(start_time_in_seconds) + puts(progress) if progress end response = run_remote_command(source_node, "report_status", "node" => source_node, @@ -146,11 +138,8 @@ if options.remote end else absorber.absorb do |live_status| - if live_status[:progress] != Droonga::DataAbsorber::PROGRESS_UNKNOWN - progress = [(live_status[:progress] * 100).to_i, 100].min - remaining_time_in_seconds = ]calculated_required_time * (1 - live_status[:progress])].max - remaining_time_in_minutes = remaining_time_in_seconds / 60 - puts "#{progress}% done (maybe #{remaining_time_in_minutes}minutes remaining)" + if live_status[:progress] + puts live_status[:progress] else puts live_status[:output] end Modified: bin/droonga-engine-join (+3 -11) =================================================================== --- bin/droonga-engine-join 2014-11-21 18:08:11 +0900 (09c63be) +++ bin/droonga-engine-join 2014-11-21 18:21:07 +0900 (8b25160) @@ -74,9 +74,8 @@ absorber_options = { :tag => options[:tag], } absorber = Droonga::DataAbsorber.new(absorber_options) -calculated_required_time = absorber.required_time_in_seconds -start = Time.new.to_i +start_time_in_seconds = Time.new.to_i puts("Joining new replica to the cluster...") run_remote_command(joining_node, "join", "node" => joining_node, @@ -94,15 +93,8 @@ while true absorbing = response["value"] break unless absorbing - if calculated_required_time != Droonga::DataAbsorber::TIME_UNKNOWN and - calculated_required_time > 0 - elapsed_time = Time.new.to_i - start - progress = elapsed_time / calculated_required_time - progress = [(progress * 100).to_i, 100].min - remaining_time_in_seconds = [calculated_required_time - elapsed_time, 0].max - remaining_time_in_minutes = remaining_time_in_seconds / 60 - puts "#{progress}% done (maybe #{remaining_time_in_minutes}minutes remaining)" - end + progress = absorber.report_progress(start_time_in_seconds) + puts(progress) if progress end response = run_remote_command(source_node, "report_status", Modified: lib/droonga/data_absorber.rb (+23 -10) =================================================================== --- lib/droonga/data_absorber.rb 2014-11-21 18:08:11 +0900 (c4f6a4c) +++ lib/droonga/data_absorber.rb 2014-11-21 18:21:07 +0900 (c5d36a4) @@ -51,25 +51,39 @@ module Droonga client_command_line = [client] + client_options(client) calculated_required_time = required_time_in_seconds - start = Time.new.to_i + start_time_in_seconds = Time.new.to_i env = {} Open3.pipeline_r([env, *drndump_command_line], [env, *client_command_line]) do |last_stdout, thread| last_stdout.each do |output| - progress = nil - if calculated_required_time == TIME_UNKNOWN or - calculated_required_time <= 0 - progress = PROGRESS_UNKNOWN - else - progress = (Time.new.to_i - start) / calculated_required_time - end - yield(:progress => progress, + yield(:progress => report_progress(start_time_in_seconds), :output => output) end end end + def can_report_remaining_time? + required_time_in_seconds != Droonga::DataAbsorber::TIME_UNKNOWN and + required_time_in_seconds > 0 + end + def required_time_in_seconds + @required_time_in_seconds ||= calculate_required_time_in_seconds + end + + def report_progress(start_time_in_seconds) + return nil unless can_report_remaining_time? + + elapsed_time = Time.new.to_i - start + progress = elapsed_time / required_time_in_seconds + progress = [(progress * 100).to_i, 100].min + remaining_time_in_seconds = [required_time_in_seconds - elapsed_time, 0].max + remaining_time_in_minutes = remaining_time_in_seconds / 60 + "#{progress}% done (maybe #{remaining_time_in_minutes}minutes remaining)" + end + + private + def calculate_required_time_in_seconds @params[:client].include?("droonga-send") total_n_source_records / @params[:messages_per_second] else @@ -77,7 +91,6 @@ module Droonga end end - private def drndump_options options = [] options += ["--host", @params[:source_host]] if @params[:source_host] -------------- next part -------------- HTML����������������������������...Download