YUKI Hiroshi
null+****@clear*****
Fri Dec 5 15:44:41 JST 2014
YUKI Hiroshi 2014-12-05 15:44:41 +0900 (Fri, 05 Dec 2014) New Revision: 26e41ae77c5f130ce49fab2eafa1a0c076e9dc0e https://github.com/droonga/droonga-engine/commit/26e41ae77c5f130ce49fab2eafa1a0c076e9dc0e Merged e0f9f34: Merge pull request #30 from piroor/replicas-in-a-branch Message: Collect routes by each replicas and slices, not the master dataset Modified files: lib/droonga/catalog/dataset.rb lib/droonga/catalog/replicas_volume.rb lib/droonga/catalog/slice.rb lib/droonga/catalog/slices_volume.rb Modified: lib/droonga/catalog/dataset.rb (+5 -43) =================================================================== --- lib/droonga/catalog/dataset.rb 2014-12-05 15:11:04 +0900 (f3a9063) +++ lib/droonga/catalog/dataset.rb 2014-12-05 15:44:41 +0900 (abb832d) @@ -68,54 +68,16 @@ module Droonga end def compute_routes(message, live_nodes) - collect_routes_from_replicas(replicas, - :message => message, + @replicas.collect_routes_for(message, :live_nodes => live_nodes) end def single_slice? # TODO: Support slice key - replicas.all? do |replica| - replica.is_a?(SingleVolume) or - replica.slices.nil? or - replica.slices.size == 1 - end - end - - private - def collect_routes_from_replicas(replicas, params) - message = params[:message] - routes = params[:routes] ||= [] - case message["type"] - when "broadcast" - replicas = replicas.select(message["replica"].to_sym, params[:live_nodes]) - replicas.each do |replica| - slices = replica.select_slices - collect_routes_from_slices(slices, params) - end - when "scatter" - replicas = replicas.select(message["replica"].to_sym, params[:live_nodes]) - replicas.each do |replica| - slice = replica.choose_slice(message["record"]) - collect_routes_from_slice(slice, params) - end - end - routes - end - - def collect_routes_from_slices(slices, params) - slices.each do |slice| - collect_routes_from_slice(slice, params) - end - end - - def collect_routes_from_slice(slice, params) - if slice.replicas - collect_routes_from_replicas(slice.replicas, params) - else - routes = params[:routes] ||= [] - routes << slice.volume.address.to_s - routes + replicas.all? do |volume| + volume.is_a?(SingleVolume) or + volume.is_a?(ReplicasVolume) or + volume.slices.size == 1 end end end Modified: lib/droonga/catalog/replicas_volume.rb (+17 -0) =================================================================== --- lib/droonga/catalog/replicas_volume.rb 2014-12-05 15:11:04 +0900 (46dc0b7) +++ lib/droonga/catalog/replicas_volume.rb 2014-12-05 15:44:41 +0900 (30645c6) @@ -77,6 +77,23 @@ module Droonga end end + def collect_routes_for(message, params) + routes = params[:routes] ||= [] + case message["type"] + when "broadcast" + volumes = select(message["replica"].to_sym, params[:live_nodes]) + volumes.each do |volume| + volume.collect_routes_for(message, params) + end + when "scatter" + volumes = select(message["replica"].to_sym, params[:live_nodes]) + volumes.each do |volume| + volume.collect_routes_for(message, params) + end + end + routes + end + private def collect_all_nodes nodes = [] Modified: lib/droonga/catalog/slice.rb (+12 -0) =================================================================== --- lib/droonga/catalog/slice.rb 2014-12-05 15:11:04 +0900 (a4a0ad0) +++ lib/droonga/catalog/slice.rb 2014-12-05 15:44:41 +0900 (2a558e3) @@ -56,6 +56,18 @@ module Droonga def all_nodes @all_nodes ||= volume.all_nodes end + + def collect_routes_for(message, params) + if replicas + replicas.collect_routes_for(message, params) + elsif slices + slices.collect_routes_for(message, params) + else + routes = params[:routes] ||= [] + routes << volume.address.to_s + routes + end + end end end end Modified: lib/droonga/catalog/slices_volume.rb (+15 -0) =================================================================== --- lib/droonga/catalog/slices_volume.rb 2014-12-05 15:11:04 +0900 (628446e) +++ lib/droonga/catalog/slices_volume.rb 2014-12-05 15:44:41 +0900 (6141ab4) @@ -71,6 +71,21 @@ module Droonga @all_nodes ||= collect_all_nodes end + def collect_routes_for(message, params) + routes = params[:routes] ||= [] + case message["type"] + when "broadcast" + slices = select_slices + slices.each do |slice| + slice.collect_routes_for(message, params) + end + when "scatter" + slice = choose_slice(message["record"]) + slice.collect_routes_for(message, params) + end + routes + end + private def compute_continuum total_weight = compute_total_weight -------------- next part -------------- HTML����������������������������...Download