repo.or.cz
/
ruby-mogilefs-client.git
/
blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
log
|
graphiclog1
|
graphiclog2
|
commit
|
commitdiff
|
tree
|
refs
|
edit
|
fork
history
|
raw
|
HEAD
Branching mogilefs-client to version 1.2.1
[ruby-mogilefs-client.git]
/
lib
/
mogilefs
/
pool.rb
blob
edca70f12e676828fa895450290dc39f5969e7fa
1
require 'thread'
2
require 'mogilefs'
3
4
class MogileFS::Pool
5
6
class BadObjectError < RuntimeError; end
7
8
def initialize(klass, *args)
9
@args = args
10
@klass = klass
11
@queue = Queue.new
12
@objects = []
13
end
14
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
24
25
def put(o)
26
raise BadObjectError unless @objects.include? o
27
@queue.push o
28
purge
29
end
30
31
def use
32
object = get
33
yield object
34
ensure
35
put object
36
end
37
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
48
49
end
50