class MogileFS::Pool

Constants

BadObjectError

Attributes

purge_keep[RW]

Must be a positive Integer that is smaller than :purge_threshold Default: 2

purge_threshold[RW]

Must be a positive Integer that is greater than :purge_keep Default: 5

Public Class Methods

new(klass, *args) click to toggle source
# File lib/mogilefs/pool.rb, line 15
def initialize(klass, *args)
  @args = args
  @klass = klass
  @queue = Queue.new
  @objects = {}
  @purge_threshold = 5
  @purge_keep = 2
end

Public Instance Methods

get() click to toggle source
# File lib/mogilefs/pool.rb, line 24
def get
  @queue.pop true
rescue ThreadError
  object = @klass.new(*@args)
  @objects[object] = object
end
purge() click to toggle source
# File lib/mogilefs/pool.rb, line 46
def purge
  return if @queue.length < @purge_threshold
  begin
    until @queue.length <= @purge_keep
      obj = @queue.pop true
      @objects.delete obj
      obj.backend.shutdown if MogileFS::Client === obj
    end
  rescue ThreadError
  end
end
put(o) click to toggle source
# File lib/mogilefs/pool.rb, line 31
def put(o)
  raise BadObjectError unless @objects.include? o
  @queue.push o
  purge
end
use() { |object| ... } click to toggle source
# File lib/mogilefs/pool.rb, line 37
def use
  object = get
  yield object
  nil
ensure
  put object
  nil
end