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/ext/generate_gvl_code.rb
CHANGED
@@ -202,11 +202,9 @@ class GeneratedCode < Struct.new(:structs, :wrapper_fns, :calling_fns)
|
|
202
202
|
|
203
203
|
typed_args = argstr.split(',').map(&:strip)
|
204
204
|
|
205
|
-
# gah, fix up
|
206
|
-
if
|
207
|
-
|
208
|
-
typed_args[idx] = 'void_completion_t completion'
|
209
|
-
end
|
205
|
+
# gah, fix up functions which have a void_completion_t with no name assigned
|
206
|
+
if idx = typed_args.index('void_completion_t')
|
207
|
+
typed_args[idx] = 'void_completion_t completion'
|
210
208
|
end
|
211
209
|
|
212
210
|
struct = CallStruct.new(zoo_fn_name, typed_args)
|
@@ -233,7 +231,7 @@ def render_header_file(code)
|
|
233
231
|
#endif
|
234
232
|
|
235
233
|
#include "ruby.h"
|
236
|
-
#include "
|
234
|
+
#include "zookeeper/zookeeper.h"
|
237
235
|
#include "zkrb_wrapper_compat.h"
|
238
236
|
#include "dbg.h"
|
239
237
|
|
File without changes
|
@@ -0,0 +1,41 @@
|
|
1
|
+
diff -ur zkc-3.4.5-orig/c/src/zookeeper.c zkc-3.4.5/c/src/zookeeper.c
|
2
|
+
--- zkc-3.4.5-orig/c/src/zookeeper.c 2012-09-30 10:53:32.000000000 -0700
|
3
|
+
+++ zkc-3.4.5/c/src/zookeeper.c 2013-09-07 21:25:24.000000000 -0700
|
4
|
+
@@ -1650,14 +1650,16 @@
|
5
|
+
// a PING
|
6
|
+
if (zh->state==ZOO_CONNECTED_STATE) {
|
7
|
+
send_to = zh->recv_timeout/3 - idle_send;
|
8
|
+
- if (send_to <= 0 && zh->sent_requests.head==0) {
|
9
|
+
-// LOG_DEBUG(("Sending PING to %s (exceeded idle by %dms)",
|
10
|
+
-// format_current_endpoint_info(zh),-send_to));
|
11
|
+
- int rc=send_ping(zh);
|
12
|
+
- if (rc < 0){
|
13
|
+
- LOG_ERROR(("failed to send PING request (zk retcode=%d)",rc));
|
14
|
+
- return api_epilog(zh,rc);
|
15
|
+
- }
|
16
|
+
+ if (send_to <= 0) {
|
17
|
+
+ if (zh->sent_requests.head==0) {
|
18
|
+
+ LOG_DEBUG(("Sending PING to %s (exceeded idle by %dms)",
|
19
|
+
+ format_current_endpoint_info(zh),-send_to));
|
20
|
+
+ int rc=send_ping(zh);
|
21
|
+
+ if (rc < 0){
|
22
|
+
+ LOG_ERROR(("failed to send PING request (zk retcode=%d)",rc));
|
23
|
+
+ return api_epilog(zh,rc);
|
24
|
+
+ }
|
25
|
+
+ }
|
26
|
+
send_to = zh->recv_timeout/3;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
@@ -1669,6 +1671,12 @@
|
30
|
+
zh->next_deadline.tv_sec += zh->next_deadline.tv_usec / 1000000;
|
31
|
+
zh->next_deadline.tv_usec = zh->next_deadline.tv_usec % 1000000;
|
32
|
+
}
|
33
|
+
+
|
34
|
+
+ if (tv->tv_sec == 0 && tv->tv_usec == 0) {
|
35
|
+
+ LOG_DEBUG(("Returning a 0.0 timeval: state=%d idle_recv=%d idle_send=%d recv_to=%d send_to=%d send_requests=%s",
|
36
|
+
+ zh->state, idle_recv, idle_send, recv_to, send_to, zh->sent_requests.head==0 ? "false" : "true"));
|
37
|
+
+ }
|
38
|
+
+
|
39
|
+
*interest = ZOOKEEPER_READ;
|
40
|
+
/* we are interested in a write if we are connected and have something
|
41
|
+
* to send, or we are waiting for a connect to finish. */
|
Binary file
|
data/ext/zkrb.c
CHANGED
@@ -73,7 +73,7 @@
|
|
73
73
|
#include "ruby/io.h"
|
74
74
|
#endif
|
75
75
|
|
76
|
-
#include "
|
76
|
+
#include "zookeeper/zookeeper.h"
|
77
77
|
#include <errno.h>
|
78
78
|
#include <stdio.h>
|
79
79
|
#include <stdlib.h>
|
@@ -82,6 +82,7 @@
|
|
82
82
|
#include <pthread.h>
|
83
83
|
#include <inttypes.h>
|
84
84
|
#include <time.h>
|
85
|
+
#include <arpa/inet.h>
|
85
86
|
|
86
87
|
#include "common.h"
|
87
88
|
#include "event_lib.h"
|
@@ -242,7 +243,7 @@ static void print_zkrb_instance_data(zkrb_instance_data_t* ptr) {
|
|
242
243
|
fprintf(stderr, "}\n");
|
243
244
|
}
|
244
245
|
|
245
|
-
#define
|
246
|
+
#define receive_timeout_msec(self) rb_iv_get(self, "@_receive_timeout_msec")
|
246
247
|
|
247
248
|
inline static void zkrb_debug_clientid_t(const clientid_t *cid) {
|
248
249
|
int pass_len = sizeof(cid->passwd);
|
@@ -268,18 +269,28 @@ static VALUE method_zkrb_init(int argc, VALUE* argv, VALUE self) {
|
|
268
269
|
Check_Type(hostPort, T_STRING);
|
269
270
|
|
270
271
|
// Look up :zkc_log_level
|
271
|
-
VALUE log_level = rb_hash_aref(options, ID2SYM(rb_intern("zkc_log_level")));
|
272
|
-
if (NIL_P(log_level)) {
|
273
|
-
|
274
|
-
} else {
|
275
|
-
|
276
|
-
|
277
|
-
}
|
272
|
+
// VALUE log_level = rb_hash_aref(options, ID2SYM(rb_intern("zkc_log_level")));
|
273
|
+
// if (NIL_P(log_level)) {
|
274
|
+
// zoo_set_debug_level(0); // no log messages
|
275
|
+
// } else {
|
276
|
+
// Check_Type(log_level, T_FIXNUM);
|
277
|
+
// zoo_set_debug_level(FIX2INT(log_level));
|
278
|
+
// }
|
278
279
|
|
279
280
|
volatile VALUE data;
|
280
281
|
zkrb_instance_data_t *zk_local_ctx;
|
281
282
|
data = Data_Make_Struct(CZookeeper, zkrb_instance_data_t, 0, free_zkrb_instance_data, zk_local_ctx);
|
282
283
|
|
284
|
+
// Look up :session_id and :session_passwd
|
285
|
+
VALUE session_id = rb_hash_aref(options, ID2SYM(rb_intern("session_id")));
|
286
|
+
VALUE password = rb_hash_aref(options, ID2SYM(rb_intern("session_passwd")));
|
287
|
+
if (!NIL_P(session_id) && !NIL_P(password)) {
|
288
|
+
Check_Type(password, T_STRING);
|
289
|
+
|
290
|
+
zk_local_ctx->myid.client_id = NUM2LL(session_id);
|
291
|
+
strncpy(zk_local_ctx->myid.passwd, RSTRING_PTR(password), 16);
|
292
|
+
}
|
293
|
+
|
283
294
|
zk_local_ctx->queue = zkrb_queue_alloc();
|
284
295
|
|
285
296
|
if (zk_local_ctx->queue == NULL)
|
@@ -296,7 +307,7 @@ static VALUE method_zkrb_init(int argc, VALUE* argv, VALUE self) {
|
|
296
307
|
zookeeper_init(
|
297
308
|
RSTRING_PTR(hostPort), // const char *host
|
298
309
|
zkrb_state_callback, // watcher_fn
|
299
|
-
|
310
|
+
receive_timeout_msec(self), // recv_timeout
|
300
311
|
&zk_local_ctx->myid, // cilentid_t
|
301
312
|
ctx, // void *context
|
302
313
|
0); // flags
|
@@ -323,7 +334,7 @@ static VALUE method_get_children(VALUE self, VALUE reqid, VALUE path, VALUE asyn
|
|
323
334
|
struct String_vector strings;
|
324
335
|
struct Stat stat;
|
325
336
|
|
326
|
-
int rc;
|
337
|
+
int rc = 0;
|
327
338
|
switch (call_type) {
|
328
339
|
|
329
340
|
#ifdef THREADED
|
@@ -368,7 +379,7 @@ static VALUE method_exists(VALUE self, VALUE reqid, VALUE path, VALUE async, VAL
|
|
368
379
|
VALUE output = Qnil;
|
369
380
|
struct Stat stat;
|
370
381
|
|
371
|
-
int rc;
|
382
|
+
int rc = 0;
|
372
383
|
switch (call_type) {
|
373
384
|
|
374
385
|
#ifdef THREADED
|
@@ -444,7 +455,7 @@ static VALUE method_create(VALUE self, VALUE reqid, VALUE path, VALUE data, VALU
|
|
444
455
|
|
445
456
|
int invalid_call_type=0;
|
446
457
|
|
447
|
-
int rc;
|
458
|
+
int rc = 0;
|
448
459
|
switch (call_type) {
|
449
460
|
|
450
461
|
#ifdef THREADED
|
@@ -516,7 +527,7 @@ static VALUE method_get(VALUE self, VALUE reqid, VALUE path, VALUE async, VALUE
|
|
516
527
|
char * data = NULL;
|
517
528
|
if (IS_SYNC(call_type)) {
|
518
529
|
data = malloc(MAX_ZNODE_SIZE); /* ugh */
|
519
|
-
memset(data, 0,
|
530
|
+
memset(data, 0, MAX_ZNODE_SIZE);
|
520
531
|
}
|
521
532
|
|
522
533
|
int rc, invalid_call_type=0;
|
@@ -778,10 +789,10 @@ static VALUE method_zkrb_iterate_event_loop(VALUE self) {
|
|
778
789
|
fd_set rfds, wfds, efds;
|
779
790
|
FD_ZERO(&rfds); FD_ZERO(&wfds); FD_ZERO(&efds);
|
780
791
|
|
781
|
-
int fd=0, interest=0, events=0, rc=0, maxfd=0;
|
792
|
+
int fd = 0, interest = 0, events = 0, rc = 0, maxfd = 0, irc = 0, prc = 0;
|
782
793
|
struct timeval tv;
|
783
794
|
|
784
|
-
zookeeper_interest(zk->zh, &fd, &interest, &tv);
|
795
|
+
irc = zookeeper_interest(zk->zh, &fd, &interest, &tv);
|
785
796
|
|
786
797
|
if (fd != -1) {
|
787
798
|
if (interest & ZOOKEEPER_READ) {
|
@@ -824,17 +835,24 @@ static VALUE method_zkrb_iterate_event_loop(VALUE self) {
|
|
824
835
|
rb_raise(rb_eRuntimeError, "read from pipe failed: %s", clean_errno());
|
825
836
|
}
|
826
837
|
}
|
827
|
-
|
828
|
-
rc = zookeeper_process(zk->zh, events);
|
829
838
|
}
|
830
839
|
else if (rc == 0) {
|
831
|
-
zkrb_debug("timed out waiting for descriptor to be ready"
|
840
|
+
// zkrb_debug("timed out waiting for descriptor to be ready. interest=%d fd=%d pipe_r_fd=%d maxfd=%d irc=%d timeout=%f",
|
841
|
+
// interest, fd, pipe_r_fd, maxfd, irc, tv.tv_sec + (tv.tv_usec/ 1000.0 / 1000.0));
|
832
842
|
}
|
833
843
|
else {
|
834
|
-
log_err("select returned:
|
844
|
+
log_err("select returned an error: rc=%d interest=%d fd=%d pipe_r_fd=%d maxfd=%d irc=%d timeout=%f",
|
845
|
+
rc, interest, fd, pipe_r_fd, maxfd, irc, tv.tv_sec + (tv.tv_usec/ 1000.0 / 1000.0));
|
835
846
|
}
|
836
847
|
|
837
|
-
|
848
|
+
prc = zookeeper_process(zk->zh, events);
|
849
|
+
|
850
|
+
if (rc == 0) {
|
851
|
+
zkrb_debug("timed out waiting for descriptor to be ready. prc=%d interest=%d fd=%d pipe_r_fd=%d maxfd=%d irc=%d timeout=%f",
|
852
|
+
prc, interest, fd, pipe_r_fd, maxfd, irc, tv.tv_sec + (tv.tv_usec/ 1000.0 / 1000.0));
|
853
|
+
}
|
854
|
+
|
855
|
+
return INT2FIX(prc);
|
838
856
|
}
|
839
857
|
|
840
858
|
static VALUE method_has_events(VALUE self) {
|
@@ -918,6 +936,38 @@ static VALUE method_zerror(VALUE self, VALUE errc) {
|
|
918
936
|
return rb_str_new2(zerror(FIX2INT(errc)));
|
919
937
|
}
|
920
938
|
|
939
|
+
static VALUE method_connected_host(VALUE self) {
|
940
|
+
FETCH_DATA_PTR(self, zk);
|
941
|
+
|
942
|
+
struct sockaddr addr;
|
943
|
+
socklen_t addr_len = sizeof(addr);
|
944
|
+
|
945
|
+
if (zookeeper_get_connected_host(zk->zh, &addr, &addr_len) != NULL) {
|
946
|
+
char buf[255];
|
947
|
+
char addrstr[128];
|
948
|
+
void *inaddr;
|
949
|
+
int port;
|
950
|
+
|
951
|
+
#if defined(AF_INET6)
|
952
|
+
if(addr.sa_family==AF_INET6){
|
953
|
+
inaddr = &((struct sockaddr_in6 *) &addr)->sin6_addr;
|
954
|
+
port = ((struct sockaddr_in6 *) &addr)->sin6_port;
|
955
|
+
} else {
|
956
|
+
#endif
|
957
|
+
inaddr = &((struct sockaddr_in *) &addr)->sin_addr;
|
958
|
+
port = ((struct sockaddr_in *) &addr)->sin_port;
|
959
|
+
#if defined(AF_INET6)
|
960
|
+
}
|
961
|
+
#endif
|
962
|
+
|
963
|
+
inet_ntop(addr.sa_family, inaddr, addrstr, sizeof(addrstr)-1);
|
964
|
+
snprintf(buf, sizeof(buf), "%s:%d", addrstr, ntohs(port));
|
965
|
+
return rb_str_new2(buf);
|
966
|
+
}
|
967
|
+
|
968
|
+
return Qnil;
|
969
|
+
}
|
970
|
+
|
921
971
|
static void zkrb_define_methods(void) {
|
922
972
|
#define DEFINE_METHOD(M, ARGS) { \
|
923
973
|
rb_define_method(CZookeeper, #M, method_ ## M, ARGS); }
|
@@ -953,6 +1003,7 @@ static void zkrb_define_methods(void) {
|
|
953
1003
|
DEFINE_METHOD(sync, 2);
|
954
1004
|
DEFINE_METHOD(zkrb_iterate_event_loop, 0);
|
955
1005
|
DEFINE_METHOD(zkrb_get_next_event_st, 0);
|
1006
|
+
DEFINE_METHOD(connected_host, 0);
|
956
1007
|
|
957
1008
|
// methods for the ruby-side event manager
|
958
1009
|
DEFINE_METHOD(zkrb_get_next_event, 1);
|
@@ -985,7 +1036,9 @@ static VALUE zkrb_client_id_method_initialize(VALUE self) {
|
|
985
1036
|
|
986
1037
|
|
987
1038
|
void Init_zookeeper_c() {
|
1039
|
+
// Don't debug by default
|
988
1040
|
ZKRBDebugging = 0;
|
1041
|
+
zoo_set_debug_level(0);
|
989
1042
|
|
990
1043
|
mZookeeper = rb_define_module("Zookeeper");
|
991
1044
|
mZookeeperExceptions = rb_define_module_under(mZookeeper, "Exceptions");
|
data/ext/zkrb_wrapper.c
CHANGED
@@ -381,6 +381,30 @@ int zkrb_call_zoo_aset_acl(zhandle_t *zh, const char *path, int version, struct
|
|
381
381
|
}
|
382
382
|
|
383
383
|
|
384
|
+
static VALUE zkrb_gvl_zoo_amulti(void *data) {
|
385
|
+
zkrb_zoo_amulti_args_t *a = (zkrb_zoo_amulti_args_t *)data;
|
386
|
+
a->rc = zoo_amulti(a->zh, a->count, a->ops, a->results, a->completion, a->data);
|
387
|
+
return Qnil;
|
388
|
+
}
|
389
|
+
|
390
|
+
// wrapper that calls zoo_amulti via zkrb_gvl_zoo_amulti inside rb_thread_blocking_region
|
391
|
+
int zkrb_call_zoo_amulti(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results, void_completion_t completion, const void *data) {
|
392
|
+
zkrb_zoo_amulti_args_t args = {
|
393
|
+
.rc = ZKRB_FAIL,
|
394
|
+
.zh = zh,
|
395
|
+
.count = count,
|
396
|
+
.ops = ops,
|
397
|
+
.results = results,
|
398
|
+
.completion = completion,
|
399
|
+
.data = data
|
400
|
+
};
|
401
|
+
|
402
|
+
zkrb_thread_blocking_region(zkrb_gvl_zoo_amulti, (void *)&args);
|
403
|
+
|
404
|
+
return args.rc;
|
405
|
+
}
|
406
|
+
|
407
|
+
|
384
408
|
static VALUE zkrb_gvl_zoo_add_auth(void *data) {
|
385
409
|
zkrb_zoo_add_auth_args_t *a = (zkrb_zoo_add_auth_args_t *)data;
|
386
410
|
a->rc = zoo_add_auth(a->zh, a->scheme, a->cert, a->certLen, a->completion, a->data);
|
@@ -729,3 +753,23 @@ int zkrb_call_zoo_set_acl(zhandle_t *zh, const char *path, int version, const st
|
|
729
753
|
}
|
730
754
|
|
731
755
|
|
756
|
+
static VALUE zkrb_gvl_zoo_multi(void *data) {
|
757
|
+
zkrb_zoo_multi_args_t *a = (zkrb_zoo_multi_args_t *)data;
|
758
|
+
a->rc = zoo_multi(a->zh, a->count, a->ops, a->results);
|
759
|
+
return Qnil;
|
760
|
+
}
|
761
|
+
|
762
|
+
// wrapper that calls zoo_multi via zkrb_gvl_zoo_multi inside rb_thread_blocking_region
|
763
|
+
int zkrb_call_zoo_multi(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results) {
|
764
|
+
zkrb_zoo_multi_args_t args = {
|
765
|
+
.rc = ZKRB_FAIL,
|
766
|
+
.zh = zh,
|
767
|
+
.count = count,
|
768
|
+
.ops = ops,
|
769
|
+
.results = results
|
770
|
+
};
|
771
|
+
|
772
|
+
zkrb_thread_blocking_region(zkrb_gvl_zoo_multi, (void *)&args);
|
773
|
+
|
774
|
+
return args.rc;
|
775
|
+
}
|
data/ext/zkrb_wrapper.h
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
#endif
|
8
8
|
|
9
9
|
#include "ruby.h"
|
10
|
-
#include "
|
10
|
+
#include "zookeeper/zookeeper.h"
|
11
11
|
#include "zkrb_wrapper_compat.h"
|
12
12
|
#include "dbg.h"
|
13
13
|
|
@@ -157,6 +157,16 @@ typedef struct {
|
|
157
157
|
int rc;
|
158
158
|
} zkrb_zoo_aset_acl_args_t;
|
159
159
|
|
160
|
+
typedef struct {
|
161
|
+
zhandle_t *zh;
|
162
|
+
int count;
|
163
|
+
const zoo_op_t *ops;
|
164
|
+
zoo_op_result_t *results;
|
165
|
+
void_completion_t completion;
|
166
|
+
const void *data;
|
167
|
+
int rc;
|
168
|
+
} zkrb_zoo_amulti_args_t;
|
169
|
+
|
160
170
|
typedef struct {
|
161
171
|
zhandle_t *zh;
|
162
172
|
const char* scheme;
|
@@ -295,6 +305,14 @@ typedef struct {
|
|
295
305
|
int rc;
|
296
306
|
} zkrb_zoo_set_acl_args_t;
|
297
307
|
|
308
|
+
typedef struct {
|
309
|
+
zhandle_t *zh;
|
310
|
+
int count;
|
311
|
+
const zoo_op_t *ops;
|
312
|
+
zoo_op_result_t *results;
|
313
|
+
int rc;
|
314
|
+
} zkrb_zoo_multi_args_t;
|
315
|
+
|
298
316
|
int zkrb_call_zoo_recv_timeout(zhandle_t *zh);
|
299
317
|
int zkrb_call_zoo_state(zhandle_t *zh);
|
300
318
|
int zkrb_call_zoo_acreate(zhandle_t *zh, const char *path, const char *value, int valuelen, const struct ACL_vector *acl, int flags, string_completion_t completion, const void *data);
|
@@ -311,6 +329,7 @@ int zkrb_call_zoo_awget_children2(zhandle_t *zh, const char *path, watcher_fn wa
|
|
311
329
|
int zkrb_call_zoo_async(zhandle_t *zh, const char *path, string_completion_t completion, const void *data);
|
312
330
|
int zkrb_call_zoo_aget_acl(zhandle_t *zh, const char *path, acl_completion_t completion, const void *data);
|
313
331
|
int zkrb_call_zoo_aset_acl(zhandle_t *zh, const char *path, int version, struct ACL_vector *acl, void_completion_t completion, const void *data);
|
332
|
+
int zkrb_call_zoo_amulti(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results, void_completion_t completion, const void *data);
|
314
333
|
int zkrb_call_zoo_add_auth(zhandle_t *zh, const char* scheme, const char* cert, int certLen, void_completion_t completion, const void *data);
|
315
334
|
int zkrb_call_zoo_create(zhandle_t *zh, const char *path, const char *value, int valuelen, const struct ACL_vector *acl, int flags, char *path_buffer, int path_buffer_len);
|
316
335
|
int zkrb_call_zoo_delete(zhandle_t *zh, const char *path, int version);
|
@@ -326,5 +345,6 @@ int zkrb_call_zoo_get_children2(zhandle_t *zh, const char *path, int watch, stru
|
|
326
345
|
int zkrb_call_zoo_wget_children2(zhandle_t *zh, const char *path, watcher_fn watcher, void* watcherCtx, struct String_vector *strings, struct Stat *stat);
|
327
346
|
int zkrb_call_zoo_get_acl(zhandle_t *zh, const char *path, struct ACL_vector *acl, struct Stat *stat);
|
328
347
|
int zkrb_call_zoo_set_acl(zhandle_t *zh, const char *path, int version, const struct ACL_vector *acl);
|
348
|
+
int zkrb_call_zoo_multi(zhandle_t *zh, int count, const zoo_op_t *ops, zoo_op_result_t *results);
|
329
349
|
|
330
350
|
#endif /* ZKRB_WRAPPER_H */
|
data/ext/zookeeper_base.rb
CHANGED
@@ -27,7 +27,8 @@ class ZookeeperBase
|
|
27
27
|
ZOO_LOG_LEVEL_DEBUG = 4
|
28
28
|
|
29
29
|
def_delegators :czk, :get_children, :exists, :delete, :get, :set,
|
30
|
-
:set_acl, :get_acl, :client_id, :sync, :add_auth, :wait_until_connected
|
30
|
+
:set_acl, :get_acl, :client_id, :sync, :add_auth, :wait_until_connected,
|
31
|
+
:connected_host
|
31
32
|
|
32
33
|
def self.threadsafe_inquisitor(*syms)
|
33
34
|
syms.each do |sym|
|
@@ -40,7 +41,8 @@ class ZookeeperBase
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
43
|
-
threadsafe_inquisitor :connected?, :connecting?, :associating?, :running
|
44
|
+
threadsafe_inquisitor :connected?, :connecting?, :associating?, :running?,
|
45
|
+
:shutting_down?
|
44
46
|
|
45
47
|
attr_reader :event_queue
|
46
48
|
|
@@ -60,14 +62,14 @@ class ZookeeperBase
|
|
60
62
|
end
|
61
63
|
private :reopen_after_fork!
|
62
64
|
|
63
|
-
def reopen(timeout = 10, watcher=nil)
|
65
|
+
def reopen(timeout = 10, watcher=nil, opts = {})
|
64
66
|
raise "You cannot set the watcher to a different value this way anymore!" if watcher
|
65
67
|
|
66
68
|
reopen_after_fork! if forked?
|
67
69
|
|
68
70
|
@mutex.synchronize do
|
69
71
|
@czk.close if @czk
|
70
|
-
@czk = CZookeeper.new(@host, @event_queue)
|
72
|
+
@czk = CZookeeper.new(@host, @event_queue, opts)
|
71
73
|
|
72
74
|
# flushes all outstanding watcher reqs.
|
73
75
|
@req_registry.clear_watchers!
|
@@ -79,7 +81,7 @@ class ZookeeperBase
|
|
79
81
|
state
|
80
82
|
end
|
81
83
|
|
82
|
-
def initialize(host, timeout = 10, watcher=nil)
|
84
|
+
def initialize(host, timeout = 10, watcher=nil, opts = {})
|
83
85
|
# approximate the java behavior of raising java.lang.IllegalArgumentException if the host
|
84
86
|
# argument ends with '/'
|
85
87
|
raise ArgumentError, "Host argument #{host.inspect} may not end with /" if host.end_with?('/')
|
@@ -97,7 +99,7 @@ class ZookeeperBase
|
|
97
99
|
|
98
100
|
yield self if block_given?
|
99
101
|
|
100
|
-
reopen(timeout)
|
102
|
+
reopen(timeout, nil, opts)
|
101
103
|
end
|
102
104
|
|
103
105
|
# if either of these happen, the user will need to renegotiate a connection via reopen
|
data/java/java_base.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require 'java'
|
2
2
|
require 'thread'
|
3
|
-
require 'rubygems'
|
4
3
|
|
5
|
-
|
6
|
-
gem 'slyphon-
|
4
|
+
# require 'rubygems'
|
5
|
+
# gem 'slyphon-log4j', '= 1.2.15'
|
6
|
+
# gem 'zk-ruby-zookeeper_jar', "= #{Zookeeper::DRIVER_VERSION}"
|
7
7
|
|
8
8
|
require 'log4j'
|
9
9
|
require 'zookeeper_jar'
|
@@ -182,13 +182,13 @@ class JavaBase
|
|
182
182
|
|
183
183
|
attr_reader :event_queue
|
184
184
|
|
185
|
-
def reopen(timeout=10, watcher=nil)
|
185
|
+
def reopen(timeout=10, watcher=nil, opts = {})
|
186
186
|
# watcher ||= @default_watcher
|
187
187
|
|
188
188
|
@mutex.synchronize do
|
189
189
|
@req_registry.clear_watchers!
|
190
190
|
|
191
|
-
replace_jzk!
|
191
|
+
replace_jzk!(opts)
|
192
192
|
wait_until_connected
|
193
193
|
end
|
194
194
|
|
@@ -220,7 +220,7 @@ class JavaBase
|
|
220
220
|
# allows connected-state handlers to be registered before
|
221
221
|
yield self if block_given?
|
222
222
|
|
223
|
-
reopen(timeout)
|
223
|
+
reopen(timeout, nil, options)
|
224
224
|
return nil unless connected?
|
225
225
|
@_running = true
|
226
226
|
setup_dispatch_thread!
|
@@ -283,8 +283,9 @@ class JavaBase
|
|
283
283
|
[Code::Ok, nil, nil] # the 'nil, nil' isn't strictly necessary here
|
284
284
|
else # sync
|
285
285
|
stat = JZKD::Stat.new
|
286
|
-
data = String.from_java_bytes(jzk.getData(path, watch_cb, stat))
|
287
286
|
|
287
|
+
value = jzk.getData(path, watch_cb, stat)
|
288
|
+
data = String.from_java_bytes(value) unless value.nil?
|
288
289
|
[Code::Ok, data, stat.to_hash]
|
289
290
|
end
|
290
291
|
end
|
@@ -487,9 +488,13 @@ class JavaBase
|
|
487
488
|
}
|
488
489
|
end
|
489
490
|
|
490
|
-
def replace_jzk!
|
491
|
+
def replace_jzk!(opts = {})
|
491
492
|
orig_jzk = @jzk
|
492
|
-
|
493
|
+
if opts.has_key?(:session_id) && opts.has_key(:session_passwd)
|
494
|
+
@jzk = JZK::ZooKeeper.new(@host, DEFAULT_SESSION_TIMEOUT, JavaCB::WatcherCallback.new(event_queue, :client => self), opts.fetch(:session_id), opts.fetch(:session_passwd).to_java_bytes)
|
495
|
+
else
|
496
|
+
@jzk = JZK::ZooKeeper.new(@host, DEFAULT_SESSION_TIMEOUT, JavaCB::WatcherCallback.new(event_queue, :client => self))
|
497
|
+
end
|
493
498
|
ensure
|
494
499
|
orig_jzk.close if orig_jzk
|
495
500
|
end
|