zookeeper 1.4.10-java → 1.4.11-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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZmUxY2Y2ZGM0MzM4MzA0MTYyYWE0ODVmNzgwNDhmMzgxZGIyYWM5ZA==
4
+ ZDViMzg5YTZiNzUzM2IwMTJlZDI2YTA4ZWUwODBiNDdkNTIxZDUxNg==
5
5
  data.tar.gz: !binary |-
6
- NTg0ZjdhODRhMzkxMGFlOWYwNDZmYTcwMmVhYzdjZTg2OTNmYjQ2Mw==
6
+ MzJjNjQyNTZjZmNkMDgyZTdmOTJjMDhhOWQ2ZjY3ZWVlYWQ1NzgzYg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MTIzMzQwNjUxMTExMTQ4OWZhM2ZlZjNmODRkNDhhMGI5MTkwZWYzZDU5OThi
10
- YTQ2ZTA1OTFmNDU1OWNjMTM2ZGI5OTk2OGE1MDk3MWZlNjEyNDEwZGFiZWNl
11
- YTdkOTZmZmYwNjAxMThhNjQ3NmE3YmQ3ZWVlMjNkMzg2NWIxYmQ=
9
+ MzU5YzkzYzk1MDNlMTAyOTZjODc4ZTdkODA3MWNlZTU2MjZlYTRlOTUxZWMz
10
+ MjFjNjM2NTY0OGY1NjA1YzQ5MzY3NmZkZWQxMzM3MWFmZWFiNjRlNTZlYzFi
11
+ OTcwMDA1NjA2MzI3M2RmMDE5NDA3MGVkY2IzZjdhZDIwZjBhMGI=
12
12
  data.tar.gz: !binary |-
13
- MzIwMGViM2Y4ZWYyNzYzOWFmNjNjNTIyZGM1ODJhOWI2Mzk4MGFjYWE0OTg1
14
- ZjhjYWVkZWIxMjFlYmIyOWIzMzYwZDFlZTljNzAwM2FhOTkwNWU0MGExYTYw
15
- ZmE2OTA3MzRlNjgzYzA2Y2I0MDViZDRjMDMyYzU2ZjIxNDYyMWE=
13
+ YWIxMGQ0ZWU3NTk5NDE5Y2QyYmRlMTE4NmUzYmZiZThkM2ZmZmM3OWM3ZjQx
14
+ MTUwMjg0ODgyMWQyNjAzYzk0YmFiNWU0NGIyZGEwZjYyNGEwYTllZjVjMTk3
15
+ ZWFiMTRkZGVhMzQ5NDViNjNkYTM2YTY2ZjJkYjdmYzE0MjIxODE=
data/CHANGELOG CHANGED
@@ -1,3 +1,10 @@
1
+ v1.4.11
2
+ * backported fix for ZOOKEEPER-2253 by @chchen - #76
3
+
4
+ v1.4.10
5
+
6
+ * fix for ruby 2.2.0 build - #74 (h/t: fbernier)
7
+
1
8
  v1.4.9
2
9
 
3
10
  * Fix for build on OS-X 10.10 by @e0en
data/ext/extconf.rb CHANGED
@@ -89,7 +89,9 @@ Dir.chdir("#{HERE}/lib") do
89
89
  end
90
90
  end
91
91
  end
92
- $LIBS << " -lzookeeper_st_gem"
92
+
93
+ # -lm must come after lzookeeper_st_gem to ensure proper link
94
+ $LIBS << " -lzookeeper_st_gem -lm"
93
95
 
94
96
  have_func('rb_thread_blocking_region')
95
97
  have_func('rb_thread_fd_select')
