zk-eventmachine 0.1.7 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,6 +12,7 @@ module ZK
|
|
12
12
|
def initialize(host, opts={})
|
13
13
|
@host = host
|
14
14
|
@close_deferred = Deferred::Default.new
|
15
|
+
@connection_lost_deferred = Deferred::Default.new
|
15
16
|
@event_handler = EventHandlerEM.new(self)
|
16
17
|
end
|
17
18
|
|
@@ -29,6 +30,18 @@ module ZK
|
|
29
30
|
@cnx.on_attached(&blk)
|
30
31
|
end
|
31
32
|
|
33
|
+
# If we get a ZK::Exceptions::ConnectionLoss exeption back from any call,
|
34
|
+
# we will call back any handlers registered here with the exception
|
35
|
+
# instance as the argument
|
36
|
+
#
|
37
|
+
# once this deferred has been fired, it will be replaced with a new
|
38
|
+
# deferred, so callbacks must be re-registered
|
39
|
+
#
|
40
|
+
def on_connection_lost(&blk)
|
41
|
+
@connection_lost_deferred.callback(&blk) if blk
|
42
|
+
@connection_lost_deferred
|
43
|
+
end
|
44
|
+
|
32
45
|
def reopen(*a)
|
33
46
|
raise NotImplementedError, "reoopen is not implemented for the eventmachine version of the client"
|
34
47
|
end
|
@@ -61,18 +74,21 @@ module ZK
|
|
61
74
|
#
|
62
75
|
def get(path, opts={}, &block)
|
63
76
|
Callback.new_get_cb(block) do |cb|
|
77
|
+
cb.errback(&method(:connection_lost_hook))
|
64
78
|
super(path, opts.merge(:callback => cb))
|
65
79
|
end
|
66
80
|
end
|
67
81
|
|
68
82
|
def create(path, data='', opts={}, &block)
|
69
83
|
Callback.new_create_cb(block) do |cb|
|
84
|
+
cb.errback(&method(:connection_lost_hook))
|
70
85
|
super(path, data, opts.merge(:callback => cb))
|
71
86
|
end
|
72
87
|
end
|
73
88
|
|
74
89
|
def set(path, data, opts={}, &block)
|
75
90
|
Callback.new_set_cb(block) do |cb|
|
91
|
+
cb.errback(&method(:connection_lost_hook))
|
76
92
|
super(path, data, opts.merge(:callback => cb))
|
77
93
|
end
|
78
94
|
end
|
@@ -83,6 +99,7 @@ module ZK
|
|
83
99
|
meth = :"new_#{cb_style}_cb"
|
84
100
|
|
85
101
|
Callback.__send__(meth, block) do |cb|
|
102
|
+
cb.errback(&method(:connection_lost_hook))
|
86
103
|
super(path, opts.merge(:callback => cb))
|
87
104
|
end
|
88
105
|
end
|
@@ -93,27 +110,39 @@ module ZK
|
|
93
110
|
|
94
111
|
def delete(path, opts={}, &block)
|
95
112
|
Callback.new_delete_cb(block) do |cb|
|
113
|
+
cb.errback(&method(:connection_lost_hook))
|
96
114
|
super(path, opts.merge(:callback => cb))
|
97
115
|
end
|
98
116
|
end
|
99
117
|
|
100
118
|
def children(path, opts={}, &block)
|
101
119
|
Callback.new_children_cb(block) do |cb|
|
120
|
+
cb.errback(&method(:connection_lost_hook))
|
102
121
|
super(path, opts.merge(:callback => cb))
|
103
122
|
end
|
104
123
|
end
|
105
124
|
|
106
125
|
def get_acl(path, opts={}, &block)
|
107
126
|
Callback.new_get_acl_cb(block) do |cb|
|
127
|
+
cb.errback(&method(:connection_lost_hook))
|
108
128
|
super(path, opts.merge(:callback => cb))
|
109
129
|
end
|
110
130
|
end
|
111
131
|
|
112
132
|
def set_acl(path, acls, opts={}, &block)
|
113
133
|
Callback.new_set_acl_cb(block) do |cb|
|
134
|
+
cb.errback(&method(:connection_lost_hook))
|
114
135
|
super(path, acls, opts.merge(:callback => cb))
|
115
136
|
end
|
116
137
|
end
|
138
|
+
|
139
|
+
protected
|
140
|
+
def connection_lost_hook(exc)
|
141
|
+
if exc and exc.kind_of?(ZK::Exceptions::ConnectionLoss)
|
142
|
+
dfr, @connection_lost_deferred = @connection_lost_deferred, Deferred::Default.new
|
143
|
+
dfr.succeed(exc)
|
144
|
+
end
|
145
|
+
end
|
117
146
|
end
|
118
147
|
end
|
119
148
|
end
|
@@ -45,6 +45,44 @@ module ZK::ZKEventMachine
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
+
describe 'on_connection_loss' do
|
49
|
+
before do
|
50
|
+
@path = [@base_path, 'foo'].join('/')
|
51
|
+
@data = 'this is data'
|
52
|
+
@zk.create(@path, @data)
|
53
|
+
end
|
54
|
+
|
55
|
+
it %[should be called back if the connection is lost] do
|
56
|
+
em do
|
57
|
+
@zkem.on_connection_lost do |exc|
|
58
|
+
logger.debug { "WIN!" }
|
59
|
+
exc.should be_kind_of(ZK::Exceptions::ConnectionLoss)
|
60
|
+
@zkem.close! { done }
|
61
|
+
end
|
62
|
+
|
63
|
+
@zkem.connect do
|
64
|
+
flexmock(@zkem.cnx) do |m|
|
65
|
+
m.should_receive(:get).with(Hash).and_return do |hash|
|
66
|
+
logger.debug { "client received :get wtih #{hash.inspect}" }
|
67
|
+
@user_cb = hash[:callback]
|
68
|
+
|
69
|
+
EM.next_tick do
|
70
|
+
logger.debug { "calling back user cb with connection loss" }
|
71
|
+
@user_cb.call(:rc => ZK::Exceptions::CONNECTIONLOSS)
|
72
|
+
end
|
73
|
+
|
74
|
+
{ :rc => Zookeeper::ZOK }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
@zkem.get(@path) do |exc,data|
|
79
|
+
exc.should be_kind_of(ZK::Exceptions::ConnectionLoss)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
48
86
|
describe 'get' do
|
49
87
|
describe 'success' do
|
50
88
|
before do
|
data/zk-eventmachine.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
# zk depends on slyphon-zookeeper, but we need at least this version
|
18
18
|
s.add_dependency('slyphon-zookeeper', '~> 0.2.4')
|
19
|
-
s.add_dependency('eventmachine', '
|
19
|
+
s.add_dependency('eventmachine', '~> 1.0.0.beta.3')
|
20
20
|
|
21
21
|
s.add_development_dependency('rspec', '~> 2.5.0')
|
22
22
|
s.add_development_dependency('yard', '~> 0.7.0')
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zk-eventmachine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 8
|
10
|
+
version: 0.1.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jonathan D. Simms
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-10-26 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: zk
|
@@ -56,14 +55,16 @@ dependencies:
|
|
56
55
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
56
|
none: false
|
58
57
|
requirements:
|
59
|
-
- -
|
58
|
+
- - ~>
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
hash:
|
60
|
+
hash: 62196357
|
62
61
|
segments:
|
62
|
+
- 1
|
63
63
|
- 0
|
64
|
-
-
|
65
|
-
-
|
66
|
-
|
64
|
+
- 0
|
65
|
+
- beta
|
66
|
+
- 3
|
67
|
+
version: 1.0.0.beta.3
|
67
68
|
type: :runtime
|
68
69
|
version_requirements: *id003
|
69
70
|
- !ruby/object:Gem::Dependency
|
@@ -183,7 +184,6 @@ files:
|
|
183
184
|
- spec/z_k/z_k_event_machine/event_handler_e_m_spec.rb
|
184
185
|
- spec/z_k/z_k_event_machine/unixisms_spec.rb
|
185
186
|
- zk-eventmachine.gemspec
|
186
|
-
has_rdoc: true
|
187
187
|
homepage: https://github.com/slyphon/zk-eventmachine
|
188
188
|
licenses: []
|
189
189
|
|
@@ -213,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
213
213
|
requirements: []
|
214
214
|
|
215
215
|
rubyforge_project:
|
216
|
-
rubygems_version: 1.6
|
216
|
+
rubygems_version: 1.8.6
|
217
217
|
signing_key:
|
218
218
|
specification_version: 3
|
219
219
|
summary: ZK client for EventMachine-based (async) applications
|