[Groonga-commit] droonga/droonga-engine at d9109cd [master] Introduce LiveNodesListObserver

Back to archive index

YUKI Hiroshi null+****@clear*****
Fri May 9 14:22:52 JST 2014


YUKI Hiroshi	2014-05-09 14:22:52 +0900 (Fri, 09 May 2014)

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

  Message:
    Introduce LiveNodesListObserver

  Copied files:
    lib/droonga/live_nodes_list_observer.rb
      (from lib/droonga/live_nodes_list_loader.rb)
  Modified files:
    lib/droonga/dispatcher.rb
    lib/droonga/engine.rb
    lib/droonga/live_nodes_list_loader.rb

  Modified: lib/droonga/dispatcher.rb (+3 -2)
===================================================================
--- lib/droonga/dispatcher.rb    2014-05-09 14:01:18 +0900 (309fc97)
+++ lib/droonga/dispatcher.rb    2014-05-09 14:22:52 +0900 (f3b69af)
@@ -24,7 +24,6 @@ require "droonga/farm"
 require "droonga/session"
 require "droonga/error_messages"
 require "droonga/distributor"
-require "droonga/live_nodes_list_loader"
 
 module Droonga
   class Dispatcher
@@ -48,9 +47,12 @@ module Droonga
       end
     end
 
+    attr_accessor :live_nodes
+
     def initialize(engine_state, catalog)
       @engine_state = engine_state
       @catalog = catalog
+      @live_nodes = catalog.all_nodes
       @adapter_runners = create_adapter_runners
       @farm = Farm.new(@engine_state.name, @catalog, @engine_state.loop,
                        :dispatcher => self)
@@ -58,7 +60,6 @@ module Droonga
       @step_runners = create_step_runners
       @forwarder = @engine_state.forwarder
       @replier = @engine_state.replier
-      # @live_nodes = LiveNodesListLoader.load
     end
 
     def start

  Modified: lib/droonga/engine.rb (+15 -3)
===================================================================
--- lib/droonga/engine.rb    2014-05-09 14:01:18 +0900 (9ebbee9)
+++ lib/droonga/engine.rb    2014-05-09 14:22:52 +0900 (b1f0aaf)
@@ -20,6 +20,7 @@ require "droonga/loggable"
 require "droonga/engine_state"
 require "droonga/catalog_observer"
 require "droonga/dispatcher"
+require "droonga/live_nodes_list_observer"
 
 module Droonga
   class Engine
@@ -27,19 +28,27 @@ module Droonga
 
     def initialize(loop, name)
       @state = EngineState.new(loop, name)
-      observer = Droonga::CatalogObserver.new(@state.loop)
-      @catalog_observer = observer
+
+      @catalog_observer = Droonga::CatalogObserver.new(@state.loop)
       @catalog_observer.on_reload = lambda do |catalog|
         graceful_restart(catalog)
         logger.info("restarted")
       end
+
+      @live_nodes_list_observer = LiveNodesListObserver.new
+      @live_nodes_list_observer.on_update = lambda do |live_nodes|
+        @live_nodes = live_nodes
+        @dispatcher.live_nodes = live_nodes if @dispatcher
+      end
     end
 
     def start
       logger.trace("start: start")
       @state.start
+      @live_nodes_list_observer.start
       @catalog_observer.start
       catalog = @catalog_observer.catalog
+      @live_nodes = catalog.all_nodes
       @dispatcher = create_dispatcher(catalog)
       @dispatcher.start
       logger.trace("start: done")
@@ -48,6 +57,7 @@ module Droonga
     def shutdown
       logger.trace("shutdown: start")
       @catalog_observer.stop
+      @live_nodes_list_observer.stop
       @dispatcher.shutdown
       @state.shutdown
       logger.trace("shutdown: done")
@@ -59,7 +69,9 @@ module Droonga
 
     private
     def create_dispatcher(catalog)
-      Dispatcher.new(@state, catalog)
+      dispatcher = Dispatcher.new(@state, catalog)
+      dispatcher.live_nodes = @live_nodes
+      dispatcher
     end
 
     def graceful_restart(catalog)

  Modified: lib/droonga/live_nodes_list_loader.rb (+2 -15)
===================================================================
--- lib/droonga/live_nodes_list_loader.rb    2014-05-09 14:01:18 +0900 (467b416)
+++ lib/droonga/live_nodes_list_loader.rb    2014-05-09 14:22:52 +0900 (91ae63b)
@@ -18,21 +18,8 @@ require "json"
 
 module Droonga
   class LiveNodesListLoader
-    class << self
-      def load
-        new.load
-      end
-    end
-
-    DEFAULT_LIST_PATH = "live-nodes.json"
-
-    def base_path
-      ENV["DROONGA_BASE_DIR"]
-    end
-
-    def file_path
-      path = ENV["DROONGA_LIVE_NODES_LIST"] || DEFAULT_LIST_PATH
-      File.expand_path(path, base_path)
+    def initialize(file_path)
+      @file_path = file_path
     end
 
     def load

  Copied: lib/droonga/live_nodes_list_observer.rb (+21 -27) 63%
===================================================================
--- lib/droonga/live_nodes_list_loader.rb    2014-05-09 14:01:18 +0900 (467b416)
+++ lib/droonga/live_nodes_list_observer.rb    2014-05-09 14:22:52 +0900 (ee6914d)
@@ -1,3 +1,5 @@
+# -*- coding: utf-8 -*-
+#
 # Copyright (C) 2014 Droonga Project
 #
 # This library is free software; you can redistribute it and/or
@@ -13,15 +15,19 @@
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-require "pathname"
-require "json"
+require "droonga/loggable"
+require "droonga/live_nodes_list_loader"
 
 module Droonga
-  class LiveNodesListLoader
-    class << self
-      def load
-        new.load
-      end
+  class LiveNodesListObserver
+    include Loggable
+
+    attr_accessor :on_update
+
+    def start
+    end
+
+    def stop
     end
 
     DEFAULT_LIST_PATH = "live-nodes.json"
@@ -35,29 +41,17 @@ module Droonga
       File.expand_path(path, base_path)
     end
 
-    def load
-      list_file = Pathname(file_path)
-      list = parse_list_file(list_file)
-      list.keys
-    end
+    def load_list!
+      loader = LiveNodesListLoader.new(file_path)
+      live_nodes = loader.load
+      logger.info("loaded", :path => file_path, :live_nodes => live_nodes)
 
-    private
-    def parse_list_file(list_file)
-      return default_list unless list_file
-      return default_list unless list_file.exist?
-
-      contents = list_file.read
-      return default_list if contents.empty?
-
-      begin
-        JSON.parse(contents).keys
-      rescue JSON::ParserError
-        default_list
-      end
+      on_update.call(live_nodes) if on_update
     end
 
-    def default_list
-      {}
+    private
+    def log_tag
+      "live-nodes-list-observer"
     end
   end
 end
-------------- next part --------------
HTML����������������������������...
下載 



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