@@ -0,0 +1,163 @@
1
+ diff --git zkc-3.4.5-orig/c/src/zookeeper.c zkc-3.4.5/c/src/zookeeper.c
2
+ index de58c62..2347ff4 100644
3
+ --- zkc-3.4.5-orig/c/src/zookeeper.c
4
+ +++ zkc-3.4.5/c/src/zookeeper.c
5
+ @@ -1167,25 +1167,20 @@ void free_completions(zhandle_t *zh,int callCompletion,int reason)
6
+ zh->outstanding_sync--;
7
+ destroy_completion_entry(cptr);
8
+ } else if (callCompletion) {
9
+ - if(cptr->xid == PING_XID){
10
+ - // Nothing to do with a ping response
11
+ - destroy_completion_entry(cptr);
12
+ - } else {
13
+ - // Fake the response
14
+ - buffer_list_t *bptr;
15
+ - h.xid = cptr->xid;
16
+ - h.zxid = -1;
17
+ - h.err = reason;
18
+ - oa = create_buffer_oarchive();
19
+ - serialize_ReplyHeader(oa, "header", &h);
20
+ - bptr = calloc(sizeof(*bptr), 1);
21
+ - assert(bptr);
22
+ - bptr->len = get_buffer_len(oa);
23
+ - bptr->buffer = get_buffer(oa);
24
+ - close_buffer_oarchive(&oa, 0);
25
+ - cptr->buffer = bptr;
26
+ - queue_completion(&zh->completions_to_process, cptr, 0);
27
+ - }
28
+ + // Fake the response
29
+ + buffer_list_t *bptr;
30
+ + h.xid = cptr->xid;
31
+ + h.zxid = -1;
32
+ + h.err = reason;
33
+ + oa = create_buffer_oarchive();
34
+ + serialize_ReplyHeader(oa, "header", &h);
35
+ + bptr = calloc(sizeof(*bptr), 1);
36
+ + assert(bptr);
37
+ + bptr->len = get_buffer_len(oa);
38
+ + bptr->buffer = get_buffer(oa);
39
+ + close_buffer_oarchive(&oa, 0);
40
+ + cptr->buffer = bptr;
41
+ + queue_completion(&zh->completions_to_process, cptr, 0);
42
+ }
43
+ }
44
+ a_list.completion = NULL;
45
+ @@ -1526,7 +1521,6 @@ static struct timeval get_timeval(int interval)
46
+ rc = serialize_RequestHeader(oa, "header", &h);
47
+ enter_critical(zh);
48
+ gettimeofday(&zh->last_ping, 0);
49
+ - rc = rc < 0 ? rc : add_void_completion(zh, h.xid, 0, 0);
50
+ rc = rc < 0 ? rc : queue_buffer_bytes(&zh->to_send, get_buffer(oa),
51
+ get_buffer_len(oa));
52
+ leave_critical(zh);
53
+ @@ -2063,12 +2057,8 @@ static void deserialize_response(int type, int xid, int failed, int rc, completi
54
+ case COMPLETION_VOID:
55
+ LOG_DEBUG(("Calling COMPLETION_VOID for xid=%#x failed=%d rc=%d",
56
+ cptr->xid, failed, rc));
57
+ - if (xid == PING_XID) {
58
+ - // We want to skip the ping
59
+ - } else {
60
+ - assert(cptr->c.void_result);
61
+ - cptr->c.void_result(rc, cptr->data);
62
+ - }
63
+ + assert(cptr->c.void_result);
64
+ + cptr->c.void_result(rc, cptr->data);
65
+ break;
66
+ case COMPLETION_MULTI:
67
+ LOG_DEBUG(("Calling COMPLETION_MULTI for xid=%#x failed=%d rc=%d",
68
+ @@ -2184,7 +2174,15 @@ int zookeeper_process(zhandle_t *zh, int events)
69
+ // fprintf(stderr, "Got %#x for %#x\n", hdr.zxid, hdr.xid);
70
+ }
71
+
72
+ - if (hdr.xid == WATCHER_EVENT_XID) {
73
+ + if (hdr.xid == PING_XID) {
74
+ + // Ping replies can arrive out-of-order
75
+ + int elapsed = 0;
76
+ + struct timeval now;
77
+ + gettimeofday(&now, 0);
78
+ + elapsed = calculate_interval(&zh->last_ping, &now);
79
+ + LOG_DEBUG(("Got ping response in %d ms", elapsed));
80
+ + free_buffer(bptr);
81
+ + } else if (hdr.xid == WATCHER_EVENT_XID) {
82
+ struct WatcherEvent evt;
83
+ int type = 0;
84
+ char *path = NULL;
85
+ @@ -2250,22 +2248,9 @@ int zookeeper_process(zhandle_t *zh, int events)
86
+ activateWatcher(zh, cptr->watcher, rc);
87
+
88
+ if (cptr->c.void_result != SYNCHRONOUS_MARKER) {
89
+ - if(hdr.xid == PING_XID){
90
+ - int elapsed = 0;
91
+ - struct timeval now;
92
+ - gettimeofday(&now, 0);
93
+ - elapsed = calculate_interval(&zh->last_ping, &now);
94
+ - LOG_DEBUG(("Got ping response in %d ms", elapsed));
95
+ -
96
+ - // Nothing to do with a ping response
97
+ - free_buffer(bptr);
98
+ - destroy_completion_entry(cptr);
99
+ - } else {
100
+ - LOG_DEBUG(("Queueing asynchronous response"));
101
+ -
102
+ - cptr->buffer = bptr;
103
+ - queue_completion(&zh->completions_to_process, cptr, 0);
104
+ - }
105
+ + LOG_DEBUG(("Queueing asynchronous response"));
106
+ + cptr->buffer = bptr;
107
+ + queue_completion(&zh->completions_to_process, cptr, 0);
108
+ } else {
109
+ struct sync_completion
110
+ *sc = (struct sync_completion*)cptr->data;
111
+ diff --git zkc-3.4.5-orig/c/tests/TestOperations.cc zkc-3.4.5/c/tests/TestOperations.cc
112
+ index b0370e9..27d9270 100644
113
+ --- zkc-3.4.5-orig/c/tests/TestOperations.cc
114
+ +++ zkc-3.4.5/c/tests/TestOperations.cc
115
+ @@ -29,6 +29,7 @@ class Zookeeper_operations : public CPPUNIT_NS::TestFixture
116
+ CPPUNIT_TEST_SUITE(Zookeeper_operations);
117
+ #ifndef THREADED
118
+ CPPUNIT_TEST(testPing);
119
+ + CPPUNIT_TEST(testUnsolicitedPing);
120
+ CPPUNIT_TEST(testTimeoutCausedByWatches1);
121
+ CPPUNIT_TEST(testTimeoutCausedByWatches2);
122
+ #else
123
+ @@ -305,6 +306,40 @@ public:
124
+ CPPUNIT_ASSERT_EQUAL(1,zkServer.pingCount_);
125
+ }
126
+
127
+ + // ZOOKEEPER-2253: Permit unsolicited pings
128
+ + void testUnsolicitedPing()
129
+ + {
130
+ + const int TIMEOUT=9; // timeout in secs
131
+ + Mock_gettimeofday timeMock;
132
+ + PingCountingServer zkServer;
133
+ + // must call zookeeper_close() while all the mocks are in scope
134
+ + CloseFinally guard(&zh);
135
+ +
136
+ + // receive timeout is in milliseconds
137
+ + zh=zookeeper_init("localhost:1234",watcher,TIMEOUT*1000,TEST_CLIENT_ID,0,0);
138
+ + CPPUNIT_ASSERT(zh!=0);
139
+ + // simulate connected state
140
+ + forceConnected(zh);
141
+ +
142
+ + int fd=0;
143
+ + int interest=0;
144
+ + timeval tv;
145
+ +
146
+ + int rc=zookeeper_interest(zh,&fd,&interest,&tv);
147
+ + CPPUNIT_ASSERT_EQUAL((int)ZOK,rc);
148
+ +
149
+ + // verify no ping sent
150
+ + CPPUNIT_ASSERT(zkServer.pingCount_==0);
151
+ +
152
+ + // we're going to receive a unsolicited PING response; ensure
153
+ + // that the client has updated its last_recv timestamp
154
+ + timeMock.tick(tv);
155
+ + zkServer.addRecvResponse(new PingResponse);
156
+ + rc=zookeeper_process(zh,interest);
157
+ + CPPUNIT_ASSERT_EQUAL((int)ZOK,rc);
158
+ + CPPUNIT_ASSERT(timeMock==zh->last_recv);
159
+ + }
160
+ +
161
+ // simulate a watch arriving right before a ping is due
162
+ // assert the ping is sent nevertheless
163
+ void testTimeoutCausedByWatches1()
@@ -1,4 +1,4 @@
1
1
  module Zookeeper
2
- VERSION = '1.4.10'
2
+ VERSION = '1.4.11'
3
3
  DRIVER_VERSION = '3.4.5'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zookeeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.10
4
+ version: 1.4.11
5
5
  platform: java
6
6
  authors:
7
7
  - Phillip Pearson
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2015-01-12 00:00:00.000000000 Z
16
+ date: 2015-09-28 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: slyphon-log4j
@@ -88,6 +88,7 @@ files:
88
88
  - ext/generate_gvl_code.rb
89
89
  - ext/patches/zkc-3.3.5-network.patch
90
90
  - ext/patches/zkc-3.4.5-logging.patch
91
+ - ext/patches/zkc-3.4.5-out-of-order-ping.patch
91
92
  - ext/patches/zkc-3.4.5-yosemite-htonl-fix.patch
92
93
  - ext/zkc-3.4.5.tar.gz
93
94
  - ext/zkrb.c
@@ -161,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
162
  version: '0'
162
163
  requirements: []
163
164
  rubyforge_project:
164
- rubygems_version: 2.4.5
165
+ rubygems_version: 2.2.2
165
166
  signing_key:
166
167
  specification_version: 4
167
168
  summary: Apache ZooKeeper driver for Rubies