[Groonga-commit] droonga/droonga-engine at 7f4934d [master] Move implementation to generate progress message to the data absorber itself

Back to archive index

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 



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