Branching mogilefs-client to version 1.2.1
[ruby-mogilefs-client.git] / lib / mogilefs / pool.rb
blobedca70f12e676828fa895450290dc39f5969e7fa
1 require 'thread'
2 require 'mogilefs'
4 class MogileFS::Pool
6   class BadObjectError < RuntimeError; end
8   def initialize(klass, *args)
9     @args = args
10     @klass = klass
11     @queue = Queue.new
12     @objects = []
13   end
15   def get
16     begin
17       object = @queue.pop true
18     rescue ThreadError
19       object = @klass.new(*@args)
20       @objects << object
21     end
22     return object
23   end
25   def put(o)
26     raise BadObjectError unless @objects.include? o
27     @queue.push o
28     purge
29   end
31   def use
32     object = get
33     yield object
34   ensure
35     put object
36   end
38   def purge
39     return if @queue.length < 5
40     begin
41       until @queue.length <= 2 do
42         obj = @queue.pop true
43         @objects.delete obj
44       end
45     rescue ThreadError
46     end
47   end
49 end