[Groonga-commit] droonga/drndump at 6441b28 [master] Calculate remaining time based on actual throughput as possible

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri Apr 17 17:50:40 JST 2015


YUKI Hiroshi	2015-04-17 17:50:40 +0900 (Fri, 17 Apr 2015)

  New Revision: 6441b28464024eac19765265d4d0a2741ec92f6e
  https://github.com/droonga/drndump/commit/6441b28464024eac19765265d4d0a2741ec92f6e

  Message:
    Calculate remaining time based on actual throughput as possible

  Modified files:
    lib/drndump/dump_client.rb

  Modified: lib/drndump/dump_client.rb (+22 -1)
===================================================================
--- lib/drndump/dump_client.rb    2015-04-17 17:15:15 +0900 (c8e4037)
+++ lib/drndump/dump_client.rb    2015-04-17 17:50:40 +0900 (dae8db7)
@@ -20,6 +20,7 @@ require "droonga/client"
 module Drndump
   class DumpClient
     DEFAULT_MESSAGES_PER_SECOND = 10000 # same to droogna-engine's one
+    MIN_REPORTED_THROUGHPUT = 0.01
 
     attr_reader :n_forecasted_messages, :n_received_messages
     attr_reader :error_message
@@ -72,6 +73,10 @@ module Drndump
       @n_messages_per_second = options[:messages_per_second] || DEFAULT_MESSAGES_PER_SECOND
       @n_messages_per_second = [@n_messages_per_second, 1].max
 
+      @measure_start_time = Time.now
+      @previous_measure_time = @measure_start_time
+      @previous_n_received_messages = 0
+
       dump_message = {
         "type"    => "dump",
         "dataset" => @dataset,
@@ -137,12 +142,28 @@ module Drndump
       @error_message
     end
 
+    def recent_throughput
+      now = Time.now
+      n_messages = @n_received_messages - @previous_n_received_messages
+      if now - @previous_measure_time < 1
+        now = @previous_measure_time
+        n_messages = @previous_n_received_messages
+      else
+        @previous_measure_time = now
+        @previous_n_received_messages = n_messages.to_f
+      end
+      elapsed_seconds = now - @measure_start_time
+
+      [n_messages / elapsed_seconds, MIN_REPORTED_THROUGHPUT].max
+    end
+
     def n_remaining_messages
       [@n_forecasted_messages - @n_received_messages, 0].max
     end
 
     def remaining_seconds
-      n_remaining_messages.to_f / @n_messages_per_second
+      throughput = [recent_throughput, @n_messages_per_second].min
+      n_remaining_messages.to_f / throughput
     end
 
     ONE_MINUTE_IN_SECONDS = 60
-------------- next part --------------
HTML����������������������������...
다운로드 



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