zookeeper 1.4.4-java → 1.4.6-java
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/.dotfiles/ruby-gemset +1 -0
- data/.dotfiles/ruby-version +1 -0
- data/.gitignore +2 -0
- data/.travis.yml +1 -0
- data/CHANGELOG +23 -0
- data/Gemfile +2 -2
- data/README.markdown +2 -2
- data/Rakefile +13 -2
- data/ext/Rakefile +9 -33
- data/ext/c_zookeeper.rb +20 -9
- data/ext/event_lib.c +19 -19
- data/ext/event_lib.h +1 -1
- data/ext/extconf.rb +8 -5
- data/ext/generate_gvl_code.rb +4 -6
- data/ext/{patch-zookeeper → patches/zkc-3.3.5-network.patch} +0 -0
- data/ext/patches/zkc-3.4.5-logging.patch +41 -0
- data/ext/zkc-3.4.5.tar.gz +0 -0
- data/ext/zkrb.c +74 -21
- data/ext/zkrb_wrapper.c +44 -0
- data/ext/zkrb_wrapper.h +21 -1
- data/ext/zookeeper_base.rb +8 -6
- data/java/java_base.rb +14 -9
- data/lib/zookeeper/acls.rb +5 -5
- data/lib/zookeeper/client_methods.rb +2 -2
- data/lib/zookeeper/version.rb +2 -2
- data/spec/shared/connection_examples.rb +29 -0
- data/spec/support/progress_formatter.rb +1 -1
- data/zoomonkey/duplicates +3 -0
- data/zoomonkey/zoomonkey.rb +194 -0
- metadata +62 -69
- data/ext/zkc-3.3.5.tar.gz +0 -0
data/lib/zookeeper/acls.rb
CHANGED
@@ -26,11 +26,11 @@ module ACLs
|
|
26
26
|
end
|
27
27
|
|
28
28
|
module Constants
|
29
|
-
ZOO_PERM_READ = 0
|
30
|
-
ZOO_PERM_WRITE = 1
|
31
|
-
ZOO_PERM_CREATE = 2
|
32
|
-
ZOO_PERM_DELETE =
|
33
|
-
ZOO_PERM_ADMIN =
|
29
|
+
ZOO_PERM_READ = 1 << 0
|
30
|
+
ZOO_PERM_WRITE = 1 << 1
|
31
|
+
ZOO_PERM_CREATE = 1 << 2
|
32
|
+
ZOO_PERM_DELETE = 1 << 3
|
33
|
+
ZOO_PERM_ADMIN = 1 << 4
|
34
34
|
ZOO_PERM_ALL = ZOO_PERM_READ | ZOO_PERM_WRITE | ZOO_PERM_CREATE | ZOO_PERM_DELETE | ZOO_PERM_ADMIN
|
35
35
|
|
36
36
|
ZOO_ANYONE_ID_UNSAFE = Id.new(:scheme => "world", :id => "anyone")
|
@@ -9,12 +9,12 @@ module ClientMethods
|
|
9
9
|
def_delegators :@req_registry, :setup_call
|
10
10
|
private :setup_call
|
11
11
|
|
12
|
-
def reopen(timeout=10, watcher=nil)
|
12
|
+
def reopen(timeout=10, watcher=nil, opts = {})
|
13
13
|
warn "WARN: ZookeeperBase#reopen watcher argument is now ignored" if watcher
|
14
14
|
super
|
15
15
|
end
|
16
16
|
|
17
|
-
def initialize(host, timeout=10, watcher=nil)
|
17
|
+
def initialize(host, timeout=10, watcher=nil, opts = {})
|
18
18
|
super
|
19
19
|
end
|
20
20
|
|
data/lib/zookeeper/version.rb
CHANGED
@@ -441,6 +441,35 @@ shared_examples_for "connection" do
|
|
441
441
|
end
|
442
442
|
end
|
443
443
|
|
444
|
+
describe :child_watcher_behavior do
|
445
|
+
describe :async_watch, :async => true do
|
446
|
+
it_should_behave_like "all success return values"
|
447
|
+
|
448
|
+
before do
|
449
|
+
@watcher = Zookeeper::Callbacks::WatcherCallback.new
|
450
|
+
@cb = Zookeeper::Callbacks::StringsCallback.new
|
451
|
+
|
452
|
+
@rv = zk.get_children(:path => path, :watcher => @watcher, :watcher_context => path, :callback => @cb, :callback_context => path)
|
453
|
+
wait_until { @cb.completed? }
|
454
|
+
@cb.should be_completed
|
455
|
+
end
|
456
|
+
|
457
|
+
it %[should fire the watcher when the node has been deleted] do
|
458
|
+
@watcher.should_not be_completed
|
459
|
+
|
460
|
+
zk.delete(:path => path)[:rc].should == Zookeeper::ZOK
|
461
|
+
|
462
|
+
wait_until { @watcher.completed? }
|
463
|
+
@watcher.should be_completed
|
464
|
+
|
465
|
+
@watcher.path.should == path
|
466
|
+
@watcher.context.should == path
|
467
|
+
@watcher.type.should == Zookeeper::ZOO_DELETED_EVENT
|
468
|
+
end
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
|
444
473
|
# NOTE: the jruby version of stat on non-existent node will have a
|
445
474
|
# return_code of 0, but the C version will have a return_code of -101
|
446
475
|
describe :stat do
|
@@ -5,7 +5,7 @@ module RSpec
|
|
5
5
|
module Formatters
|
6
6
|
class ProgressFormatter
|
7
7
|
def example_started(example)
|
8
|
-
SpecGlobalLogger.logger <<
|
8
|
+
SpecGlobalLogger.logger << pending_color("\n=====<([ #{example.full_description} ])>=====\n")
|
9
9
|
super(example)
|
10
10
|
end
|
11
11
|
end
|
@@ -0,0 +1,194 @@
|
|
1
|
+
require 'zookeeper'
|
2
|
+
require 'zk-server'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'tmpdir'
|
5
|
+
|
6
|
+
SLEEP_TIME = 30
|
7
|
+
STDOUT.sync = true
|
8
|
+
|
9
|
+
if ENV['DEBUG']
|
10
|
+
def zookeeper_logger(from)
|
11
|
+
l = Logger.new(STDOUT)
|
12
|
+
l.formatter = proc do |sev, time, c, msg|
|
13
|
+
"t=#{time.to_i} from=#{from} level=#{sev.downcase} message=#{msg.inspect}\n"
|
14
|
+
end
|
15
|
+
l
|
16
|
+
end
|
17
|
+
|
18
|
+
Zookeeper.logger = zookeeper_logger('zookeeper')
|
19
|
+
Zookeeper.set_debug_level(Zookeeper::ZOO_LOG_LEVEL_DEBUG)
|
20
|
+
end
|
21
|
+
|
22
|
+
class Worker
|
23
|
+
def initialize(body = nil, &block)
|
24
|
+
raise ArgumentError, "Cannot include both body and block" if body && block
|
25
|
+
@body = body || block
|
26
|
+
end
|
27
|
+
|
28
|
+
def body
|
29
|
+
@body || method(:call)
|
30
|
+
end
|
31
|
+
|
32
|
+
def start
|
33
|
+
@thread = Thread.new do
|
34
|
+
Thread.current.abort_on_exception = true
|
35
|
+
body.call
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def stop
|
40
|
+
if @thread
|
41
|
+
@thread.kill
|
42
|
+
@thread = nil
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def join
|
47
|
+
if @thread
|
48
|
+
@thread.join
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
base_dir = Dir.mktmpdir('zk-server-cluster')
|
56
|
+
num_cluster = 3
|
57
|
+
cluster = ZK::Server::Cluster.new(num_cluster, :base_dir => base_dir)
|
58
|
+
|
59
|
+
class Reader < Worker
|
60
|
+
attr_reader :client
|
61
|
+
|
62
|
+
def initialize(zookeeper_hosts)
|
63
|
+
@zookeeper_hosts = zookeeper_hosts
|
64
|
+
@log_from = :reader
|
65
|
+
end
|
66
|
+
|
67
|
+
def call
|
68
|
+
@client = Zookeeper.new(@zookeeper_hosts, 10, method(:watcher))
|
69
|
+
client.wait_until_connected
|
70
|
+
|
71
|
+
client.create(:path => "/test", :data => '') rescue client.set(:path => "/test", :data => '')
|
72
|
+
|
73
|
+
while true
|
74
|
+
error = nil
|
75
|
+
t = Benchmark.realtime do
|
76
|
+
begin
|
77
|
+
client.get(:path => "/test")
|
78
|
+
rescue => e
|
79
|
+
error = e
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
msg = "host=#{client.connected_host || 'nil'} session_id=#{client.session_id} state=#{client.state_by_value(client.state)} time=#{"%0.4f" % t}"
|
84
|
+
if error
|
85
|
+
msg << " error=#{error.class} error_message=#{error.to_s.inspect}"
|
86
|
+
msg << " closed=#{client.closed?} running=#{client.running?} shutting_down=#{client.shutting_down?}"
|
87
|
+
end
|
88
|
+
|
89
|
+
log msg
|
90
|
+
|
91
|
+
sleep 1
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def log(message)
|
96
|
+
puts "t=#{Time.now.to_i} from=#{@log_from} #{message}\n"
|
97
|
+
end
|
98
|
+
|
99
|
+
def watcher(event)
|
100
|
+
if event[:state] == Zookeeper::ZOO_EXPIRED_SESSION_STATE
|
101
|
+
if client
|
102
|
+
log "action=reconnecting state=#{client.state_by_value(event[:state])} session_id=#{client.session_id}"
|
103
|
+
client.reopen
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
class Writer < Worker
|
111
|
+
def initialize(zookeeper_hosts)
|
112
|
+
@zookeeper_hosts = zookeeper_hosts
|
113
|
+
@log_from = :writer
|
114
|
+
end
|
115
|
+
|
116
|
+
def call
|
117
|
+
client = Zookeeper.new(@zookeeper_hosts)
|
118
|
+
client.wait_until_connected
|
119
|
+
|
120
|
+
while true
|
121
|
+
error = nil
|
122
|
+
t = Benchmark.realtime do
|
123
|
+
begin
|
124
|
+
client.create(:path => "/test", :data => '') rescue client.set(:path => "/test", :data => '')
|
125
|
+
rescue => e
|
126
|
+
error = e
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
msg = "host=#{client.connected_host || 'nil'} session_id=#{client.session_id} state=#{client.state_by_value(client.state)} time=#{"%0.4f" % t}"
|
131
|
+
msg << " error=#{error.class} error_message=#{error.to_s.inspect}" if error
|
132
|
+
log msg
|
133
|
+
|
134
|
+
sleep 1
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def log(message)
|
139
|
+
puts "t=#{Time.now.to_i} from=#{@log_from} #{message}\n"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
class ZooMonkey < Worker
|
144
|
+
attr_reader :cluster
|
145
|
+
|
146
|
+
def initialize(cluster)
|
147
|
+
@cluster = cluster
|
148
|
+
@log_from = :server
|
149
|
+
end
|
150
|
+
|
151
|
+
def call
|
152
|
+
while true
|
153
|
+
sleep SLEEP_TIME
|
154
|
+
|
155
|
+
cluster.processes.each do |server|
|
156
|
+
host = "127.0.0.1:#{server.client_port}"
|
157
|
+
log "host=#{host} pid=#{server.pid} action=pausing"
|
158
|
+
server.kill "STOP"
|
159
|
+
sleep SLEEP_TIME
|
160
|
+
|
161
|
+
log "host=#{host} pid=#{server.pid} action=resuming"
|
162
|
+
server.kill "CONT"
|
163
|
+
sleep SLEEP_TIME
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def log(message)
|
169
|
+
puts "t=#{Time.now.to_i} from=#{@log_from} #{message}\n"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
begin
|
174
|
+
cluster.run
|
175
|
+
|
176
|
+
zookeeper_hosts = cluster.processes.map { |p| "127.0.0.1:#{p.client_port}" }
|
177
|
+
zookeeper_spec = (zookeeper_hosts * 2).join(',')
|
178
|
+
|
179
|
+
reader = Reader.new(zookeeper_spec)
|
180
|
+
reader.start
|
181
|
+
|
182
|
+
# writer = Writer.new(zookeeper_spec)
|
183
|
+
# writer.start
|
184
|
+
|
185
|
+
monkey = ZooMonkey.new(cluster)
|
186
|
+
monkey.start
|
187
|
+
|
188
|
+
reader.join
|
189
|
+
writer.join
|
190
|
+
monkey.join
|
191
|
+
ensure
|
192
|
+
cluster.clobber!
|
193
|
+
FileUtils.remove_entry(base_dir)
|
194
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,10 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: zookeeper
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.4.6
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 4
|
9
|
-
- 4
|
10
|
-
version: 1.4.4
|
11
6
|
platform: java
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Phillip Pearson
|
14
9
|
- Eric Maland
|
15
10
|
- Evan Weaver
|
@@ -19,58 +14,61 @@ authors:
|
|
19
14
|
autorequire:
|
20
15
|
bindir: bin
|
21
16
|
cert_chain: []
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
17
|
+
date: 2013-09-09 00:00:00.000000000 Z
|
18
|
+
dependencies:
|
19
|
+
- !ruby/object:Gem::Dependency
|
26
20
|
name: slyphon-log4j
|
27
|
-
|
28
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
21
|
+
requirement: !ruby/object:Gem::Requirement
|
29
22
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
hash: 1
|
34
|
-
segments:
|
35
|
-
- 1
|
36
|
-
- 2
|
37
|
-
- 15
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
38
26
|
version: 1.2.15
|
39
27
|
type: :runtime
|
40
|
-
version_requirements: *id001
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: slyphon-zookeeper_jar
|
43
28
|
prerelease: false
|
44
|
-
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
none: false
|
31
|
+
requirements:
|
32
|
+
- - '='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 1.2.15
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: slyphon-zookeeper_jar
|
37
|
+
requirement: !ruby/object:Gem::Requirement
|
45
38
|
none: false
|
46
|
-
requirements:
|
47
|
-
- -
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
hash: 1
|
50
|
-
segments:
|
51
|
-
- 3
|
52
|
-
- 3
|
53
|
-
- 5
|
39
|
+
requirements:
|
40
|
+
- - '='
|
41
|
+
- !ruby/object:Gem::Version
|
54
42
|
version: 3.3.5
|
55
43
|
type: :runtime
|
56
|
-
|
57
|
-
|
58
|
-
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
none: false
|
47
|
+
requirements:
|
48
|
+
- - '='
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 3.3.5
|
51
|
+
description: ! 'A low-level multi-Ruby wrapper around the ZooKeeper API bindings.
|
52
|
+
For a
|
53
|
+
|
59
54
|
friendlier interface, see http://github.com/slyphon/zk. Currently supported:
|
55
|
+
|
60
56
|
MRI: {1.8.7, 1.9.2, 1.9.3}, JRuby: ~> 1.6.7, Rubinius: 2.0.testing, REE 1.8.7.
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
57
|
+
|
58
|
+
|
59
|
+
This library uses version 3.4.5 of zookeeper bindings.
|
60
|
+
|
61
|
+
|
62
|
+
'
|
63
|
+
email:
|
65
64
|
- slyphon@gmail.com
|
66
65
|
executables: []
|
67
|
-
|
68
66
|
extensions: []
|
69
|
-
|
70
67
|
extra_rdoc_files: []
|
71
|
-
|
72
|
-
files:
|
68
|
+
files:
|
73
69
|
- .ctags_paths
|
70
|
+
- .dotfiles/ruby-gemset
|
71
|
+
- .dotfiles/ruby-version
|
74
72
|
- .dotfiles/rvmrc
|
75
73
|
- .gitignore
|
76
74
|
- .gitmodules
|
@@ -93,8 +91,9 @@ files:
|
|
93
91
|
- ext/event_lib.h
|
94
92
|
- ext/extconf.rb
|
95
93
|
- ext/generate_gvl_code.rb
|
96
|
-
- ext/patch
|
97
|
-
- ext/zkc-3.
|
94
|
+
- ext/patches/zkc-3.3.5-network.patch
|
95
|
+
- ext/patches/zkc-3.4.5-logging.patch
|
96
|
+
- ext/zkc-3.4.5.tar.gz
|
98
97
|
- ext/zkrb.c
|
99
98
|
- ext/zkrb_wrapper.c
|
100
99
|
- ext/zkrb_wrapper.h
|
@@ -144,41 +143,34 @@ files:
|
|
144
143
|
- spec/support/zookeeper_spec_helpers.rb
|
145
144
|
- spec/zookeeper_spec.rb
|
146
145
|
- zookeeper.gemspec
|
146
|
+
- zoomonkey/duplicates
|
147
|
+
- zoomonkey/zoomonkey.rb
|
147
148
|
homepage: https://github.com/slyphon/zookeeper
|
148
149
|
licenses: []
|
149
|
-
|
150
150
|
post_install_message:
|
151
151
|
rdoc_options: []
|
152
|
-
|
153
|
-
require_paths:
|
152
|
+
require_paths:
|
154
153
|
- lib
|
155
154
|
- java
|
156
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
157
156
|
none: false
|
158
|
-
requirements:
|
159
|
-
- -
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
|
162
|
-
|
163
|
-
- 0
|
164
|
-
version: "0"
|
165
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - ! '>='
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: '0'
|
161
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
162
|
none: false
|
167
|
-
requirements:
|
168
|
-
- -
|
169
|
-
- !ruby/object:Gem::Version
|
170
|
-
|
171
|
-
segments:
|
172
|
-
- 0
|
173
|
-
version: "0"
|
163
|
+
requirements:
|
164
|
+
- - ! '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
174
167
|
requirements: []
|
175
|
-
|
176
168
|
rubyforge_project:
|
177
169
|
rubygems_version: 1.8.25
|
178
170
|
signing_key:
|
179
171
|
specification_version: 3
|
180
172
|
summary: Apache ZooKeeper driver for Rubies
|
181
|
-
test_files:
|
173
|
+
test_files:
|
182
174
|
- spec/c_zookeeper_spec.rb
|
183
175
|
- spec/chrooted_connection_spec.rb
|
184
176
|
- spec/compatibilty_spec.rb
|
@@ -196,3 +188,4 @@ test_files:
|
|
196
188
|
- spec/support/progress_formatter.rb
|
197
189
|
- spec/support/zookeeper_spec_helpers.rb
|
198
190
|
- spec/zookeeper_spec.rb
|
191
|
+
has_rdoc:
|