Class: Fraggle::Block::Client
- Inherits:
-
Object
- Object
- Fraggle::Block::Client
show all
- Includes:
- Request::Verb
- Defined in:
- lib/fraggle/block/client.rb
Defined Under Namespace
Classes: OutOfNodes
Constant Summary
Request::Verb::ACCESS, Request::Verb::DEL, Request::Verb::GET, Request::Verb::GETDIR, Request::Verb::NOP, Request::Verb::REV, Request::Verb::SET, Request::Verb::STAT, Request::Verb::WAIT, Request::Verb::WALK
Instance Attribute Summary collapse
Instance Method Summary
collapse
-
#connect ⇒ Object
-
#connection_to(host, port) ⇒ Object
-
#del(path, rev) ⇒ Object
-
#disconnect ⇒ Object
-
#find_all_of_the_nodes ⇒ Object
-
#get(path, rev = nil) ⇒ Object
-
#getdir(path, rev = nil, offset = nil, limit = nil) ⇒ Object
-
#initialize(addrs = []) ⇒ Client
constructor
A new instance of Client.
-
#reconnect ⇒ Object
-
#rev ⇒ Object
-
#set(path, value, rev) ⇒ Object
-
#walk(path, rev = nil, offset = 0) ⇒ Object
Constructor Details
#initialize(addrs = []) ⇒ Client
Returns a new instance of Client.
13
14
15
16
17
18
19
|
# File 'lib/fraggle/block/client.rb', line 13
def initialize(addrs = [])
@addrs = addrs
if not @addrs or @addrs.length == 0
raise "No doozer servers to connect to"
end
connect
end
|
Instance Attribute Details
#addrs ⇒ Object
Returns the value of attribute addrs.
10
11
12
|
# File 'lib/fraggle/block/client.rb', line 10
def addrs
@addrs
end
|
#connection ⇒ Object
Returns the value of attribute connection.
11
12
13
|
# File 'lib/fraggle/block/client.rb', line 11
def connection
@connection
end
|
Instance Method Details
#connect ⇒ Object
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/fraggle/block/client.rb', line 73
def connect
begin
host, port = @addrs.shift.split(':')
@connection = connection_to(host, port.to_i)
find_all_of_the_nodes
rescue => e
retry if @addrs.any?
raise OutOfNodes, "where did they go?"
end
end
|
#connection_to(host, port) ⇒ Object
84
85
86
|
# File 'lib/fraggle/block/client.rb', line 84
def connection_to(host, port)
Connection.new(host, port)
end
|
#del(path, rev) ⇒ Object
41
42
43
44
|
# File 'lib/fraggle/block/client.rb', line 41
def del(path, rev)
request = Request.new(:path => path, :rev => rev, :verb => DEL)
send(request).first
end
|
#disconnect ⇒ Object
64
65
66
|
# File 'lib/fraggle/block/client.rb', line 64
def disconnect
@connection.disconnect
end
|
#find_all_of_the_nodes ⇒ Object
88
89
90
91
92
93
|
# File 'lib/fraggle/block/client.rb', line 88
def find_all_of_the_nodes
response = rev()
walk('/ctl/node/*/addr', response.rev).each do |node|
@addrs << node.value unless @addrs.include? node.value
end
end
|
#get(path, rev = nil) ⇒ Object
26
27
28
29
|
# File 'lib/fraggle/block/client.rb', line 26
def get(path, rev = nil)
request = Request.new(:path => path, :rev => rev, :verb => GET)
send(request).first
end
|
#getdir(path, rev = nil, offset = nil, limit = nil) ⇒ Object
31
32
33
34
|
# File 'lib/fraggle/block/client.rb', line 31
def getdir(path, rev = nil, offset = nil, limit = nil)
request = Request.new(:path => path, :rev => rev, :offset => offset, :limit => limit, :verb => GETDIR)
send(request)
end
|
#reconnect ⇒ Object
68
69
70
71
|
# File 'lib/fraggle/block/client.rb', line 68
def reconnect
disconnect
connect
end
|
#rev ⇒ Object
21
22
23
24
|
# File 'lib/fraggle/block/client.rb', line 21
def rev
request = Request.new(:verb => REV)
send(request).first
end
|
#set(path, value, rev) ⇒ Object
36
37
38
39
|
# File 'lib/fraggle/block/client.rb', line 36
def set(path, value, rev)
request = Request.new(:path => path, :value => value, :rev => rev, :verb => SET)
send(request).first
end
|
#walk(path, rev = nil, offset = 0) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/fraggle/block/client.rb', line 46
def walk(path, rev = nil, offset = 0)
all_responses = []
done = false
while not done
request = Request.new(:path => path, :rev => rev, :verb => WALK, :offset => offset)
responses = send(request)
responses.each do |response|
if response.err_code == Response::Err::RANGE
done = true
break
end
all_responses.push response
offset += 1
end
end
return all_responses
end
|