class Fluent::Plugin::RoundRobinOutput

def configure(conf)

def configure(conf)
  super
  @stores.each do |store|
    @weights << store.weight
  end
  @rr = -1  # starts from @output[0]
  @rand_seed = Random.new.seed
end

def initialize

def initialize
  super
  @weights = []
end

def multi_workers_ready?

def multi_workers_ready?
  true
end

def next_output

def next_output
  @rr = 0 if (@rr += 1) >= @weight_array.size
  @weight_array[@rr]
end

def process(tag, es)

def process(tag, es)
  next_output.emit_events(tag, es)
end

def rebuild_weight_array

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

def start

def start
  super
  rebuild_weight_array
end