[Groonga-commit] droonga/droonga-engine at 165b469 [master] Don't register session if there is no need to collect results

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri Apr 17 16:01:56 JST 2015


YUKI Hiroshi	2015-04-17 16:01:56 +0900 (Fri, 17 Apr 2015)

  New Revision: 165b469e5866711a92e6f1424fc9bf3bde52ddad
  https://github.com/droonga/droonga-engine/commit/165b469e5866711a92e6f1424fc9bf3bde52ddad

  Message:
    Don't register session if there is no need to collect results

  Modified files:
    lib/droonga/collector_runner.rb
    lib/droonga/dispatcher.rb
    lib/droonga/session.rb

  Modified: lib/droonga/collector_runner.rb (+4 -0)
===================================================================
--- lib/droonga/collector_runner.rb    2015-04-17 15:45:29 +0900 (21a9e25)
+++ lib/droonga/collector_runner.rb    2015-04-17 16:01:56 +0900 (f99b6fc)
@@ -44,6 +44,10 @@ module Droonga
       logger.trace("collector: done")
     end
 
+    def collectable?(message)
+      not find_collector_class(message).nil?
+    end
+
     private
     def find_collector_class(message)
       @collector_classes.find do |collector_class|

  Modified: lib/droonga/dispatcher.rb (+10 -2)
===================================================================
--- lib/droonga/dispatcher.rb    2015-04-17 15:45:29 +0900 (7dac181)
+++ lib/droonga/dispatcher.rb    2015-04-17 16:01:56 +0900 (1724cb0)
@@ -172,17 +172,25 @@ module Droonga
           dataset = message["dataset"] || @message["dataset"]
           collector_runner = @collector_runners[dataset]
           session = session_planner.create_session(id, self, collector_runner)
+          if session.need_result?
           timeout_seconds = message["timeout_seconds"] || nil
           @engine_state.register_session(id, session,
                                          :timeout_seconds => timeout_seconds)
+          session.start
+            logger.trace("process_internal_message: waiting for results")
+          else
+            session.start
+            session.finish
+            session = nil
+            logger.trace("process_internal_message: no need to wait for results")
+          end
         else
           logger.error("no steps error", :id => id, :message => message)
           return
           #todo: take cases receiving result before its query into account
         end
-        session.start
       end
-      @engine_state.unregister_session(id) if session.done?
+      @engine_state.unregister_session(id) if session and session.done?
       logger.trace("process_internal_message: done")
     end
 

  Modified: lib/droonga/session.rb (+6 -0)
===================================================================
--- lib/droonga/session.rb    2015-04-17 15:45:29 +0900 (ca3d0b0)
+++ lib/droonga/session.rb    2015-04-17 16:01:56 +0900 (dad05ef)
@@ -35,6 +35,12 @@ module Droonga
       @n_dones ==****@tasks*****
     end
 
+    def need_result?
+      @tasks.any? do |task|
+        @collector_runner.collectable?("task" => task)
+      end
+    end
+
     def start
       tasks = @inputs[nil] || []
       logger.trace("start: no task!") if tasks.empty?
-------------- next part --------------
HTML����������������������������...
Download 



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