Class: Mist::Pool
- Inherits:
-
Object
- Object
- Mist::Pool
- Defined in:
- lib/mist/pool.rb
Class Method Summary collapse
Instance Method Summary collapse
- #acquire ⇒ Object
- #add(server) ⇒ Object
-
#initialize(mutex) ⇒ Pool
constructor
A new instance of Pool.
- #release(server) ⇒ Object
- #remove(server) ⇒ Object
Constructor Details
#initialize(mutex) ⇒ Pool
Returns a new instance of Pool.
33 34 35 36 37 38 |
# File 'lib/mist/pool.rb', line 33 def initialize(mutex) @mutex = mutex @available = [] @busy = [] end |
Class Method Details
.get(servers) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/mist/pool.rb', line 18 def self.get(servers) @@pool ||= nil if @@pool.nil? @@pool = Pool.new(Mutex.new) begin servers.each do |server| @@pool.add(server) end rescue StandardError => ex Mist.logger.error "couldn't load config file: #{ex}" end end @@pool end |
Instance Method Details
#acquire ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/mist/pool.rb', line 53 def acquire server = nil # Get the first available client; loop until one becomes available loop do @mutex.synchronize do server = @available.shuffle.pop unless @available.empty? @busy.push server unless server.nil? end break if server sleep 1 end return server end |
#add(server) ⇒ Object
40 41 42 43 44 |
# File 'lib/mist/pool.rb', line 40 def add(server) @mutex.synchronize do @available << server end end |
#release(server) ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/mist/pool.rb', line 68 def release(server) # Put the server back in the available list; if the server was removed # while we were using it, don't put it back. @mutex.synchronize do @available.push server if @busy.include? server @busy.delete server if @busy.include? server end end |
#remove(server) ⇒ Object
46 47 48 49 50 51 |
# File 'lib/mist/pool.rb', line 46 def remove(server) @mutex.synchronize do @available.delete server if @available.include? server @busy.delete server if @busy.include? server end end |