slyphon-zookeeper 0.9.2-java → 0.9.3-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/CHANGELOG +9 -0
- data/Gemfile +9 -2
- data/README.markdown +25 -17
- data/Rakefile +25 -17
- data/ext/extconf.rb +1 -1
- data/ext/zookeeper_base.rb +7 -3
- data/java/zookeeper_base.rb +12 -7
- data/lib/zookeeper.rb +1 -1
- data/lib/zookeeper/common.rb +9 -3
- data/lib/zookeeper/version.rb +6 -0
- data/spec/chrooted_connection_spec.rb +0 -42
- data/spec/shared/connection_examples.rb +23 -12
- data/spec/spec_helper.rb +54 -0
- data/spec/zookeeper_spec.rb +2 -2
- metadata +23 -107
- data/slyphon-zookeeper.gemspec +0 -36
data/CHANGELOG
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
v0.9.3 Event thread shutdown fix, Windows compatibility fix
|
2
|
+
|
3
|
+
* Use a 'shutdown thread' to coordinate cleanup if close is called from the
|
4
|
+
event thread (prevents deadlock)
|
5
|
+
|
6
|
+
* Default Logger now uses $stderr instead of opening /dev/null [#16]
|
7
|
+
|
8
|
+
* Gemfile/gemspec/Rakefile refactoring.
|
9
|
+
|
1
10
|
v0.9.2 More efficient and simpler wrappers for GIL release
|
2
11
|
|
3
12
|
* After a code review by Andrew Wason (rectalogic), use a much simpler
|
data/Gemfile
CHANGED
@@ -2,9 +2,16 @@ source :rubygems
|
|
2
2
|
|
3
3
|
gemspec
|
4
4
|
|
5
|
-
|
6
|
-
gem
|
5
|
+
group :test do
|
6
|
+
gem "rspec", "~> 2.8.0"
|
7
|
+
gem 'flexmock', '~> 0.8.11'
|
8
|
+
gem 'eventmachine', '1.0.0.beta.4'
|
9
|
+
gem 'evented-spec', '~> 0.9.0'
|
7
10
|
end
|
8
11
|
|
12
|
+
group :development do
|
13
|
+
gem 'rake', '~> 0.9.0'
|
14
|
+
gem 'pry'
|
15
|
+
end
|
9
16
|
|
10
17
|
# vim:ft=ruby
|
data/README.markdown
CHANGED
@@ -1,21 +1,22 @@
|
|
1
|
-
zookeeper
|
1
|
+
# zookeeper #
|
2
2
|
|
3
|
-
An interface to the Zookeeper
|
3
|
+
An interface to the Zookeeper cluster coordination server.
|
4
4
|
|
5
|
-
For a higher-level interface with a
|
6
|
-
such as locks, have a look at [ZK](https://github.com/slyphon/zk) (also
|
7
|
-
available is [ZK-EventMachine](https://github.com/slyphon/zk-eventmachine) for
|
8
|
-
those who prefer async).
|
5
|
+
For a higher-level interface with a more convenient API and features such as locks, have a look at [ZK](https://github.com/slyphon/zk) (also available is [ZK-EventMachine](https://github.com/slyphon/zk-eventmachine) for those who prefer async).
|
9
6
|
|
10
|
-
|
11
|
-
|
7
|
+
## Big Plans for 1.0 ##
|
8
|
+
|
9
|
+
The 1.0 release will feature a reorganization of the heirarchy. There will be a single top-level `Zookeeper` namespace (as opposed to the current layout, with 5-6 different top-level constants), and for the next several releases, there will be a backwards compatible require for users that still need to use the old names.
|
12
10
|
|
13
11
|
## License
|
14
12
|
|
15
|
-
Copyright 2008 Phillip Pearson, and 2010 Twitter, Inc.
|
16
|
-
MIT License. See the included LICENSE file.
|
17
|
-
|
18
|
-
|
13
|
+
Copyright 2008 Phillip Pearson, and 2010 Twitter, Inc.
|
14
|
+
Licensed under the MIT License. See the included LICENSE file.
|
15
|
+
|
16
|
+
Portions copyright 2008-2010 the Apache Software Foundation, licensed under the
|
17
|
+
Apache 2 license, and used with permission.
|
18
|
+
|
19
|
+
Portions contributed to the open source community by HPDC, L.P.
|
19
20
|
|
20
21
|
## Install
|
21
22
|
|
@@ -42,10 +43,17 @@ The following methods are initially supported:
|
|
42
43
|
* get\_acl
|
43
44
|
* set\_acl
|
44
45
|
|
45
|
-
All support async callbacks. get, get\_children and stat support both
|
46
|
-
|
46
|
+
All support async callbacks. get, get\_children and stat support both watchers and callbacks.
|
47
|
+
|
48
|
+
Calls take a dictionary of parameters. With the exception of set\_acl, the only required parameter is :path. Each call returns a dictionary with at minimum two keys :req\_id and :rc.
|
49
|
+
|
50
|
+
### A Bit about this repository ###
|
51
|
+
|
52
|
+
Twitter's open source office was kind enough to transfer this repository to facilitate development and administration of this repository. The `zookeeper` gem's last three releases were recorded in branches `v0.4.2`, `v0.4.3` and `v0.4.4`. Releases of the `slyphon-zookeeper` gem were cut off of the fork, and unfortunately (due to an oversight on my part) were tagged with unrelated versions. Those were tagged with names `release/0.9.2`.
|
53
|
+
|
54
|
+
The plan is to keep the `slyphon-zookeeper` tags, and to tag the `zookeeper` releases `twitter/release/0.4.x`.
|
55
|
+
|
56
|
+
Further work will be carried out on this repository. The `0.9.3` release of the zookeeper gem will be released under the 'zookeeper' name, and will bring the two divergent (conceptual) branches of development together.
|
57
|
+
|
47
58
|
|
48
|
-
Calls take a dictionary of parameters. With the exception of set\_acl, the
|
49
|
-
only required parameter is :path. Each call returns a dictionary with at
|
50
|
-
minimum two keys :req\_id and :rc.
|
51
59
|
|
data/Rakefile
CHANGED
@@ -2,17 +2,19 @@
|
|
2
2
|
# ENV.fetch('GEM_HOME').split('@').last
|
3
3
|
# end
|
4
4
|
|
5
|
-
GEM_FILES = FileList['
|
5
|
+
GEM_FILES = FileList['*zookeeper-*.gem']
|
6
6
|
|
7
7
|
namespace :mb do
|
8
8
|
namespace :gems do
|
9
9
|
task :build do
|
10
|
-
sh "rvm 1.8.7 do gem build
|
10
|
+
sh "rvm 1.8.7 do gem build zookeeper.gemspec"
|
11
11
|
ENV['JAVA_GEM'] = '1'
|
12
|
-
sh "rvm 1.8.7 do gem build
|
12
|
+
sh "rvm 1.8.7 do gem build zookeeper.gemspec"
|
13
13
|
end
|
14
14
|
|
15
|
-
task :push do
|
15
|
+
task :push => :build do
|
16
|
+
raise "No gemfiles to push!" if GEM_FILES.empty?
|
17
|
+
|
16
18
|
GEM_FILES.each do |gem|
|
17
19
|
sh "gem push #{gem}"
|
18
20
|
end
|
@@ -28,16 +30,8 @@ end
|
|
28
30
|
|
29
31
|
gemset_name = 'zookeeper'
|
30
32
|
|
31
|
-
directory 'tmp'
|
32
|
-
|
33
33
|
# this nonsense w/ tmp and the Gemfile is a bundler optimization
|
34
34
|
|
35
|
-
GEMSPEC_LINK = 'tmp/slyphon-zookeeper.gemspec'
|
36
|
-
|
37
|
-
file GEMSPEC_LINK => 'tmp' do
|
38
|
-
ln_s '../slyphon-zookeeper.gemspec', GEMSPEC_LINK
|
39
|
-
end
|
40
|
-
|
41
35
|
%w[1.8.7 1.9.2 jruby rbx 1.9.3].each do |ns_name|
|
42
36
|
rvm_ruby = (ns_name == 'rbx') ? "rbx-2.0.testing" : ns_name
|
43
37
|
|
@@ -50,11 +44,16 @@ end
|
|
50
44
|
bundle_task_name = "mb:#{ns_name}:bundle_install"
|
51
45
|
rspec_task_name = "mb:#{ns_name}:run_rspec"
|
52
46
|
|
53
|
-
phony_gemfile_link_name =
|
47
|
+
phony_gemfile_link_name = "Gemfile.#{ns_name}"
|
48
|
+
phony_gemfile_lock_name = "#{phony_gemfile_link_name}.lock"
|
54
49
|
|
55
|
-
file phony_gemfile_link_name
|
50
|
+
file phony_gemfile_link_name do
|
56
51
|
# apparently, rake doesn't deal with symlinks intelligently :P
|
57
|
-
ln_s('
|
52
|
+
ln_s('Gemfile', phony_gemfile_link_name) unless File.symlink?(phony_gemfile_link_name)
|
53
|
+
end
|
54
|
+
|
55
|
+
task :clean do
|
56
|
+
rm_rf [phony_gemfile_lock_name, phony_gemfile_lock_name]
|
58
57
|
end
|
59
58
|
|
60
59
|
task create_gemset_name do
|
@@ -95,12 +94,21 @@ end
|
|
95
94
|
|
96
95
|
task "mb:#{ns_name}" => rspec_task_name
|
97
96
|
|
98
|
-
task "mb:
|
97
|
+
task "mb:test_all_rubies" => rspec_task_name
|
98
|
+
end
|
99
|
+
|
100
|
+
task "mb:test_all" do
|
101
|
+
require 'benchmark'
|
102
|
+
t = Benchmark.realtime do
|
103
|
+
Rake::Task['mb:test_all_rubies'].invoke
|
104
|
+
end
|
105
|
+
|
106
|
+
$stderr.puts "Test run took: #{t} s"
|
99
107
|
end
|
100
108
|
|
101
109
|
task :default => 'mb:1.9.3'
|
102
110
|
|
103
|
-
task :
|
111
|
+
task :clobber do
|
104
112
|
rm_rf 'tmp'
|
105
113
|
end
|
106
114
|
|
data/ext/extconf.rb
CHANGED
data/ext/zookeeper_base.rb
CHANGED
@@ -104,10 +104,14 @@ class ZookeeperBase
|
|
104
104
|
end
|
105
105
|
|
106
106
|
def close
|
107
|
-
|
108
|
-
|
109
|
-
|
107
|
+
shutdown_thread = Thread.new do
|
108
|
+
@mutex.synchronize do
|
109
|
+
stop_dispatch_thread!
|
110
|
+
@czk.close
|
111
|
+
end
|
110
112
|
end
|
113
|
+
|
114
|
+
shutdown_thread.join unless event_dispatch_thread?
|
111
115
|
end
|
112
116
|
|
113
117
|
# the C lib doesn't strip the chroot path off of returned path values, which
|
data/java/zookeeper_base.rb
CHANGED
@@ -222,14 +222,19 @@ class ZookeeperBase
|
|
222
222
|
end
|
223
223
|
|
224
224
|
def close
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
225
|
+
shutdown_thread = Thread.new do
|
226
|
+
@mutex.synchronize do
|
227
|
+
unless @_closed
|
228
|
+
@_closed = true # these are probably unnecessary
|
229
|
+
@_running = false
|
230
|
+
|
231
|
+
stop_dispatch_thread!
|
232
|
+
@jzk.close if @jzk
|
233
|
+
end
|
234
|
+
end
|
232
235
|
end
|
236
|
+
|
237
|
+
shutdown_thread.join unless event_dispatch_thread?
|
233
238
|
end
|
234
239
|
|
235
240
|
def state
|
data/lib/zookeeper.rb
CHANGED
@@ -23,7 +23,7 @@ require 'zookeeper_base'
|
|
23
23
|
|
24
24
|
class Zookeeper < ZookeeperBase
|
25
25
|
unless defined?(@@logger)
|
26
|
-
@@logger = Logger.new(
|
26
|
+
@@logger = Logger.new($stderr).tap { |l| l.level = Logger::ERROR }
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.logger
|
data/lib/zookeeper/common.rb
CHANGED
@@ -90,9 +90,15 @@ protected
|
|
90
90
|
|
91
91
|
# we now release the mutex so that dispatch_next_callback can grab it
|
92
92
|
# to do what it needs to do while delivering events
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
#
|
94
|
+
# wait for a maximum of 2 sec for dispatcher to signal exit (should be
|
95
|
+
# fast)
|
96
|
+
@dispatch_shutdown_cond.wait(2)
|
97
|
+
|
98
|
+
# wait for another 2 sec for the thread to join
|
99
|
+
unless @dispatcher.join(2)
|
100
|
+
logger.error { "Dispatch thread did not join cleanly, continuing" }
|
101
|
+
end
|
96
102
|
@dispatcher = nil
|
97
103
|
end
|
98
104
|
end
|
@@ -16,52 +16,10 @@ describe 'Zookeeper chrooted' do
|
|
16
16
|
@zk and @zk.close
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
19
|
def zk
|
21
20
|
@zk
|
22
21
|
end
|
23
22
|
|
24
|
-
def with_open_zk(host='localhost:2181')
|
25
|
-
z = Zookeeper.new(host)
|
26
|
-
yield z
|
27
|
-
ensure
|
28
|
-
if z
|
29
|
-
z.close
|
30
|
-
|
31
|
-
wait_until do
|
32
|
-
begin
|
33
|
-
!z.connected?
|
34
|
-
rescue RuntimeError
|
35
|
-
true
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
# this is not as safe as the one in ZK, just to be used to clean up
|
42
|
-
# when we're the only one adjusting a particular path
|
43
|
-
def rm_rf(z, path)
|
44
|
-
z.get_children(:path => path).tap do |h|
|
45
|
-
if h[:rc].zero?
|
46
|
-
h[:children].each do |child|
|
47
|
-
rm_rf(z, File.join(path, child))
|
48
|
-
end
|
49
|
-
elsif h[:rc] == ZookeeperExceptions::ZNONODE
|
50
|
-
# no-op
|
51
|
-
else
|
52
|
-
raise "Oh noes! unexpected return value! #{h.inspect}"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
rv = z.delete(:path => path)
|
57
|
-
|
58
|
-
unless (rv[:rc].zero? or rv[:rc] == ZookeeperExceptions::ZNONODE)
|
59
|
-
raise "oh noes! failed to delete #{path}"
|
60
|
-
end
|
61
|
-
|
62
|
-
path
|
63
|
-
end
|
64
|
-
|
65
23
|
describe 'non-existent' do
|
66
24
|
describe 'with existing parent' do
|
67
25
|
let(:chroot_path) { '/one-level' }
|
@@ -1,27 +1,21 @@
|
|
1
1
|
require 'shared/all_success_return_values'
|
2
2
|
|
3
3
|
shared_examples_for "connection" do
|
4
|
-
def ensure_node(path, data)
|
5
|
-
if zk.stat(:path => path)[:stat].exists?
|
6
|
-
zk.set(:path => path, :data => data)
|
7
|
-
else
|
8
|
-
zk.create(:path => path, :data => data)
|
9
|
-
end
|
10
|
-
end
|
11
4
|
|
12
5
|
before :each do
|
13
|
-
ensure_node(path, data)
|
6
|
+
ensure_node(zk, path, data)
|
14
7
|
end
|
15
8
|
|
16
9
|
after :each do
|
17
|
-
ensure_node(path, data)
|
10
|
+
ensure_node(zk, path, data)
|
18
11
|
end
|
19
12
|
|
20
13
|
after :all do
|
21
14
|
Zookeeper.logger.warn "running shared examples after :all"
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
|
16
|
+
with_open_zk(connection_string) do |z|
|
17
|
+
rm_rf(z, path)
|
18
|
+
end
|
25
19
|
end
|
26
20
|
|
27
21
|
# unfortunately, we can't test w/o exercising other parts of the driver, so
|
@@ -1003,5 +997,22 @@ shared_examples_for "connection" do
|
|
1003
997
|
zk.event_dispatch_thread?.should_not be_true
|
1004
998
|
end
|
1005
999
|
end
|
1000
|
+
|
1001
|
+
describe :close do
|
1002
|
+
describe 'from the event dispatch thread' do
|
1003
|
+
it %[should not deadlock] do
|
1004
|
+
|
1005
|
+
evil_cb = lambda do |*|
|
1006
|
+
logger.debug { "calling close event_dispatch_thread? #{zk.event_dispatch_thread?}" }
|
1007
|
+
zk.close
|
1008
|
+
end
|
1009
|
+
|
1010
|
+
zk.stat(:path => path, :callback => evil_cb)
|
1011
|
+
|
1012
|
+
wait_until { zk.closed? }
|
1013
|
+
zk.should be_closed
|
1014
|
+
end
|
1015
|
+
end
|
1016
|
+
end
|
1006
1017
|
end
|
1007
1018
|
|
data/spec/spec_helper.rb
CHANGED
@@ -25,6 +25,7 @@ if ENV['ZKRB_NOLOG']
|
|
25
25
|
Zookeeper.set_debug_level(0)
|
26
26
|
end
|
27
27
|
|
28
|
+
|
28
29
|
module ZookeeperSpecHeleprs
|
29
30
|
class TimeoutError < StandardError; end
|
30
31
|
|
@@ -32,6 +33,59 @@ module ZookeeperSpecHeleprs
|
|
32
33
|
Zookeeper.logger
|
33
34
|
end
|
34
35
|
|
36
|
+
def ensure_node(zk, path, data)
|
37
|
+
return if zk.closed?
|
38
|
+
if zk.stat(:path => path)[:stat].exists?
|
39
|
+
zk.set(:path => path, :data => data)
|
40
|
+
else
|
41
|
+
zk.create(:path => path, :data => data)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def with_open_zk(host='localhost:2181')
|
46
|
+
z = Zookeeper.new(host)
|
47
|
+
yield z
|
48
|
+
ensure
|
49
|
+
if z
|
50
|
+
unless z.closed?
|
51
|
+
z.close
|
52
|
+
|
53
|
+
wait_until do
|
54
|
+
begin
|
55
|
+
!z.connected?
|
56
|
+
rescue RuntimeError
|
57
|
+
true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# this is not as safe as the one in ZK, just to be used to clean up
|
65
|
+
# when we're the only one adjusting a particular path
|
66
|
+
def rm_rf(z, path)
|
67
|
+
z.get_children(:path => path).tap do |h|
|
68
|
+
if h[:rc].zero?
|
69
|
+
h[:children].each do |child|
|
70
|
+
rm_rf(z, File.join(path, child))
|
71
|
+
end
|
72
|
+
elsif h[:rc] == ZookeeperExceptions::ZNONODE
|
73
|
+
# no-op
|
74
|
+
else
|
75
|
+
raise "Oh noes! unexpected return value! #{h.inspect}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
rv = z.delete(:path => path)
|
80
|
+
|
81
|
+
unless (rv[:rc].zero? or rv[:rc] == ZookeeperExceptions::ZNONODE)
|
82
|
+
raise "oh noes! failed to delete #{path}"
|
83
|
+
end
|
84
|
+
|
85
|
+
path
|
86
|
+
end
|
87
|
+
|
88
|
+
|
35
89
|
# method to wait until block passed returns true or timeout (default is 10 seconds) is reached
|
36
90
|
# raises TiemoutError on timeout
|
37
91
|
def wait_until(timeout=10)
|
data/spec/zookeeper_spec.rb
CHANGED
@@ -5,10 +5,10 @@ require 'shared/connection_examples'
|
|
5
5
|
describe 'Zookeeper' do
|
6
6
|
let(:path) { "/_zktest_" }
|
7
7
|
let(:data) { "underpants" }
|
8
|
-
let(:
|
8
|
+
let(:connection_string) { 'localhost:2181' }
|
9
9
|
|
10
10
|
before do
|
11
|
-
@zk = Zookeeper.new(
|
11
|
+
@zk = Zookeeper.new(connection_string)
|
12
12
|
end
|
13
13
|
|
14
14
|
after do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slyphon-zookeeper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 61
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 3
|
10
|
+
version: 0.9.3
|
11
11
|
platform: java
|
12
12
|
authors:
|
13
13
|
- Phillip Pearson
|
@@ -20,108 +20,12 @@ autorequire:
|
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
22
|
|
23
|
-
date: 2012-
|
23
|
+
date: 2012-05-03 00:00:00 Z
|
24
24
|
dependencies:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: rspec
|
27
|
-
prerelease: false
|
28
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
29
|
-
none: false
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
hash: 15
|
34
|
-
segments:
|
35
|
-
- 2
|
36
|
-
- 0
|
37
|
-
- 0
|
38
|
-
version: 2.0.0
|
39
|
-
type: :development
|
40
|
-
version_requirements: *id001
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: flexmock
|
43
|
-
prerelease: false
|
44
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
45
|
-
none: false
|
46
|
-
requirements:
|
47
|
-
- - ~>
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
hash: 41
|
50
|
-
segments:
|
51
|
-
- 0
|
52
|
-
- 8
|
53
|
-
- 11
|
54
|
-
version: 0.8.11
|
55
|
-
type: :development
|
56
|
-
version_requirements: *id002
|
57
|
-
- !ruby/object:Gem::Dependency
|
58
|
-
name: eventmachine
|
59
|
-
prerelease: false
|
60
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
|
-
requirements:
|
63
|
-
- - "="
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
hash: -2116566254
|
66
|
-
segments:
|
67
|
-
- 1
|
68
|
-
- 0
|
69
|
-
- 0
|
70
|
-
- beta
|
71
|
-
- 4
|
72
|
-
version: 1.0.0.beta.4
|
73
|
-
type: :development
|
74
|
-
version_requirements: *id003
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: evented-spec
|
77
|
-
prerelease: false
|
78
|
-
requirement: &id004 !ruby/object:Gem::Requirement
|
79
|
-
none: false
|
80
|
-
requirements:
|
81
|
-
- - ~>
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
hash: 59
|
84
|
-
segments:
|
85
|
-
- 0
|
86
|
-
- 9
|
87
|
-
- 0
|
88
|
-
version: 0.9.0
|
89
|
-
type: :development
|
90
|
-
version_requirements: *id004
|
91
|
-
- !ruby/object:Gem::Dependency
|
92
|
-
name: rake
|
93
|
-
prerelease: false
|
94
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
95
|
-
none: false
|
96
|
-
requirements:
|
97
|
-
- - ~>
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
hash: 59
|
100
|
-
segments:
|
101
|
-
- 0
|
102
|
-
- 9
|
103
|
-
- 0
|
104
|
-
version: 0.9.0
|
105
|
-
type: :development
|
106
|
-
version_requirements: *id005
|
107
|
-
- !ruby/object:Gem::Dependency
|
108
|
-
name: pry
|
109
|
-
prerelease: false
|
110
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
111
|
-
none: false
|
112
|
-
requirements:
|
113
|
-
- - ">="
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
hash: 3
|
116
|
-
segments:
|
117
|
-
- 0
|
118
|
-
version: "0"
|
119
|
-
type: :development
|
120
|
-
version_requirements: *id006
|
121
25
|
- !ruby/object:Gem::Dependency
|
122
26
|
name: slyphon-log4j
|
123
27
|
prerelease: false
|
124
|
-
requirement: &
|
28
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
125
29
|
none: false
|
126
30
|
requirements:
|
127
31
|
- - "="
|
@@ -133,11 +37,11 @@ dependencies:
|
|
133
37
|
- 15
|
134
38
|
version: 1.2.15
|
135
39
|
type: :runtime
|
136
|
-
version_requirements: *
|
40
|
+
version_requirements: *id001
|
137
41
|
- !ruby/object:Gem::Dependency
|
138
42
|
name: slyphon-zookeeper_jar
|
139
43
|
prerelease: false
|
140
|
-
requirement: &
|
44
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
141
45
|
none: false
|
142
46
|
requirements:
|
143
47
|
- - "="
|
@@ -149,8 +53,19 @@ dependencies:
|
|
149
53
|
- 5
|
150
54
|
version: 3.3.5
|
151
55
|
type: :runtime
|
152
|
-
version_requirements: *
|
153
|
-
description:
|
56
|
+
version_requirements: *id002
|
57
|
+
description: |+
|
58
|
+
A low-level multi-Ruby wrapper around the ZooKeeper API bindings.
|
59
|
+
For a friendlier interface, see http://github.com/slyphon/zk
|
60
|
+
|
61
|
+
Currently supported:
|
62
|
+
|
63
|
+
MRI: 1.8.7, 1.9.2, 1.9.3
|
64
|
+
JRuby: ~> 1.6.7
|
65
|
+
Rubinius: 2.0.testing
|
66
|
+
|
67
|
+
This library uses version 3.3.5 of zookeeper bindings.
|
68
|
+
|
154
69
|
email:
|
155
70
|
- slyphon@gmail.com
|
156
71
|
executables: []
|
@@ -194,8 +109,8 @@ files:
|
|
194
109
|
- lib/zookeeper/em_client.rb
|
195
110
|
- lib/zookeeper/exceptions.rb
|
196
111
|
- lib/zookeeper/stat.rb
|
112
|
+
- lib/zookeeper/version.rb
|
197
113
|
- notes.txt
|
198
|
-
- slyphon-zookeeper.gemspec
|
199
114
|
- spec/c_zookeeper_spec.rb
|
200
115
|
- spec/chrooted_connection_spec.rb
|
201
116
|
- spec/default_watcher_spec.rb
|
@@ -212,6 +127,7 @@ files:
|
|
212
127
|
- test/test_esoteric.rb
|
213
128
|
- test/test_watcher1.rb
|
214
129
|
- test/test_watcher2.rb
|
130
|
+
- zookeeper.gemspec
|
215
131
|
homepage: https://github.com/slyphon/zookeeper
|
216
132
|
licenses: []
|
217
133
|
|
@@ -245,7 +161,7 @@ rubyforge_project:
|
|
245
161
|
rubygems_version: 1.8.15
|
246
162
|
signing_key:
|
247
163
|
specification_version: 3
|
248
|
-
summary:
|
164
|
+
summary: Low level zookeeper client
|
249
165
|
test_files:
|
250
166
|
- spec/c_zookeeper_spec.rb
|
251
167
|
- spec/chrooted_connection_spec.rb
|
data/slyphon-zookeeper.gemspec
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
|
4
|
-
Gem::Specification.new do |s|
|
5
|
-
s.name = "slyphon-zookeeper"
|
6
|
-
s.version = '0.9.2'
|
7
|
-
|
8
|
-
s.authors = ["Phillip Pearson", "Eric Maland", "Evan Weaver", "Brian Wickman", "Neil Conway", "Jonathan D. Simms"]
|
9
|
-
s.email = ["slyphon@gmail.com"]
|
10
|
-
s.summary = %q{twitter's zookeeper client}
|
11
|
-
s.description = s.summary
|
12
|
-
s.homepage = 'https://github.com/slyphon/zookeeper'
|
13
|
-
|
14
|
-
s.add_development_dependency "rspec", ">= 2.0.0"
|
15
|
-
s.add_development_dependency 'flexmock', '~> 0.8.11'
|
16
|
-
s.add_development_dependency 'eventmachine', '1.0.0.beta.4'
|
17
|
-
s.add_development_dependency 'evented-spec', '~> 0.9.0'
|
18
|
-
s.add_development_dependency 'rake', '~> 0.9.0'
|
19
|
-
s.add_development_dependency 'pry'
|
20
|
-
|
21
|
-
s.files = `git ls-files`.split("\n")
|
22
|
-
s.require_paths = ["lib"]
|
23
|
-
|
24
|
-
if ENV['JAVA_GEM'] or defined?(::JRUBY_VERSION)
|
25
|
-
s.platform = 'java'
|
26
|
-
s.add_runtime_dependency('slyphon-log4j', '= 1.2.15')
|
27
|
-
s.add_runtime_dependency('slyphon-zookeeper_jar', '= 3.3.5')
|
28
|
-
s.require_paths += %w[java]
|
29
|
-
else
|
30
|
-
s.require_paths += %w[ext]
|
31
|
-
s.extensions = 'ext/extconf.rb'
|
32
|
-
end
|
33
|
-
|
34
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
35
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
36
|
-
end
|