slyphon-zookeeper 0.1.4-java → 0.1.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/CHANGELOG CHANGED
@@ -1,5 +1,8 @@
1
- v0.4.3 Fix a handful of memory-related bugs, fix SIGSEGV on master change,
2
- reduce latency of event handling, fix compilation on OSX.
1
+ v0.4.5 Upgrade to ZooKeeper 3.3.3
2
+
3
+ v0.4.4 Fix race condition on close, possible data corruption on async get.
4
+
5
+ v0.4.3 Fix a handful of memory-related bugs, fix SIGSEGV on master change, reduce latency of event handling, fix compilation on OSX.
3
6
 
4
7
  v0.4.2 Add options to Zookeeper#initialize, silence most Zookeeper logs.
5
8
 
data/Rakefile CHANGED
@@ -1,15 +1,3 @@
1
- require 'echoe'
2
-
3
- Echoe.new("zookeeper") do |p|
4
- p.author = "Phillip Pearson, Eric Maland, Evan Weaver, Brian Wickman"
5
- p.project = "fauna"
6
- p.summary = "An interface to the Zookeeper distributed configuration server."
7
- p.url = "https://github.com/twitter/zookeeper"
8
- p.docs_host = "blog.evanweaver.com:~/www/bax/public/files/doc/"
9
- p.clean_pattern += ["ext/lib", "ext/include", "ext/c", "ext/bin", "ext/conftest.dSYM"]
10
- p.rdoc_pattern = /README|TODO|LICENSE|CHANGELOG|BENCH|COMPAT|zookeeper_c.c|zookeeper.rb/
11
- end
12
-
13
1
  namespace :mb do
14
2
  task :build_gems do
15
3
  sh "gem build slyphon-zookeeper.gemspec"
@@ -17,3 +5,4 @@ namespace :mb do
17
5
  sh "gem build slyphon-zookeeper.gemspec"
18
6
  end
19
7
  end
8
+
Binary file
@@ -49,6 +49,9 @@ class ZookeeperBase < CZookeeper
49
49
  watcher ||= get_default_global_watcher
50
50
 
51
51
  @_running = nil # used by the C layer
52
+
53
+ yield self if block_given?
54
+
52
55
  reopen(timeout, watcher)
53
56
  return nil unless connected?
54
57
  setup_dispatch_thread!
@@ -73,7 +76,7 @@ class ZookeeperBase < CZookeeper
73
76
  end
74
77
 
75
78
  def close
76
- @_running = false;
79
+ @_running = false
77
80
  wake_event_loop!
78
81
 
79
82
  @dispatcher.join
