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����������������������������...下載