# File lib/fluent/plugin/out_roundrobin.rb, line 28 def initialize super @weights = [] end
# File lib/fluent/plugin/out_roundrobin.rb, line 35 def configure(conf) super @stores.each do |store| @weights << store.weight end @rr = -1 # starts from @output[0] @rand_seed = Random.new.seed end
# File lib/fluent/plugin/out_roundrobin.rb, line 50 def process(tag, es) next_output.emit_events(tag, es) end
# File lib/fluent/plugin/out_roundrobin.rb, line 45 def start super rebuild_weight_array end
# File lib/fluent/plugin/out_roundrobin.rb, line 56 def next_output @rr = 0 if (@rr += 1) >= @weight_array.size @weight_array[@rr] end
# File lib/fluent/plugin/out_roundrobin.rb, line 61 def rebuild_weight_array gcd = @weights.inject(0) {|r,w| r.gcd(w) } weight_array = [] @outputs.zip(@weights).each {|output,weight| (weight / gcd).times { weight_array << output } } # don't randomize order if all weight is 1 (=default) if @weights.any? {|w| w > 1 } r = Random.new(@rand_seed) weight_array.sort_by! { r.rand } end @weight_array = weight_array end