Sha256: d8150315a018a33e5705b6dc389995af857dc75c6359994a9ce882a457941046
Contents?: true
Size: 1.22 KB
Versions: 3
Compression:
Stored size: 1.22 KB
Contents
require 'ebisu_connection/greatest_common_divisor' require 'ebisu_connection/slave' module EbisuConnection class SlaveGroup class AllSlavesHasGoneError < StandardError; end def initialize(slaves_conf, slave_group) @slaves = slaves_conf.map do |conf| Slave.new(conf, slave_group) end recalc_roulette end def sample raise AllSlavesHasGoneError if @slaves.empty? @slaves[@roulette.sample] end def remove_connection(connection) return unless s = @slaves.detect{|s| s.connection == connection} s.disconnect! rescue nil @slaves.delete(s) raise AllSlavesHasGoneError if @slaves.empty? recalc_roulette nil end def all_disconnect! @reserve_release = nil @slaves.each {|s| s.disconnect!} end def reserve_release_connection! @reserve_release = true end def reserved_release? !!@reserve_release end private def recalc_roulette weight_list = @slaves.map {|s| s.weight } @roulette = [] gcd = GreatestCommonDivisor.calc(weight_list) weight_list.each_with_index do |w, index| weight = w / gcd @roulette.concat([index] * weight) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ebisu_connection-1.0.0 | lib/ebisu_connection/slave_group.rb |
ebisu_connection-0.3.1 | lib/ebisu_connection/slave_group.rb |
ebisu_connection-0.3.0 | lib/ebisu_connection/slave_group.rb |