data/ext/zookeeper_c.c CHANGED
@@ -106,7 +106,7 @@ static VALUE method_init(int argc, VALUE* argv, VALUE self) {
106
106
  zkrb_calling_context *ctx =
107
107
  zkrb_calling_context_alloc(ZKRB_GLOBAL_REQ, zk_local_ctx->queue);
108
108
 
109
- zk_local_ctx->zh =
109
+ zk_local_ctx->zh =
110
110
  zookeeper_init(
111
111
  RSTRING_PTR(hostPort),
112
112
  zkrb_state_callback,
@@ -114,7 +114,7 @@ static VALUE method_init(int argc, VALUE* argv, VALUE self) {
114
114
  &zk_local_ctx->myid,
115
115
  ctx,
116
116
  0);
117
-
117
+
118
118
  #warning [wickman] TODO handle this properly on the Ruby side rather than C side
119
119
  if (!zk_local_ctx->zh) {
120
120
  rb_raise(rb_eRuntimeError, "error connecting to zookeeper: %d", errno);
@@ -158,10 +158,10 @@ static VALUE method_init(int argc, VALUE* argv, VALUE self) {
158
158
 
159
159
  static VALUE method_get_children(VALUE self, VALUE reqid, VALUE path, VALUE async, VALUE watch) {
160
160
  STANDARD_PREAMBLE(self, zk, reqid, path, async, watch, data_ctx, watch_ctx, call_type);
161
-
161
+
162
162
  struct String_vector strings;
163
163
  struct Stat stat;
164
-
164
+
165
165
  int rc;
166
166
  switch (call_type) {
167
167
  case SYNC:
@@ -171,11 +171,11 @@ static VALUE method_get_children(VALUE self, VALUE reqid, VALUE path, VALUE asyn
171
171
  case SYNC_WATCH:
172
172
  rc = zoo_wget_children2(zk->zh, RSTRING_PTR(path), zkrb_state_callback, watch_ctx, &strings, &stat);
173
173
  break;
174
-
174
+
175
175
  case ASYNC:
176
176
  rc = zoo_aget_children2(zk->zh, RSTRING_PTR(path), 0, zkrb_strings_stat_callback, data_ctx);
177
177
  break;
178
-
178
+
179
179
  case ASYNC_WATCH:
180
180
  rc = zoo_awget_children2(zk->zh, RSTRING_PTR(path), zkrb_state_callback, watch_ctx, zkrb_strings_stat_callback, data_ctx);
181
181
  break;
@@ -192,7 +192,7 @@ static VALUE method_get_children(VALUE self, VALUE reqid, VALUE path, VALUE asyn
192
192
 
193
193
  static VALUE method_exists(VALUE self, VALUE reqid, VALUE path, VALUE async, VALUE watch) {
194
194
  STANDARD_PREAMBLE(self, zk, reqid, path, async, watch, data_ctx, watch_ctx, call_type);
195
-
195
+
196
196
  struct Stat stat;
197
197
 
198
198
  int rc;
@@ -204,11 +204,11 @@ static VALUE method_exists(VALUE self, VALUE reqid, VALUE path, VALUE async, VAL
204
204
  case SYNC_WATCH:
205
205
  rc = zoo_wexists(zk->zh, RSTRING_PTR(path), zkrb_state_callback, watch_ctx, &stat);
206
206
  break;
207
-
207
+
208
208
  case ASYNC:
209
209
  rc = zoo_aexists(zk->zh, RSTRING_PTR(path), 0, zkrb_stat_callback, data_ctx);
210
210
  break;
211
-
211
+
212
212
  case ASYNC_WATCH:
213
213
  rc = zoo_awexists(zk->zh, RSTRING_PTR(path), zkrb_state_callback, watch_ctx, zkrb_stat_callback, data_ctx);
214
214
  break;
@@ -225,12 +225,12 @@ static VALUE method_exists(VALUE self, VALUE reqid, VALUE path, VALUE async, VAL
225
225
  static VALUE method_create(VALUE self, VALUE reqid, VALUE path, VALUE data, VALUE async, VALUE acls, VALUE flags) {
226
226
  VALUE watch = Qfalse;
227
227
  STANDARD_PREAMBLE(self, zk, reqid, path, async, watch, data_ctx, watch_ctx, call_type);
228
-
228
+
229
229
  if (data != Qnil) Check_Type(data, T_STRING);
230
230
  Check_Type(flags, T_FIXNUM);
231
231
  const char *data_ptr = (data == Qnil) ? NULL : RSTRING_PTR(data);
232
232
  size_t data_len = (data == Qnil) ? -1 : RSTRING_LEN(data);
233
-
233
+
234
234
  struct ACL_vector *aclptr = NULL;
235
235
  if (acls != Qnil) { aclptr = zkrb_ruby_to_aclvector(acls); }
236
236
  char realpath[16384];
@@ -263,10 +263,10 @@ static VALUE method_create(VALUE self, VALUE reqid, VALUE path, VALUE data, VALU
263
263
  }
264
264
 
265
265
  static VALUE method_delete(VALUE self, VALUE reqid, VALUE path, VALUE version, VALUE async) {
266
- VALUE watch = Qfalse;
266
+ VALUE watch = Qfalse;
267
267
  STANDARD_PREAMBLE(self, zk, reqid, path, async, watch, data_ctx, watch_ctx, call_type);
268
268
  Check_Type(version, T_FIXNUM);
269
-
269
+
270
270
  int rc = 0;
271
271
  switch (call_type) {
272
272
  case SYNC:
@@ -295,7 +295,7 @@ static VALUE method_get(VALUE self, VALUE reqid, VALUE path, VALUE async, VALUE
295
295
  struct Stat stat;
296
296
 
297
297
  int rc;
298
-
298
+
299
299
  switch (call_type) {
300
300
  case SYNC:
301
301
  rc = zoo_get(zk->zh, RSTRING_PTR(path), 0, data, &data_len, &stat);
@@ -304,11 +304,11 @@ static VALUE method_get(VALUE self, VALUE reqid, VALUE path, VALUE async, VALUE
304
304
  case SYNC_WATCH:
305
305
  rc = zoo_wget(zk->zh, RSTRING_PTR(path), zkrb_state_callback, watch_ctx, data, &data_len, &stat);
306
306
  break;
307
-
307
+
308
308
  case ASYNC:
309
309
  rc = zoo_aget(zk->zh, RSTRING_PTR(path), 0, zkrb_data_callback, data_ctx);
310
310
  break;
311
-
311
+
312
312
  case ASYNC_WATCH:
313
313
  rc = zoo_awget(zk->zh, RSTRING_PTR(path), zkrb_state_callback, watch_ctx, zkrb_data_callback, data_ctx);
314
314
  break;
@@ -331,7 +331,7 @@ static VALUE method_get(VALUE self, VALUE reqid, VALUE path, VALUE async, VALUE
331
331
  static VALUE method_set(VALUE self, VALUE reqid, VALUE path, VALUE data, VALUE async, VALUE version) {
332
332
  VALUE watch = Qfalse;
333
333
  STANDARD_PREAMBLE(self, zk, reqid, path, async, watch, data_ctx, watch_ctx, call_type);
334
-
334
+
335
335
  struct Stat stat;
336
336
  if (data != Qnil) Check_Type(data, T_STRING);
337
337
  const char *data_ptr = (data == Qnil) ? NULL : RSTRING_PTR(data);
@@ -391,7 +391,7 @@ static VALUE method_get_acl(VALUE self, VALUE reqid, VALUE path, VALUE async) {
391
391
 
392
392
  struct ACL_vector acls;
393
393
  struct Stat stat;
394
-
394
+
395
395
  int rc;
396
396
  switch (call_type) {
397
397
  case SYNC:
@@ -426,6 +426,10 @@ static VALUE method_get_next_event(VALUE self) {
426
426
  FETCH_DATA_PTR(self, zk);
427
427
 
428
428
  for (;;) {
429
+
430
+ // we use the is_running(self) method here because it allows us to have a
431
+ // ruby-land semaphore that we can also use in the java extension
432
+ //
429
433
  if (!is_running(self)) {
430
434
  /* fprintf(stderr, "method_get_next_event: running is false, returning nil\n");*/
431
435
  return Qnil; // this case for shutdown
@@ -433,12 +437,7 @@ static VALUE method_get_next_event(VALUE self) {
433
437
 
434
438
  zkrb_event_t *event = zkrb_dequeue(zk->queue, 1);
435
439
 
436
- /*
437
- * If no events found, wait for an event by using rb_thread_select() on the
438
- * queue's pipe. Note that the ZK handle might be closed while we're
439
- * waiting; if this happens, the rb_thread_select() will fail, and we can't
440
- * safely touch the "zk" instance handle.
441
- */
440
+ /* Wait for an event using rb_thread_select() on the queue's pipe */
442
441
  if (event == NULL) {
443
442
  int fd = zk->queue->pipe_read;
444
443
  fd_set rset;
@@ -475,18 +474,25 @@ static VALUE method_client_id(VALUE self) {
475
474
  return UINT2NUM(id->client_id);
476
475
  }
477
476
 
477
+
478
478
  // wake up the event loop, used when shutting down
479
479
  static VALUE method_wake_event_loop_bang(VALUE self) {
480
480
  FETCH_DATA_PTR(self, zk);
481
481
 
482
- ssize_t ret = write(zk->queue->pipe_write, "0", 1); /* Wake up Ruby listener */
483
-
484
- if (ret == -1)
485
- rb_raise(rb_eRuntimeError, "write to pipe failed: %d", errno);
482
+ zkrb_signal(zk->queue);
486
483
 
487
484
  return Qnil;
488
485
  };
489
486
 
487
+ // static VALUE method_signal_pending_close(VALUE self) {
488
+ // FETCH_DATA_PTR(self, zk);
489
+ //
490
+ // zk->pending_close = 1;
491
+ // zkrb_signal(zk->queue);
492
+ //
493
+ // return Qnil;
494
+ // }
495
+
490
496
  static VALUE method_close(VALUE self) {
491
497
  FETCH_DATA_PTR(self, zk);
492
498
 
@@ -541,7 +547,7 @@ static void zkrb_define_methods(void) {
541
547
  DEFINE_METHOD(get, 4);
542
548
  DEFINE_METHOD(set, 5);
543
549
  DEFINE_METHOD(set_acl, 5);
544
- DEFINE_METHOD(get_acl, 3);
550
+ DEFINE_METHOD(get_acl, 3);
545
551
  DEFINE_METHOD(client_id, 0);
546
552
  DEFINE_METHOD(close, 0);
547
553
  DEFINE_METHOD(deterministic_conn_order, 1);
@@ -552,11 +558,11 @@ static void zkrb_define_methods(void) {
552
558
  // DEFINE_METHOD(add_auth, 3);
553
559
  // DEFINE_METHOD(async, 1);
554
560
 
555
- // methods for the ruby-side event manager
561
+ // methods for the ruby-side event manager
556
562
  DEFINE_METHOD(get_next_event, 0);
557
563
  DEFINE_METHOD(has_events, 0);
558
564
 
559
- // Make these class methods?
565
+ // Make these class methods?
560
566
  DEFINE_METHOD(set_debug_level, 1);
561
567
  DEFINE_METHOD(zerror, 1);
562
568
 
data/ext/zookeeper_lib.c CHANGED
@@ -69,6 +69,14 @@ zkrb_event_t* zkrb_dequeue(zkrb_queue_t *q, int need_lock) {
69
69
  }
70
70
  }
71
71
 
72
+ void zkrb_signal(zkrb_queue_t *q) {
73
+ pthread_mutex_lock(&zkrb_q_mutex);
74
+ ssize_t ret = write(q->pipe_write, "0", 1); /* Wake up Ruby listener */
75
+ pthread_mutex_unlock(&zkrb_q_mutex);
76
+ if (ret == -1)
77
+ rb_raise(rb_eRuntimeError, "write to pipe failed: %d", errno);
78
+ }
79
+
72
80
  zkrb_queue_t *zkrb_queue_alloc(void) {
73
81
  int pfd[2];
74
82
  if (pipe(pfd) == -1)
@@ -194,7 +202,7 @@ VALUE zkrb_event_to_ruby(zkrb_event_t *event) {
194
202
  case ZKRB_STAT: {
195
203
  struct zkrb_stat_completion *stat_ctx = event->completion.stat_completion;
196
204
  rb_hash_aset(hash, GET_SYM("stat"), stat_ctx->stat ? zkrb_stat_to_rarray(stat_ctx->stat) : Qnil);
197
- break;
205
+ break;
198
206
  }
199
207
  case ZKRB_STRING: {
200
208
  struct zkrb_string_completion *string_ctx = event->completion.string_completion;
@@ -342,7 +350,7 @@ void zkrb_data_callback(
342
350
  event->rc = rc;
343
351
  event->type = ZKRB_DATA;
344
352
  event->completion.data_completion = dc;
345
-
353
+
346
354
  zkrb_enqueue(queue, event);
347
355
  }
348
356
 
@@ -361,7 +369,7 @@ void zkrb_stat_callback(
361
369
  event->rc = rc;
362
370
  event->type = ZKRB_STAT;
363
371
  event->completion.stat_completion = sc;
364
-
372
+
365
373
  zkrb_enqueue(queue, event);
366
374
  }
367
375
 
@@ -381,7 +389,7 @@ void zkrb_string_callback(
381
389
  event->rc = rc;
382
390
  event->type = ZKRB_STRING;
383
391
  event->completion.string_completion = sc;
384
-
392
+
385
393
  zkrb_enqueue(queue, event);
386
394
  }
387
395
 
@@ -400,7 +408,7 @@ void zkrb_strings_callback(
400
408
  event->rc = rc;
401
409
  event->type = ZKRB_STRINGS;
402
410
  event->completion.strings_completion = sc;
403
-
411
+
404
412
  zkrb_enqueue(queue, event);
405
413
  }
406
414
 
@@ -420,7 +428,7 @@ void zkrb_strings_stat_callback(
420
428
  event->rc = rc;
421
429
  event->type = ZKRB_STRINGS_STAT;
422
430
  event->completion.strings_stat_completion = sc;
423
-
431
+
424
432
  zkrb_enqueue(queue, event);
425
433
  }
426
434
 
@@ -435,7 +443,7 @@ void zkrb_void_callback(
435
443
  event->rc = rc;
436
444
  event->type = ZKRB_VOID;
437
445
  event->completion.void_completion = NULL;
438
-
446
+
439
447
  zkrb_enqueue(queue, event);
440
448
  }
441
449
 
@@ -456,7 +464,7 @@ void zkrb_acl_callback(
456
464
  event->rc = rc;
457
465
  event->type = ZKRB_ACL;
458
466
  event->completion.acl_completion = ac;
459
-
467
+
460
468
  /* should be synchronized */
461
469
  zkrb_enqueue(queue, event);
462
470
  }
@@ -494,22 +502,22 @@ struct ACL_vector * zkrb_ruby_to_aclvector(VALUE acl_ary) {
494
502
  #warning [wickman] TODO test zkrb_ruby_to_aclvector
495
503
  struct ACL zkrb_ruby_to_acl(VALUE rubyacl) {
496
504
  struct ACL acl;
497
-
505
+
498
506
  VALUE perms = rb_iv_get(rubyacl, "@perms");
499
507
  VALUE rubyid = rb_iv_get(rubyacl, "@id");
500
508
  acl.perms = NUM2INT(perms);
501
509
  acl.id = zkrb_ruby_to_id(rubyid);
502
-
510
+
503
511
  return acl;
504
512
  }
505
513
 
506
514
  #warning [wickman] TODO zkrb_ruby_to_id error checking? test
507
515
  struct Id zkrb_ruby_to_id(VALUE rubyid) {
508
516
  struct Id id;
509
-
517
+
510
518
  VALUE scheme = rb_iv_get(rubyid, "@scheme");
511
519
  VALUE ident = rb_iv_get(rubyid, "@id");
512
-
520
+
513
521
  if (scheme != Qnil) {
514
522
  id.scheme = malloc(RSTRING_LEN(scheme) + 1);
515
523
  strncpy(id.scheme, RSTRING_PTR(scheme), RSTRING_LEN(scheme));
@@ -525,7 +533,7 @@ struct Id zkrb_ruby_to_id(VALUE rubyid) {
525
533
  } else {
526
534
  id.id = NULL;
527
535
  }
528
-
536
+
529
537
  return id;
530
538
  }
531
539
 
@@ -549,17 +557,17 @@ VALUE zkrb_string_vector_to_ruby(struct String_vector *string_vector) {
549
557
 
550
558
  VALUE zkrb_stat_to_rarray(const struct Stat* stat) {
551
559
  return rb_ary_new3(11,
552
- LL2NUM(stat->czxid),
553
- LL2NUM(stat->mzxid),
554
- LL2NUM(stat->ctime),
555
- LL2NUM(stat->mtime),
556
- INT2NUM(stat->version),
557
- INT2NUM(stat->cversion),
558
- INT2NUM(stat->aversion),
559
- LL2NUM(stat->ephemeralOwner),
560
- INT2NUM(stat->dataLength),
561
- INT2NUM(stat->numChildren),
562
- LL2NUM(stat->pzxid));
560
+ LL2NUM(stat->czxid),
561
+ LL2NUM(stat->mzxid),
562
+ LL2NUM(stat->ctime),
563
+ LL2NUM(stat->mtime),
564
+ INT2NUM(stat->version),
565
+ INT2NUM(stat->cversion),
566
+ INT2NUM(stat->aversion),
567
+ LL2NUM(stat->ephemeralOwner),
568
+ INT2NUM(stat->dataLength),
569
+ INT2NUM(stat->numChildren),
570
+ LL2NUM(stat->pzxid));
563
571
  }
564
572
 
565
573
  VALUE zkrb_stat_to_rhash(const struct Stat *stat) {
data/ext/zookeeper_lib.h CHANGED
@@ -109,6 +109,7 @@ void zkrb_event_free(zkrb_event_t *ptr);
109
109
  void zkrb_enqueue(zkrb_queue_t *queue, zkrb_event_t *elt);
110
110
  zkrb_event_t * zkrb_peek(zkrb_queue_t *queue);
111
111
  zkrb_event_t * zkrb_dequeue(zkrb_queue_t *queue, int need_lock);
112
+ void zkrb_signal(zkrb_queue_t *queue);
112
113
 
113
114
  void zkrb_print_stat(const struct Stat *s);
114
115
 
@@ -179,6 +179,9 @@ class ZookeeperBase
179
179
 
180
180
  watcher ||= get_default_global_watcher
181
181
 
182
+ # allows connected-state handlers to be registered before
183
+ yield self if block_given?
184
+
182
185
  reopen(timeout, watcher)
183
186
  return nil unless connected?
184
187
  setup_dispatch_thread!
data/lib/zookeeper.rb CHANGED
@@ -31,14 +31,14 @@ class Zookeeper < ZookeeperBase
31
31
  assert_open
32
32
  assert_supported_keys(options, [:path, :watcher, :watcher_context, :callback, :callback_context])
33
33
  assert_required_keys(options, [:path])
34
-
34
+
35
35
  req_id = setup_call(options)
36
36
  rc, value, stat = super(req_id, options[:path], options[:callback], options[:watcher])
37
37
 
38
38
  rv = { :req_id => req_id, :rc => rc }
39
39
  options[:callback] ? rv : rv.merge(:data => value, :stat => Stat.new(stat))
40
40
  end
41
-
41
+
42
42
  def set(options = {})
43
43
  assert_open
44
44
  assert_supported_keys(options, [:path, :data, :version, :callback, :callback_context])
@@ -51,7 +51,7 @@ class Zookeeper < ZookeeperBase
51
51
  rv = { :req_id => req_id, :rc => rc }
52
52
  options[:callback] ? rv : rv.merge(:stat => Stat.new(stat))
53
53
  end
54
-
54
+
55
55
  def get_children(options = {})
56
56
  assert_open
57
57
  assert_supported_keys(options, [:path, :callback, :callback_context, :watcher, :watcher_context])
@@ -75,34 +75,34 @@ class Zookeeper < ZookeeperBase
75
75
  rv = { :req_id => req_id, :rc => rc }
76
76
  options[:callback] ? rv : rv.merge(:stat => Stat.new(stat))
77
77
  end
78
-
78
+
79
79
  def create(options = {})
80
80
  assert_open
81
81
  assert_supported_keys(options, [:path, :data, :acl, :ephemeral, :sequence, :callback, :callback_context])
82
82
  assert_required_keys(options, [:path])
83
-
83
+
84
84
  flags = 0
85
85
  flags |= ZOO_EPHEMERAL if options[:ephemeral]
86
86
  flags |= ZOO_SEQUENCE if options[:sequence]
87
87
 
88
88
  options[:acl] ||= ZOO_OPEN_ACL_UNSAFE
89
-
89
+
90
90
  req_id = setup_call(options)
91
91
  rc, newpath = super(req_id, options[:path], options[:data], options[:callback], options[:acl], flags)
92
-
92
+
93
93
  rv = { :req_id => req_id, :rc => rc }
94
- options[:callback] ? rv : rv.merge(:path => newpath)
94
+ options[:callback] ? rv : rv.merge(:path => newpath)
95
95
  end
96
-
96
+
97
97
  def delete(options = {})
98
98
  assert_open
99
99
  assert_supported_keys(options, [:path, :version, :callback, :callback_context])
100
100
  assert_required_keys(options, [:path])
101
101
  options[:version] ||= -1
102
-
102
+
103
103
  req_id = setup_call(options)
104
104
  rc = super(req_id, options[:path], options[:version], options[:callback])
105
-
105
+
106
106
  { :req_id => req_id, :rc => rc }
107
107
  end
108
108
 
@@ -111,21 +111,21 @@ class Zookeeper < ZookeeperBase
111
111
  assert_supported_keys(options, [:path, :acl, :version, :callback, :callback_context])
112
112
  assert_required_keys(options, [:path, :acl])
113
113
  options[:version] ||= -1
114
-
114
+
115
115
  req_id = setup_call(options)
116
116
  rc = super(req_id, options[:path], options[:acl], options[:callback], options[:version])
117
-
117
+
118
118
  { :req_id => req_id, :rc => rc }
119
119
  end
120
-
120
+
121
121
  def get_acl(options = {})
122
122
  assert_open
123
123
  assert_supported_keys(options, [:path, :callback, :callback_context])
124
124
  assert_required_keys(options, [:path])
125
-
125
+
126
126
  req_id = setup_call(options)
127
127
  rc, acls, stat = super(req_id, options[:path], options[:callback])
128
-
128
+
129
129
  rv = { :req_id => req_id, :rc => rc }
130
130
  options[:callback] ? rv : rv.merge(:acl => acls, :stat => Stat.new(stat))
131
131
  end
@@ -157,7 +157,7 @@ private
157
157
  }
158
158
  req_id
159
159
  end
160
-
160
+
161
161
  def setup_watcher(req_id, call_opts)
162
162
  @watcher_reqs[req_id] = { :watcher => call_opts[:watcher],
163
163
  :context => call_opts[:watcher_context] }
@@ -3,9 +3,9 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "slyphon-zookeeper"
6
- s.version = '0.1.4'
6
+ s.version = '0.1.6'
7
7
 
8
- s.authors = ["Phillip Pearson", "Eric Maland", "Evan Weaver", "Brian Wickman", "Jonathan D. Simms"]
8
+ s.authors = ["Phillip Pearson", "Eric Maland", "Evan Weaver", "Brian Wickman", "Neil Conway", "Jonathan D. Simms"]
9
9
  s.email = ["slyphon@gmail.com"]
10
10
  s.summary = %q{twitter's zookeeper client}
11
11
  s.description = s.summary
metadata CHANGED
@@ -1,25 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slyphon-zookeeper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 4
10
- version: 0.1.4
9
+ - 6
10
+ version: 0.1.6
11
11
  platform: java
12
12
  authors:
13
13
  - Phillip Pearson
14
14
  - Eric Maland
15
15
  - Evan Weaver
16
16
  - Brian Wickman
17
+ - Neil Conway
17
18
  - Jonathan D. Simms
18
19
  autorequire:
19
20
  bindir: bin
20
21
  cert_chain: []
21
22
 
22
- date: 2011-03-08 00:00:00 +00:00
23
+ date: 2011-05-18 00:00:00 +00:00
23
24
  default_executable:
24
25
  dependencies:
25
26
  - !ruby/object:Gem::Dependency
@@ -106,7 +107,7 @@ files:
106
107
  - examples/cloud_config.rb
107
108
  - ext/.gitignore
108
109
  - ext/extconf.rb
109
- - ext/zkc-3.3.2.tar.gz
110
+ - ext/zkc-3.3.3.tar.gz
110
111
  - ext/zookeeper_base.rb
111
112
  - ext/zookeeper_c.c
112
113
  - ext/zookeeper_lib.c
@@ -162,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
163
  requirements: []
163
164
 
164
165
  rubyforge_project:
165
- rubygems_version: 1.4.2
166
+ rubygems_version: 1.6.2
166
167
  signing_key:
167
168
  specification_version: 3
168
169
  summary: twitter's zookeeper client
data/ext/zkc-3.3.2.tar.gz DELETED
Binary file