zk 0.7.1 → 0.8.1
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.
- data/Gemfile +0 -3
- data/lib/z_k/client.rb +2 -1
- data/lib/z_k/client/base.rb +8 -36
- data/lib/z_k/client/threaded.rb +36 -0
- data/lib/z_k/election.rb +4 -0
- data/lib/z_k/version.rb +1 -1
- data/spec/z_k/election_spec.rb +14 -2
- data/zk.gemspec +2 -1
- metadata +129 -148
data/Gemfile
CHANGED
data/lib/z_k/client.rb
CHANGED
@@ -19,7 +19,7 @@ module ZK
|
|
19
19
|
}.freeze
|
20
20
|
|
21
21
|
def self.new(*a, &b)
|
22
|
-
|
22
|
+
Threaded.new(*a, &b)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -28,4 +28,5 @@ require 'z_k/client/state_mixin'
|
|
28
28
|
require 'z_k/client/unixisms'
|
29
29
|
require 'z_k/client/conveniences'
|
30
30
|
require 'z_k/client/base'
|
31
|
+
require 'z_k/client/threaded'
|
31
32
|
|
data/lib/z_k/client/base.rb
CHANGED
@@ -1,33 +1,12 @@
|
|
1
1
|
module ZK
|
2
2
|
module Client
|
3
3
|
class Base
|
4
|
-
include StateMixin
|
5
|
-
include Unixisms
|
6
|
-
include Conveniences
|
7
|
-
|
8
4
|
attr_reader :event_handler
|
9
5
|
|
10
6
|
# @private the wrapped connection object
|
11
7
|
attr_reader :cnx
|
12
8
|
|
13
9
|
|
14
|
-
# Create a new client and connect to the zookeeper server.
|
15
|
-
#
|
16
|
-
# +host+ should be a string of comma-separated host:port pairs. You can
|
17
|
-
# also supply an optional "chroot" suffix that will act as an implicit
|
18
|
-
# prefix to all paths supplied.
|
19
|
-
#
|
20
|
-
# example:
|
21
|
-
#
|
22
|
-
# ZK::Client.new("zk01:2181,zk02:2181/chroot/path")
|
23
|
-
#
|
24
|
-
def initialize(host, opts={})
|
25
|
-
@event_handler = EventHandler.new(self)
|
26
|
-
yield self if block_given?
|
27
|
-
@cnx = ::Zookeeper.new(host, DEFAULT_TIMEOUT, @event_handler.get_default_watcher_block)
|
28
|
-
@threadpool = Threadpool.new
|
29
|
-
end
|
30
|
-
|
31
10
|
# @deprecated: for backwards compatibility only
|
32
11
|
def watcher
|
33
12
|
event_handler
|
@@ -52,11 +31,7 @@ module ZK
|
|
52
31
|
|
53
32
|
# @private
|
54
33
|
def mri_closed?
|
55
|
-
@cnx.
|
56
|
-
rescue RuntimeError => e
|
57
|
-
# gah, lame error parsing here
|
58
|
-
raise e if (e.message != 'zookeeper handle is closed') and not defined?(::JRUBY_VERSION)
|
59
|
-
true
|
34
|
+
@cnx.closed?
|
60
35
|
end
|
61
36
|
|
62
37
|
public
|
@@ -69,12 +44,9 @@ module ZK
|
|
69
44
|
state
|
70
45
|
end
|
71
46
|
|
72
|
-
# closes the underlying connection and deregisters all callbacks
|
73
47
|
def close!
|
74
|
-
|
75
|
-
wrap_state_closed_error { @cnx.close }
|
76
|
-
@threadpool.shutdown
|
77
|
-
nil
|
48
|
+
event_handler.clear!
|
49
|
+
wrap_state_closed_error { @cnx.close unless @cnx.closed? }
|
78
50
|
end
|
79
51
|
|
80
52
|
# Create a node with the given path. The node data will be the given data.
|
@@ -360,7 +332,7 @@ module ZK
|
|
360
332
|
|
361
333
|
rv = check_rc(@cnx.set(h), h)
|
362
334
|
|
363
|
-
opts[:callback] ?
|
335
|
+
opts[:callback] ? rv : rv[:stat]
|
364
336
|
end
|
365
337
|
|
366
338
|
# Return the stat of the node of the given path. Return nil if the node
|
@@ -513,7 +485,7 @@ module ZK
|
|
513
485
|
setup_watcher!(:child, h)
|
514
486
|
|
515
487
|
rv = check_rc(@cnx.get_children(h), h)
|
516
|
-
opts[:callback] ?
|
488
|
+
opts[:callback] ? rv : rv[:children]
|
517
489
|
end
|
518
490
|
|
519
491
|
# Delete the node with the given path. The call will succeed if such a node
|
@@ -572,7 +544,7 @@ module ZK
|
|
572
544
|
|
573
545
|
h = { :path => path, :version => -1 }.merge(opts)
|
574
546
|
rv = check_rc(@cnx.delete(h), h)
|
575
|
-
nil
|
547
|
+
opts[:callback] ? rv : nil
|
576
548
|
end
|
577
549
|
|
578
550
|
# Return the ACL and stat of the node of the given path.
|
@@ -618,7 +590,7 @@ module ZK
|
|
618
590
|
|
619
591
|
h = { :path => path }.merge(opts)
|
620
592
|
rv = check_rc(@cnx.get_acl(h), h)
|
621
|
-
opts[:callback] ?
|
593
|
+
opts[:callback] ? rv : rv.values_at(:children, :stat)
|
622
594
|
end
|
623
595
|
|
624
596
|
# Set the ACL for the node of the given path if such a node exists and the
|
@@ -649,7 +621,7 @@ module ZK
|
|
649
621
|
def set_acl(path, acls, opts={})
|
650
622
|
h = { :path => path, :acl => acls }.merge(opts)
|
651
623
|
rv = check_rc(@cnx.set_acl(h), h)
|
652
|
-
opts[:callback] ?
|
624
|
+
opts[:callback] ? rv : rv[:stat]
|
653
625
|
end
|
654
626
|
|
655
627
|
# @private
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module ZK
|
2
|
+
module Client
|
3
|
+
# This is the default client that ZK will use. In the zk-eventmachine gem,
|
4
|
+
# there is an Evented client.
|
5
|
+
class Threaded < Base
|
6
|
+
include StateMixin
|
7
|
+
include Unixisms
|
8
|
+
include Conveniences
|
9
|
+
|
10
|
+
# Create a new client and connect to the zookeeper server.
|
11
|
+
#
|
12
|
+
# +host+ should be a string of comma-separated host:port pairs. You can
|
13
|
+
# also supply an optional "chroot" suffix that will act as an implicit
|
14
|
+
# prefix to all paths supplied.
|
15
|
+
#
|
16
|
+
# example:
|
17
|
+
#
|
18
|
+
# ZK::Client.new("zk01:2181,zk02:2181/chroot/path")
|
19
|
+
#
|
20
|
+
def initialize(host, opts={})
|
21
|
+
@event_handler = EventHandler.new(self)
|
22
|
+
yield self if block_given?
|
23
|
+
@cnx = ::Zookeeper.new(host, DEFAULT_TIMEOUT, @event_handler.get_default_watcher_block)
|
24
|
+
@threadpool = Threadpool.new
|
25
|
+
end
|
26
|
+
|
27
|
+
# closes the underlying connection and deregisters all callbacks
|
28
|
+
def close!
|
29
|
+
super
|
30
|
+
@threadpool.shutdown
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
data/lib/z_k/election.rb
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
module ZK
|
2
|
+
# NOTE: this module should be considered experimental. there are several
|
3
|
+
# specs that have recently started failing under 1.9.2 (didn't fail under
|
4
|
+
# 1.8.7 or jruby 1.6) that need fixing.
|
5
|
+
#
|
2
6
|
# ==== Overview
|
3
7
|
#
|
4
8
|
# This module implements the "leader election" protocols described
|
data/lib/z_k/version.rb
CHANGED
data/spec/z_k/election_spec.rb
CHANGED
@@ -259,6 +259,14 @@ describe ZK::Election do
|
|
259
259
|
end
|
260
260
|
end
|
261
261
|
|
262
|
+
def pending_192(msg)
|
263
|
+
if RUBY_VERSION == '1.9.2' and not defined?(::JRUBY_VERSION)
|
264
|
+
pending(msg) { yield }
|
265
|
+
else
|
266
|
+
yield
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
262
270
|
describe 'leadership transition' do
|
263
271
|
before do
|
264
272
|
@obama.vote!
|
@@ -282,7 +290,9 @@ describe ZK::Election do
|
|
282
290
|
end
|
283
291
|
|
284
292
|
it %[should be palin who is leader] do
|
285
|
-
|
293
|
+
pending_192 "this test is flaky" do
|
294
|
+
@palin.should be_leader
|
295
|
+
end
|
286
296
|
end
|
287
297
|
|
288
298
|
it %[should have seen both the death and life events] do
|
@@ -291,7 +301,9 @@ describe ZK::Election do
|
|
291
301
|
end
|
292
302
|
|
293
303
|
it %[should see the data of the new leader] do
|
294
|
-
|
304
|
+
pending_192 "this test is buggy under 1.9.2" do
|
305
|
+
@observer.leader_data.should == 'palin'
|
306
|
+
end
|
295
307
|
end
|
296
308
|
end
|
297
309
|
end
|
data/zk.gemspec
CHANGED
@@ -12,7 +12,8 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = %q{A high-level wrapper around the zookeeper driver}
|
13
13
|
s.description = s.summary
|
14
14
|
|
15
|
-
s.add_runtime_dependency 'slyphon-zookeeper', '~> 0.
|
15
|
+
s.add_runtime_dependency 'slyphon-zookeeper', '~> 0.2.0'
|
16
|
+
|
16
17
|
s.add_development_dependency 'rspec', '~> 2.4.0'
|
17
18
|
s.add_development_dependency 'wirble'
|
18
19
|
s.add_development_dependency 'flexmock', '~> 0.8.10'
|
metadata
CHANGED
@@ -1,106 +1,78 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 1
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 7
|
9
|
-
- 1
|
10
|
-
version: 0.7.1
|
5
|
+
version: 0.8.1
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
|
-
- Jonathan D. Simms
|
14
|
-
- Topper Bowers
|
8
|
+
- Jonathan D. Simms
|
9
|
+
- Topper Bowers
|
15
10
|
autorequire:
|
16
11
|
bindir: bin
|
17
12
|
cert_chain: []
|
18
13
|
|
19
|
-
date: 2011-06-
|
14
|
+
date: 2011-06-17 00:00:00 +00:00
|
20
15
|
default_executable:
|
21
16
|
dependencies:
|
22
|
-
- !ruby/object:Gem::Dependency
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
segments:
|
78
|
-
- 0
|
79
|
-
- 8
|
80
|
-
- 10
|
81
|
-
version: 0.8.10
|
82
|
-
type: :development
|
83
|
-
version_requirements: *id004
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: ZenTest
|
86
|
-
prerelease: false
|
87
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
88
|
-
none: false
|
89
|
-
requirements:
|
90
|
-
- - ~>
|
91
|
-
- !ruby/object:Gem::Version
|
92
|
-
hash: 43
|
93
|
-
segments:
|
94
|
-
- 4
|
95
|
-
- 5
|
96
|
-
- 0
|
97
|
-
version: 4.5.0
|
98
|
-
type: :development
|
99
|
-
version_requirements: *id005
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: slyphon-zookeeper
|
19
|
+
prerelease: false
|
20
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
|
+
none: false
|
22
|
+
requirements:
|
23
|
+
- - ~>
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 0.2.0
|
26
|
+
type: :runtime
|
27
|
+
version_requirements: *id001
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rspec
|
30
|
+
prerelease: false
|
31
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
33
|
+
requirements:
|
34
|
+
- - ~>
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.4.0
|
37
|
+
type: :development
|
38
|
+
version_requirements: *id002
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: wirble
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id003
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: flexmock
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ~>
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 0.8.10
|
59
|
+
type: :development
|
60
|
+
version_requirements: *id004
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: ZenTest
|
63
|
+
prerelease: false
|
64
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 4.5.0
|
70
|
+
type: :development
|
71
|
+
version_requirements: *id005
|
100
72
|
description: A high-level wrapper around the zookeeper driver
|
101
73
|
email:
|
102
|
-
- simms@hp.com
|
103
|
-
- tobowers@hp.com
|
74
|
+
- simms@hp.com
|
75
|
+
- tobowers@hp.com
|
104
76
|
executables: []
|
105
77
|
|
106
78
|
extensions: []
|
@@ -108,49 +80,50 @@ extensions: []
|
|
108
80
|
extra_rdoc_files: []
|
109
81
|
|
110
82
|
files:
|
111
|
-
- .dotfiles/rspec-logging
|
112
|
-
- .gitignore
|
113
|
-
- .yardopts
|
114
|
-
- Gemfile
|
115
|
-
- LICENSE
|
116
|
-
- README.markdown
|
117
|
-
- Rakefile
|
118
|
-
- lib/z_k.rb
|
119
|
-
- lib/z_k/client.rb
|
120
|
-
- lib/z_k/client/base.rb
|
121
|
-
- lib/z_k/client/conveniences.rb
|
122
|
-
- lib/z_k/client/state_mixin.rb
|
123
|
-
- lib/z_k/client/
|
124
|
-
- lib/z_k/
|
125
|
-
- lib/z_k/
|
126
|
-
- lib/z_k/
|
127
|
-
- lib/z_k/
|
128
|
-
- lib/z_k/
|
129
|
-
- lib/z_k/
|
130
|
-
- lib/z_k/
|
131
|
-
- lib/z_k/
|
132
|
-
- lib/z_k/
|
133
|
-
- lib/z_k/
|
134
|
-
- lib/z_k/
|
135
|
-
- lib/z_k/
|
136
|
-
- lib/z_k/
|
137
|
-
- lib/
|
138
|
-
-
|
139
|
-
- spec/
|
140
|
-
- spec/
|
141
|
-
- spec/
|
142
|
-
- spec/support/
|
143
|
-
- spec/support/
|
144
|
-
- spec/
|
145
|
-
- spec/
|
146
|
-
- spec/
|
147
|
-
- spec/z_k/
|
148
|
-
- spec/z_k/
|
149
|
-
- spec/z_k/
|
150
|
-
- spec/z_k/
|
151
|
-
- spec/z_k/
|
152
|
-
- spec/
|
153
|
-
-
|
83
|
+
- .dotfiles/rspec-logging
|
84
|
+
- .gitignore
|
85
|
+
- .yardopts
|
86
|
+
- Gemfile
|
87
|
+
- LICENSE
|
88
|
+
- README.markdown
|
89
|
+
- Rakefile
|
90
|
+
- lib/z_k.rb
|
91
|
+
- lib/z_k/client.rb
|
92
|
+
- lib/z_k/client/base.rb
|
93
|
+
- lib/z_k/client/conveniences.rb
|
94
|
+
- lib/z_k/client/state_mixin.rb
|
95
|
+
- lib/z_k/client/threaded.rb
|
96
|
+
- lib/z_k/client/unixisms.rb
|
97
|
+
- lib/z_k/election.rb
|
98
|
+
- lib/z_k/event_handler.rb
|
99
|
+
- lib/z_k/event_handler_subscription.rb
|
100
|
+
- lib/z_k/exceptions.rb
|
101
|
+
- lib/z_k/extensions.rb
|
102
|
+
- lib/z_k/find.rb
|
103
|
+
- lib/z_k/locker.rb
|
104
|
+
- lib/z_k/logging.rb
|
105
|
+
- lib/z_k/message_queue.rb
|
106
|
+
- lib/z_k/mongoid.rb
|
107
|
+
- lib/z_k/pool.rb
|
108
|
+
- lib/z_k/threadpool.rb
|
109
|
+
- lib/z_k/version.rb
|
110
|
+
- lib/zk.rb
|
111
|
+
- spec/log4j.properties
|
112
|
+
- spec/message_queue_spec.rb
|
113
|
+
- spec/spec_helper.rb
|
114
|
+
- spec/support/bogus_mongoid.rb
|
115
|
+
- spec/support/logging_progress_bar_formatter.rb
|
116
|
+
- spec/support/queuey_thread.rb
|
117
|
+
- spec/test_file.txt
|
118
|
+
- spec/watch_spec.rb
|
119
|
+
- spec/z_k/client_spec.rb
|
120
|
+
- spec/z_k/election_spec.rb
|
121
|
+
- spec/z_k/locker_spec.rb
|
122
|
+
- spec/z_k/mongoid_spec.rb
|
123
|
+
- spec/z_k/pool_spec.rb
|
124
|
+
- spec/z_k/threadpool_spec.rb
|
125
|
+
- spec/zookeeper_spec.rb
|
126
|
+
- zk.gemspec
|
154
127
|
has_rdoc: true
|
155
128
|
homepage: ""
|
156
129
|
licenses: []
|
@@ -159,31 +132,39 @@ post_install_message:
|
|
159
132
|
rdoc_options: []
|
160
133
|
|
161
134
|
require_paths:
|
162
|
-
- lib
|
135
|
+
- lib
|
163
136
|
required_ruby_version: !ruby/object:Gem::Requirement
|
164
137
|
none: false
|
165
138
|
requirements:
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
segments:
|
170
|
-
- 0
|
171
|
-
version: "0"
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: "0"
|
172
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
143
|
none: false
|
174
144
|
requirements:
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
segments:
|
179
|
-
- 0
|
180
|
-
version: "0"
|
145
|
+
- - ">="
|
146
|
+
- !ruby/object:Gem::Version
|
147
|
+
version: "0"
|
181
148
|
requirements: []
|
182
149
|
|
183
150
|
rubyforge_project:
|
184
|
-
rubygems_version: 1.
|
151
|
+
rubygems_version: 1.5.1
|
185
152
|
signing_key:
|
186
153
|
specification_version: 3
|
187
154
|
summary: A high-level wrapper around the zookeeper driver
|
188
|
-
test_files:
|
189
|
-
|
155
|
+
test_files:
|
156
|
+
- spec/log4j.properties
|
157
|
+
- spec/message_queue_spec.rb
|
158
|
+
- spec/spec_helper.rb
|
159
|
+
- spec/support/bogus_mongoid.rb
|
160
|
+
- spec/support/logging_progress_bar_formatter.rb
|
161
|
+
- spec/support/queuey_thread.rb
|
162
|
+
- spec/test_file.txt
|
163
|
+
- spec/watch_spec.rb
|
164
|
+
- spec/z_k/client_spec.rb
|
165
|
+
- spec/z_k/election_spec.rb
|
166
|
+
- spec/z_k/locker_spec.rb
|
167
|
+
- spec/z_k/mongoid_spec.rb
|
168
|
+
- spec/z_k/pool_spec.rb
|
169
|
+
- spec/z_k/threadpool_spec.rb
|
170
|
+
- spec/zookeeper_spec.rb
|