[Groonga-commit] droonga/fluent-plugin-droonga at 0554f7c [master] Benchmark: rewrite to run benchmark with networking features

Back to archive index

YUKI Hiroshi null+****@clear*****
Mon Oct 28 18:22:39 JST 2013


YUKI Hiroshi	2013-10-28 18:22:39 +0900 (Mon, 28 Oct 2013)

  New Revision: 0554f7c9f574774f24b2b86fbee3d47a72397778
  https://github.com/droonga/fluent-plugin-droonga/commit/0554f7c9f574774f24b2b86fbee3d47a72397778

  Message:
    Benchmark: rewrite to run benchmark with networking features

  Modified files:
    benchmark/benchmark.rb
    benchmark/watch/benchmark-notify.rb

  Modified: benchmark/benchmark.rb (+6 -2)
===================================================================
--- benchmark/benchmark.rb    2013-10-28 18:22:11 +0900 (7e357a1)
+++ benchmark/benchmark.rb    2013-10-28 18:22:39 +0900 (178dced)
@@ -73,8 +73,8 @@ module Droonga
       @client.connection.send_receive(subscribe_envelope)
     end
 
-    def envelope_to_subscribe(term)
-      {
+    def envelope_to_subscribe(term, route=nil)
+      message = {
         "id" => Time.now.to_f.to_s,
         "date" => Time.now,
         "statusCode" => 200,
@@ -84,6 +84,10 @@ module Droonga
           "subscriber" => term,
         },
       }
+      unless route.nil?
+        message["body"]["route"] = route
+      end
+      message
     end
 
     def populate_feeds(incidence)

  Modified: benchmark/watch/benchmark-notify.rb (+30 -24)
===================================================================
--- benchmark/watch/benchmark-notify.rb    2013-10-28 18:22:11 +0900 (dad437c)
+++ benchmark/watch/benchmark-notify.rb    2013-10-28 18:22:39 +0900 (fa46fd5)
@@ -15,52 +15,53 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
+# this benchmark must be done by benchmark-notify.sh.
+
 require "benchmark"
 require "fileutils"
 require "optparse"
 require "csv"
 
-require "groonga"
+require "droonga/client"
 
-require "droonga/watcher"
 require File.expand_path(File.join(__FILE__, "..", "..", "utils.rb"))
 
 class NotifyBenchmark
   attr_reader :n_subscribers
 
-  def initialize(n_initial_subscribers)
-    @database = DroongaBenchmark::WatchDatabase.new
-    @watcher = Droonga::Watcher.new(@database.context)
-    @keywords_generator = DroongaBenchmark::KeywordsGenerator.new
-    @keywords = []
+  WATCHING_KEYWORD = "a"
+
+  def initialize(params)
+    @params = params || {}
+    @n_times = params[:n_times] || 0
+    @timeout = params[:timeout] || 0
+
     @n_subscribers = 0
-    add_subscribers(n_initial_subscribers)
+
+    @client = Droonga::Client.new(tag: "droonga", port: 23003)
+    @receiver = Droonga::Client::Connection::DroongaProtocol::Receiver.new
+    @route = "#{@receiver.host}:#{@receiver.port}/droonga"
+    add_subscribers(@params[:n_initial_subscribers])
   end
 
   def run
-    @matched_keywords.each do |keyword|
-      publish(keyword)
+    @n_times.times do
+      do_feed(WATCHING_KEYWORD)
     end
   end
 
-  def prepare_keywords(n_keywords)
-    @matched_keywords =****@keywo*****(n_keywords)
-  end
-
   def add_subscribers(n_subscribers)
-    new_keywords = []
     n_subscribers.times do
-      new_keywords << @keywords_generator.next
+      message = DroongaBenchmark::MessageCreator.envelope_to_subscribe(WATCHING_KEYWORD, @route)
+      @client.connection.send_receive(message)
     end
-    @database.subscribe_to(new_keywords)
-    @keywords += new_keywords
     @n_subscribers += n_subscribers
   end
 
-  private
-  def publish(matched_keyword)
-    @watcher.publish([matched_keyword], {}) do |route, subscribers|
-    end
+  def do_feed(target)
+    message = DroongaBenchmark::MessageCreator.envelope_to_feed(target)
+    @client.connection.send(message)
+    @receiver.receive(:timeout => @timeout)
   end
 end
 
@@ -83,6 +84,10 @@ option_parser = OptionParser.new do |parser|
             "number of benchmark steps (optional)") do |n_steps|
     options[:n_steps] = n_steps
   end
+  parser.on("--timeout=N", Float,
+            "timeout for receiving (optional)") do |timeout|
+    options[:timeout] = timeout
+  end
   parser.on("--output-path=PATH", String,
             "path to the output CSV file (optional)") do |output_path|
     options[:output_path] = output_path
@@ -91,13 +96,14 @@ end
 args = option_parser.parse!(ARGV)
 
 
-notify_benchmark = NotifyBenchmark.new(options[:n_subscribers])
+notify_benchmark = NotifyBenchmark.new(:n_initial_subscribers => options[:n_subscribers],
+                                       :n_times => options[:n_times],
+                                       :timeout => options[:timeout])
 results = []
 options[:n_steps].times do |try_count|
   notify_benchmark.add_subscribers(notify_benchmark.n_subscribers) if try_count > 0
   label = "#{notify_benchmark.n_subscribers} subscribers"
   result = Benchmark.bmbm do |benchmark|
-    notify_benchmark.prepare_keywords(options[:n_times])
     benchmark.report(label) do
       notify_benchmark.run
     end
-------------- next part --------------
HTML����������������������������...
Download 



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