zk 1.9.3 → 1.10.0
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.
- checksums.yaml +7 -0
- data/.github/workflows/build.yml +55 -0
- data/.gitignore +1 -0
- data/Gemfile +18 -8
- data/README.markdown +9 -9
- data/RELEASES.markdown +28 -1
- data/lib/zk/client/base.rb +15 -0
- data/lib/zk/client/threaded.rb +3 -3
- data/lib/zk/client.rb +1 -1
- data/lib/zk/election.rb +1 -1
- data/lib/zk/event_handler.rb +16 -8
- data/lib/zk/event_handler_subscription/base.rb +1 -1
- data/lib/zk/fork_hook.rb +9 -4
- data/lib/zk/locker/locker_base.rb +14 -2
- data/lib/zk/locker/semaphore.rb +1 -3
- data/lib/zk/logger.rb +34 -0
- data/lib/zk/node_deletion_watcher.rb +4 -5
- data/lib/zk/pool.rb +12 -12
- data/lib/zk/subscription.rb +1 -1
- data/lib/zk/threaded_callback.rb +1 -1
- data/lib/zk/threadpool.rb +1 -1
- data/lib/zk/version.rb +1 -1
- data/lib/zk.rb +1 -5
- data/spec/event_catcher_spec.rb +1 -1
- data/spec/logging_progress_bar_formatter.rb +1 -1
- data/spec/message_queue_spec.rb +6 -6
- data/spec/shared/client_examples.rb +81 -81
- data/spec/shared/locker_examples.rb +13 -13
- data/spec/spec_helper.rb +12 -13
- data/spec/support/bogus_mongoid.rb +1 -1
- data/spec/support/client_forker.rb +1 -1
- data/spec/support/event_catcher.rb +1 -1
- data/spec/support/logging.rb +15 -47
- data/spec/zk/00_forked_client_integration_spec.rb +3 -3
- data/spec/zk/client/locking_and_session_death_spec.rb +2 -2
- data/spec/zk/client_spec.rb +19 -19
- data/spec/zk/election_spec.rb +44 -44
- data/spec/zk/extensions_spec.rb +2 -2
- data/spec/zk/locker/exclusive_locker_spec.rb +41 -41
- data/spec/zk/locker/locker_basic_spec.rb +55 -33
- data/spec/zk/locker/semaphore_spec.rb +39 -32
- data/spec/zk/locker/shared_exclusive_integration_spec.rb +37 -37
- data/spec/zk/locker/shared_locker_spec.rb +43 -43
- data/spec/zk/locker_spec.rb +2 -2
- data/spec/zk/module_spec.rb +25 -25
- data/spec/zk/mongoid_spec.rb +47 -47
- data/spec/zk/node_deletion_watcher_spec.rb +39 -31
- data/spec/zk/pool_spec.rb +56 -65
- data/spec/zk/threaded_callback_spec.rb +10 -10
- data/spec/zk/threadpool_spec.rb +25 -25
- data/spec/zk/watch_spec.rb +67 -79
- data/spec/zk/zookeeper_spec.rb +36 -30
- data/zk.gemspec +1 -2
- metadata +26 -47
- data/.travis.yml +0 -25
- data/lib/zk/logging.rb +0 -36
data/spec/zk/watch_spec.rb
CHANGED
@@ -17,7 +17,7 @@ describe ZK do
|
|
17
17
|
after do
|
18
18
|
mute_logger do
|
19
19
|
if @zk.connected?
|
20
|
-
@zk.close!
|
20
|
+
@zk.close!
|
21
21
|
wait_until { !@zk.connected? }
|
22
22
|
end
|
23
23
|
|
@@ -33,29 +33,29 @@ describe ZK do
|
|
33
33
|
locker.synchronize do
|
34
34
|
callback_called = true
|
35
35
|
end
|
36
|
-
event.path.
|
36
|
+
expect(event.path).to eq(@path)
|
37
37
|
end
|
38
38
|
|
39
39
|
@zk.exists?(@path, :watch => true)
|
40
40
|
@zk.create(@path, "", :mode => :ephemeral)
|
41
41
|
|
42
42
|
wait_until(5) { locker.synchronize { callback_called } }
|
43
|
-
callback_called.
|
43
|
+
expect(callback_called).to be(true)
|
44
44
|
end
|
45
45
|
|
46
46
|
describe :regression do
|
47
|
-
before do
|
48
|
-
|
49
|
-
end
|
47
|
+
# before do
|
48
|
+
# pending_in_travis("these tests take too long or time out")
|
49
|
+
# end
|
50
50
|
|
51
|
-
# this is stupid, and a bad test, but we have to check that events
|
52
|
-
# don't get re-delivered to a single registered callback just because
|
51
|
+
# this is stupid, and a bad test, but we have to check that events
|
52
|
+
# don't get re-delivered to a single registered callback just because
|
53
53
|
# :watch => true was called twice
|
54
54
|
#
|
55
55
|
# again, we're testing a negative here, so consider this a regression check
|
56
56
|
#
|
57
57
|
def wait_for_events_to_not_be_delivered(events)
|
58
|
-
|
58
|
+
expect { wait_until(0.2) { events.length >= 2 } }.to raise_error(WaitWatchers::TimeoutError)
|
59
59
|
end
|
60
60
|
|
61
61
|
it %[should only deliver an event once to each watcher registered for exists?] do
|
@@ -67,14 +67,14 @@ describe ZK do
|
|
67
67
|
end
|
68
68
|
|
69
69
|
2.times do
|
70
|
-
@zk.exists?(@path, :watch => true).
|
70
|
+
expect(@zk.exists?(@path, :watch => true)).not_to be(true)
|
71
71
|
end
|
72
72
|
|
73
73
|
@zk.create(@path, '', :mode => :ephemeral)
|
74
74
|
|
75
75
|
wait_for_events_to_not_be_delivered(events)
|
76
76
|
|
77
|
-
events.length.
|
77
|
+
expect(events.length).to eq(1)
|
78
78
|
end
|
79
79
|
|
80
80
|
it %[should only deliver an event once to each watcher registered for get] do
|
@@ -89,14 +89,14 @@ describe ZK do
|
|
89
89
|
|
90
90
|
2.times do
|
91
91
|
data, stat = @zk.get(@path, :watch => true)
|
92
|
-
data.
|
92
|
+
expect(data).to eq('one')
|
93
93
|
end
|
94
94
|
|
95
95
|
@zk.set(@path, 'two')
|
96
96
|
|
97
97
|
wait_for_events_to_not_be_delivered(events)
|
98
98
|
|
99
|
-
events.length.
|
99
|
+
expect(events.length).to eq(1)
|
100
100
|
end
|
101
101
|
|
102
102
|
|
@@ -112,20 +112,20 @@ describe ZK do
|
|
112
112
|
|
113
113
|
2.times do
|
114
114
|
children = @zk.children(@path, :watch => true)
|
115
|
-
children.
|
115
|
+
expect(children).to be_empty
|
116
116
|
end
|
117
117
|
|
118
118
|
@zk.create("#{@path}/pfx", '', :mode => :ephemeral_sequential)
|
119
119
|
|
120
120
|
wait_for_events_to_not_be_delivered(events)
|
121
121
|
|
122
|
-
events.length.
|
122
|
+
expect(events.length).to eq(1)
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
126
|
it %[should restrict_new_watches_for? if a successul watch has been set] do
|
127
127
|
@zk.stat(@path, :watch => true)
|
128
|
-
@zk.event_handler.
|
128
|
+
expect(@zk.event_handler).to be_restricting_new_watches_for(:data, @path)
|
129
129
|
end
|
130
130
|
|
131
131
|
it %[should not a block on new watches after an operation fails] do
|
@@ -141,19 +141,19 @@ describe ZK do
|
|
141
141
|
|
142
142
|
# get a path that doesn't exist with a watch
|
143
143
|
|
144
|
-
|
144
|
+
expect { @zk.get(@path, :watch => true) }.to raise_error(ZK::Exceptions::NoNode)
|
145
145
|
|
146
|
-
@zk.event_handler.
|
146
|
+
expect(@zk.event_handler).not_to be_restricting_new_watches_for(:data, @path)
|
147
147
|
|
148
148
|
@zk.stat(@path, :watch => true)
|
149
149
|
|
150
|
-
@zk.event_handler.
|
150
|
+
expect(@zk.event_handler).to be_restricting_new_watches_for(:data, @path)
|
151
151
|
|
152
152
|
@zk.create(@path, '')
|
153
153
|
|
154
154
|
wait_while { events.empty? }
|
155
155
|
|
156
|
-
events.
|
156
|
+
expect(events).not_to be_empty
|
157
157
|
end
|
158
158
|
|
159
159
|
it %[should call a child listener when the node is deleted] do
|
@@ -177,10 +177,10 @@ describe ZK do
|
|
177
177
|
|
178
178
|
event = events.pop
|
179
179
|
|
180
|
-
event.
|
180
|
+
expect(event).not_to be_nil
|
181
181
|
|
182
|
-
event.path.
|
183
|
-
event.type.
|
182
|
+
expect(event.path).to eq(@path)
|
183
|
+
expect(event.type).to eq(Zookeeper::ZOO_DELETED_EVENT)
|
184
184
|
|
185
185
|
# Create the node again
|
186
186
|
@zk.create(@path, '')
|
@@ -196,10 +196,10 @@ describe ZK do
|
|
196
196
|
|
197
197
|
event = events.pop
|
198
198
|
|
199
|
-
event.
|
199
|
+
expect(event).not_to be_nil
|
200
200
|
|
201
|
-
event.path.
|
202
|
-
event.type.
|
201
|
+
expect(event.path).to eq(@path)
|
202
|
+
expect(event.type).to eq(Zookeeper::ZOO_DELETED_EVENT)
|
203
203
|
end
|
204
204
|
|
205
205
|
describe ':all' do
|
@@ -230,7 +230,7 @@ describe ZK do
|
|
230
230
|
@zk.create(@path)
|
231
231
|
@zk.create(@other_path, 'blah')
|
232
232
|
|
233
|
-
wait_until { events.length == 2 }.
|
233
|
+
expect(wait_until { events.length == 2 }).to be(true)
|
234
234
|
end
|
235
235
|
end
|
236
236
|
|
@@ -250,58 +250,58 @@ describe ZK do
|
|
250
250
|
|
251
251
|
it %[should deliver only the created event to the created block] do
|
252
252
|
@events.synchronize do
|
253
|
-
@zk.stat(@path, :watch => true).
|
253
|
+
expect(@zk.stat(@path, :watch => true)).not_to exist
|
254
254
|
|
255
255
|
@zk.create(@path)
|
256
256
|
|
257
257
|
@events.wait_for_created
|
258
258
|
|
259
|
-
@events.created.
|
260
|
-
@events.created.first.
|
261
|
-
@events.all.
|
259
|
+
expect(@events.created).not_to be_empty
|
260
|
+
expect(@events.created.first).to be_node_created
|
261
|
+
expect(@events.all).not_to be_empty
|
262
262
|
|
263
|
-
@zk.stat(@path, :watch => true).
|
263
|
+
expect(@zk.stat(@path, :watch => true)).to exist
|
264
264
|
|
265
|
-
@events.all.length.
|
265
|
+
expect(@events.all.length).to eq(1)
|
266
266
|
|
267
267
|
@zk.delete(@path)
|
268
268
|
|
269
269
|
@events.wait_for_all
|
270
270
|
end
|
271
271
|
|
272
|
-
@events.all.length.
|
272
|
+
expect(@events.all.length).to eq(2)
|
273
273
|
|
274
274
|
# :deleted event was delivered, make sure it didn't get delivered to the :created block
|
275
|
-
@events.created.length.
|
275
|
+
expect(@events.created.length).to eq(1)
|
276
276
|
end
|
277
277
|
|
278
278
|
it %[should deliver only the changed event to the changed block] do
|
279
279
|
@events.synchronize do
|
280
280
|
@zk.create(@path)
|
281
281
|
|
282
|
-
@zk.stat(@path, :watch => true).
|
282
|
+
expect(@zk.stat(@path, :watch => true)).to exist
|
283
283
|
|
284
284
|
@zk.set(@path, 'data')
|
285
285
|
|
286
286
|
@events.wait_for_changed
|
287
287
|
end
|
288
288
|
|
289
|
-
@events.changed.
|
290
|
-
@events.changed.length.
|
291
|
-
@events.changed.first.
|
289
|
+
expect(@events.changed).not_to be_empty
|
290
|
+
expect(@events.changed.length).to eq(1)
|
291
|
+
expect(@events.changed.first).to be_node_changed
|
292
292
|
|
293
|
-
@events.all.length.
|
293
|
+
expect(@events.all.length).to eq(1)
|
294
294
|
|
295
295
|
@events.synchronize do
|
296
|
-
@zk.stat(@path, :watch => true).
|
296
|
+
expect(@zk.stat(@path, :watch => true)).to exist
|
297
297
|
@zk.delete(@path)
|
298
298
|
@events.wait_for_all
|
299
299
|
end
|
300
300
|
|
301
|
-
@events.all.length.
|
301
|
+
expect(@events.all.length).to eq(2)
|
302
302
|
|
303
303
|
# :deleted event was delivered, make sure it didn't get delivered to the :changed block
|
304
|
-
@events.changed.length.
|
304
|
+
expect(@events.changed.length).to eq(1)
|
305
305
|
end
|
306
306
|
|
307
307
|
it %[should deliver only the child event to the child block] do
|
@@ -309,53 +309,53 @@ describe ZK do
|
|
309
309
|
|
310
310
|
@events.synchronize do
|
311
311
|
@zk.create(@path)
|
312
|
-
@zk.children(@path, :watch => true).
|
312
|
+
expect(@zk.children(@path, :watch => true)).to be_empty
|
313
313
|
|
314
314
|
child_path = @zk.create("#{@path}/m", '', :sequence => true)
|
315
315
|
|
316
316
|
@events.wait_for_child
|
317
317
|
|
318
|
-
@events.child.length.
|
319
|
-
@events.child.first.
|
318
|
+
expect(@events.child.length).to eq(1)
|
319
|
+
expect(@events.child.first).to be_node_child
|
320
320
|
|
321
|
-
@zk.stat(@path, :watch => true).
|
321
|
+
expect(@zk.stat(@path, :watch => true)).to exist
|
322
322
|
|
323
|
-
@events.all.length.
|
323
|
+
expect(@events.all.length).to eq(1)
|
324
324
|
|
325
325
|
@zk.set(@path, '') # equivalent to a 'touch'
|
326
326
|
@events.wait_for_all
|
327
327
|
end
|
328
328
|
|
329
|
-
@events.all.length.
|
329
|
+
expect(@events.all.length).to eq(2)
|
330
330
|
|
331
331
|
# :changed event was delivered, make sure it didn't get delivered to the :child block
|
332
|
-
@events.child.length.
|
332
|
+
expect(@events.child.length).to eq(1)
|
333
333
|
end
|
334
334
|
|
335
335
|
it %[should deliver only the deleted event to the deleted block] do
|
336
336
|
@events.synchronize do
|
337
337
|
@zk.create(@path)
|
338
|
-
@zk.stat(@path, :watch => true).
|
338
|
+
expect(@zk.stat(@path, :watch => true)).to exist
|
339
339
|
@zk.delete(@path)
|
340
340
|
|
341
341
|
@events.wait_for_deleted
|
342
342
|
@events.wait_while_all { |all| all.empty? }
|
343
343
|
|
344
|
-
@events.deleted.
|
345
|
-
@events.deleted.first.
|
346
|
-
@events.all.length.
|
344
|
+
expect(@events.deleted).not_to be_empty
|
345
|
+
expect(@events.deleted.first).to be_node_deleted
|
346
|
+
expect(@events.all.length).to eq(1)
|
347
347
|
|
348
|
-
@zk.stat(@path, :watch => true).
|
348
|
+
expect(@zk.stat(@path, :watch => true)).not_to exist
|
349
349
|
|
350
350
|
@zk.create(@path)
|
351
351
|
|
352
352
|
@events.wait_for_all
|
353
353
|
end
|
354
354
|
|
355
|
-
@events.all.length.
|
355
|
+
expect(@events.all.length).to be > 1
|
356
356
|
|
357
357
|
# :deleted event was delivered, make sure it didn't get delivered to the :created block
|
358
|
-
@events.deleted.length.
|
358
|
+
expect(@events.deleted.length).to eq(1)
|
359
359
|
end
|
360
360
|
end # event catcher scope
|
361
361
|
|
@@ -372,30 +372,30 @@ describe ZK do
|
|
372
372
|
end
|
373
373
|
|
374
374
|
@events.synchronize do
|
375
|
-
@zk.stat(@path, :watch => true).
|
375
|
+
expect(@zk.stat(@path, :watch => true)).not_to exist
|
376
376
|
|
377
377
|
@zk.create(@path)
|
378
378
|
|
379
379
|
@cond.wait(5)
|
380
380
|
|
381
|
-
@events.
|
382
|
-
@events.length.
|
383
|
-
@events.first.
|
381
|
+
expect(@events).not_to be_empty
|
382
|
+
expect(@events.length).to eq(1)
|
383
|
+
expect(@events.first).to be_node_created
|
384
384
|
|
385
|
-
@zk.stat(@path, :watch => true).
|
385
|
+
expect(@zk.stat(@path, :watch => true)).to exist
|
386
386
|
@zk.set(@path, 'blah')
|
387
387
|
|
388
388
|
@cond.wait(5)
|
389
389
|
end
|
390
390
|
|
391
|
-
@events.length.
|
392
|
-
@events.last.
|
391
|
+
expect(@events.length).to eq(2)
|
392
|
+
expect(@events.last).to be_node_changed
|
393
393
|
end
|
394
394
|
|
395
395
|
it %[should barf if an invalid event name is given] do
|
396
|
-
|
396
|
+
expect do
|
397
397
|
@zk.register(@path, :only => :tripping) { }
|
398
|
-
end.
|
398
|
+
end.to raise_error(ArgumentError)
|
399
399
|
end
|
400
400
|
end # event interest
|
401
401
|
end # watchers
|
@@ -416,21 +416,9 @@ describe ZK do
|
|
416
416
|
|
417
417
|
it %[should fire the registered callback] do
|
418
418
|
wait_while { @event.nil? }
|
419
|
-
@event.
|
419
|
+
expect(@event).not_to be_nil
|
420
420
|
end
|
421
421
|
end
|
422
|
-
|
423
|
-
describe 'registered listeners' do
|
424
|
-
before do
|
425
|
-
@event = flexmock(:event) do |m|
|
426
|
-
m.should_receive(:type).and_return(-1)
|
427
|
-
m.should_receive(:zk=).with(any())
|
428
|
-
m.should_receive(:node_event?).and_return(false)
|
429
|
-
m.should_receive(:state_event?).and_return(true)
|
430
|
-
m.should_receive(:state).and_return(Zookeeper::Constants::ZOO_CONNECTED_STATE)
|
431
|
-
end
|
432
|
-
end
|
433
|
-
end # registered listeners
|
434
422
|
end
|
435
423
|
end
|
436
424
|
|
data/spec/zk/zookeeper_spec.rb
CHANGED
@@ -2,61 +2,67 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
shared_examples_for 'ZK basic' do
|
4
4
|
before do
|
5
|
-
logger.debug { "connection_args: #{connection_args.inspect}" }
|
5
|
+
logger.debug { "connection_args: #{connection_args.inspect}" }
|
6
6
|
begin
|
7
7
|
@zk.create(@base_path)
|
8
8
|
rescue ZK::Exceptions::NodeExists
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
+
describe ZK, "with no authentication" do
|
13
|
+
it "should add authentication" do
|
14
|
+
expect(@zk.add_auth({:scheme => 'digest', :cert => 'bob:password'})).to include({:rc => 0})
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
12
18
|
describe ZK, "with no paths" do
|
13
19
|
it "should not exist" do
|
14
|
-
@zk.exists?("#{@base_path}/test").
|
20
|
+
expect(@zk.exists?("#{@base_path}/test")).to be(false)
|
15
21
|
end
|
16
22
|
|
17
23
|
it "should create a path" do
|
18
|
-
@zk.create("#{@base_path}/test", "test_data", :mode => :ephemeral).
|
24
|
+
expect(@zk.create("#{@base_path}/test", "test_data", :mode => :ephemeral)).to eq("#{@base_path}/test")
|
19
25
|
end
|
20
26
|
|
21
27
|
it "should be able to set the data" do
|
22
28
|
@zk.create("#{@base_path}/test", "something", :mode => :ephemeral)
|
23
29
|
@zk.set("#{@base_path}/test", "somethingelse")
|
24
|
-
@zk.get("#{@base_path}/test").first.
|
30
|
+
expect(@zk.get("#{@base_path}/test").first).to eq("somethingelse")
|
25
31
|
end
|
26
32
|
|
27
33
|
it "should raise an exception for a non existent path" do
|
28
|
-
|
34
|
+
expect { @zk.get("/non_existent_path") }.to raise_error(ZK::Exceptions::NoNode)
|
29
35
|
end
|
30
36
|
|
31
37
|
it "should create a path with sequence set" do
|
32
|
-
@zk.create("#{@base_path}/test", "test_data", :mode => :persistent_sequential).
|
38
|
+
expect(@zk.create("#{@base_path}/test", "test_data", :mode => :persistent_sequential)).to match(/test(\d+)/)
|
33
39
|
end
|
34
40
|
|
35
41
|
it "should create an ephemeral path" do
|
36
|
-
@zk.create("#{@base_path}/test", "test_data", :mode => :ephemeral).
|
42
|
+
expect(@zk.create("#{@base_path}/test", "test_data", :mode => :ephemeral)).to eq("#{@base_path}/test")
|
37
43
|
end
|
38
44
|
|
39
45
|
it "should remove ephemeral path when client session ends" do
|
40
|
-
@zk.create("#{@base_path}/test", "test_data", :mode => :ephemeral).
|
41
|
-
@zk.exists?("#{@base_path}/test").
|
46
|
+
expect(@zk.create("#{@base_path}/test", "test_data", :mode => :ephemeral)).to eq("#{@base_path}/test")
|
47
|
+
expect(@zk.exists?("#{@base_path}/test")).not_to be_nil
|
42
48
|
@zk.close!
|
43
49
|
wait_until(2) { !@zk.connected? }
|
44
|
-
@zk.
|
50
|
+
expect(@zk).not_to be_connected
|
45
51
|
|
46
52
|
@zk = ZK.new(*connection_args)
|
47
53
|
wait_until{ @zk.connected? }
|
48
|
-
@zk.exists?("#{@base_path}/test").
|
54
|
+
expect(@zk.exists?("#{@base_path}/test")).to be(false)
|
49
55
|
end
|
50
56
|
|
51
57
|
it "should remove sequential ephemeral path when client session ends" do
|
52
58
|
created = @zk.create("#{@base_path}/test", "test_data", :mode => :ephemeral_sequential)
|
53
|
-
created.
|
54
|
-
@zk.exists?(created).
|
59
|
+
expect(created).to match(/test(\d+)/)
|
60
|
+
expect(@zk.exists?(created)).not_to be_nil
|
55
61
|
@zk.close!
|
56
62
|
|
57
63
|
@zk = ZK.new(*connection_args)
|
58
64
|
wait_until{ @zk.connected? }
|
59
|
-
@zk.exists?(created).
|
65
|
+
expect(@zk.exists?(created)).to be(false)
|
60
66
|
end
|
61
67
|
end
|
62
68
|
|
@@ -66,57 +72,57 @@ shared_examples_for 'ZK basic' do
|
|
66
72
|
end
|
67
73
|
|
68
74
|
it "should return a stat" do
|
69
|
-
@zk.stat("#{@base_path}/test").
|
75
|
+
expect(@zk.stat("#{@base_path}/test")).to be_instance_of(Zookeeper::Stat)
|
70
76
|
end
|
71
77
|
|
72
78
|
it "should return a boolean" do
|
73
|
-
@zk.exists?("#{@base_path}/test").
|
79
|
+
expect(@zk.exists?("#{@base_path}/test")).to be(true)
|
74
80
|
end
|
75
81
|
|
76
82
|
it "should get data and stat" do
|
77
83
|
data, stat = @zk.get("#{@base_path}/test")
|
78
|
-
data.
|
79
|
-
stat.
|
80
|
-
stat.created_time.
|
84
|
+
expect(data).to eq("test_data")
|
85
|
+
expect(stat).to be_a_kind_of(Zookeeper::Stat)
|
86
|
+
expect(stat.created_time).not_to eq(0)
|
81
87
|
end
|
82
88
|
|
83
89
|
it "should set data with a file" do
|
84
90
|
file = File.read('spec/test_file.txt')
|
85
91
|
@zk.set("#{@base_path}/test", file)
|
86
|
-
@zk.get("#{@base_path}/test").first.
|
92
|
+
expect(@zk.get("#{@base_path}/test").first).to eq(file)
|
87
93
|
end
|
88
94
|
|
89
95
|
it "should delete path" do
|
90
96
|
@zk.delete("#{@base_path}/test")
|
91
|
-
@zk.exists?("#{@base_path}/test").
|
97
|
+
expect(@zk.exists?("#{@base_path}/test")).to be(false)
|
92
98
|
end
|
93
99
|
|
94
100
|
it "should create a child path" do
|
95
|
-
@zk.create("#{@base_path}/test/child", "child", :mode => :ephemeral).
|
101
|
+
expect(@zk.create("#{@base_path}/test/child", "child", :mode => :ephemeral)).to eq("#{@base_path}/test/child")
|
96
102
|
end
|
97
103
|
|
98
104
|
it "should create sequential child paths" do
|
99
|
-
(child1 = @zk.create("#{@base_path}/test/child", "child1", :mode => :persistent_sequential)).
|
100
|
-
(child2 = @zk.create("#{@base_path}/test/child", "child2", :mode => :persistent_sequential)).
|
105
|
+
expect(child1 = @zk.create("#{@base_path}/test/child", "child1", :mode => :persistent_sequential)).to match(/\/test\/child(\d+)/)
|
106
|
+
expect(child2 = @zk.create("#{@base_path}/test/child", "child2", :mode => :persistent_sequential)).to match(/\/test\/child(\d+)/)
|
101
107
|
children = @zk.children("#{@base_path}/test")
|
102
|
-
children.length.
|
103
|
-
children.
|
104
|
-
children.
|
108
|
+
expect(children.length).to eq(2)
|
109
|
+
expect(children).to be_include(child1.match(/\/test\/(child\d+)/)[1])
|
110
|
+
expect(children).to be_include(child2.match(/\/test\/(child\d+)/)[1])
|
105
111
|
end
|
106
112
|
|
107
113
|
it "should have no children" do
|
108
|
-
@zk.children("#{@base_path}/test").
|
114
|
+
expect(@zk.children("#{@base_path}/test")).to be_empty
|
109
115
|
end
|
110
116
|
end
|
111
117
|
|
112
118
|
describe ZK, "with children" do
|
113
119
|
before(:each) do
|
114
120
|
@zk.create("#{@base_path}/test", "test_data", :mode => :persistent)
|
115
|
-
@zk.create("#{@base_path}/test/child", "child", :mode => "persistent").
|
121
|
+
expect(@zk.create("#{@base_path}/test/child", "child", :mode => "persistent")).to eq("#{@base_path}/test/child")
|
116
122
|
end
|
117
123
|
|
118
124
|
it "should get children" do
|
119
|
-
@zk.children("#{@base_path}/test").
|
125
|
+
expect(@zk.children("#{@base_path}/test")).to eql(["child"])
|
120
126
|
end
|
121
127
|
end
|
122
128
|
end
|
data/zk.gemspec
CHANGED
@@ -12,8 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = %q{A high-level wrapper around the zookeeper driver}
|
13
13
|
s.description = s.summary + "\n"
|
14
14
|
|
15
|
-
s.add_runtime_dependency 'zookeeper', '~> 1.
|
16
|
-
s.add_runtime_dependency 'logging', '~> 1.7.2'
|
15
|
+
s.add_runtime_dependency 'zookeeper', '~> 1.5.0'
|
17
16
|
|
18
17
|
s.files = `git ls-files`.split("\n")
|
19
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
metadata
CHANGED
@@ -1,67 +1,48 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.10.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jonathan D. Simms
|
9
8
|
- Topper Bowers
|
10
|
-
autorequire:
|
9
|
+
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2021-09-27 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: zookeeper
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- - ~>
|
18
|
+
- - "~>"
|
21
19
|
- !ruby/object:Gem::Version
|
22
|
-
version: 1.
|
20
|
+
version: 1.5.0
|
23
21
|
type: :runtime
|
24
22
|
prerelease: false
|
25
23
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
24
|
requirements:
|
28
|
-
- - ~>
|
25
|
+
- - "~>"
|
29
26
|
- !ruby/object:Gem::Version
|
30
|
-
version: 1.
|
31
|
-
-
|
32
|
-
name: logging
|
33
|
-
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
|
-
requirements:
|
36
|
-
- - ~>
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: 1.7.2
|
39
|
-
type: :runtime
|
40
|
-
prerelease: false
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
|
-
requirements:
|
44
|
-
- - ~>
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 1.7.2
|
47
|
-
description: ! 'A high-level wrapper around the zookeeper driver
|
27
|
+
version: 1.5.0
|
28
|
+
description: 'A high-level wrapper around the zookeeper driver
|
48
29
|
|
49
|
-
'
|
30
|
+
'
|
50
31
|
email:
|
51
32
|
- slyphon@gmail.com
|
52
33
|
executables: []
|
53
34
|
extensions: []
|
54
35
|
extra_rdoc_files: []
|
55
36
|
files:
|
56
|
-
- .dotfiles/ctags_paths
|
57
|
-
- .dotfiles/rspec-logging
|
58
|
-
- .dotfiles/ruby-gemset
|
59
|
-
- .dotfiles/ruby-version
|
60
|
-
- .dotfiles/rvmrc
|
61
|
-
- .
|
62
|
-
- .
|
63
|
-
- .
|
64
|
-
- .yardopts
|
37
|
+
- ".dotfiles/ctags_paths"
|
38
|
+
- ".dotfiles/rspec-logging"
|
39
|
+
- ".dotfiles/ruby-gemset"
|
40
|
+
- ".dotfiles/ruby-version"
|
41
|
+
- ".dotfiles/rvmrc"
|
42
|
+
- ".github/workflows/build.yml"
|
43
|
+
- ".gitignore"
|
44
|
+
- ".gitmodules"
|
45
|
+
- ".yardopts"
|
65
46
|
- Gemfile
|
66
47
|
- Guardfile
|
67
48
|
- LICENSE
|
@@ -96,7 +77,7 @@ files:
|
|
96
77
|
- lib/zk/locker/locker_base.rb
|
97
78
|
- lib/zk/locker/semaphore.rb
|
98
79
|
- lib/zk/locker/shared_locker.rb
|
99
|
-
- lib/zk/
|
80
|
+
- lib/zk/logger.rb
|
100
81
|
- lib/zk/message_queue.rb
|
101
82
|
- lib/zk/mongoid.rb
|
102
83
|
- lib/zk/node_deletion_watcher.rb
|
@@ -155,27 +136,25 @@ files:
|
|
155
136
|
- zk.gemspec
|
156
137
|
homepage: https://github.com/slyphon/zk
|
157
138
|
licenses: []
|
158
|
-
|
139
|
+
metadata: {}
|
140
|
+
post_install_message:
|
159
141
|
rdoc_options: []
|
160
142
|
require_paths:
|
161
143
|
- lib
|
162
144
|
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
-
none: false
|
164
145
|
requirements:
|
165
|
-
- -
|
146
|
+
- - ">="
|
166
147
|
- !ruby/object:Gem::Version
|
167
148
|
version: '0'
|
168
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
150
|
requirements:
|
171
|
-
- -
|
151
|
+
- - ">="
|
172
152
|
- !ruby/object:Gem::Version
|
173
153
|
version: '0'
|
174
154
|
requirements: []
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
specification_version: 3
|
155
|
+
rubygems_version: 3.1.6
|
156
|
+
signing_key:
|
157
|
+
specification_version: 4
|
179
158
|
summary: A high-level wrapper around the zookeeper driver
|
180
159
|
test_files:
|
181
160
|
- spec/event_catcher_spec.rb
|