zookeeper 1.4.7-java → 1.4.8-java

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,4 +1,8 @@
1
- v1.4.7
1
+ v1.4.8
2
+
3
+ * Fix deadlock related to state checks that can happen during reconnecting
4
+
5
+ v1.4.7
2
6
 
3
7
  * Fixing dependent library compilation on FreeBSD 10 #53 (h/t: gogreen53)
4
8
 
@@ -26,7 +30,7 @@ v1.4.5
26
30
 
27
31
  v1.4.4 fix build under FreeBSD (h/t: stass)
28
32
 
29
- * https://github.com/slyphon/zookeeper/pull/40
33
+ * https://github.com/slyphon/zookeeper/pull/40
30
34
 
31
35
  v1.4.3 fix build for ruby 2.0.0-rc2
32
36
 
@@ -59,8 +63,8 @@ v1.2.14 merge add_auth pull request, reduce chances for ContinuationTimeoutError
59
63
  * added support for the add_auth call (h/t: @bradhe) see pull req #25
60
64
 
61
65
  * fix a corner case where some pending Continuations may get stuck without
62
- being shutdown when the event thread exits. This would lead to a
63
- ContinuationTimeoutError being raised after 30s as a failsafe.
66
+ being shutdown when the event thread exits. This would lead to a
67
+ ContinuationTimeoutError being raised after 30s as a failsafe.
64
68
 
65
69
  v1.2.13 fix build under rbenv
66
70
 
@@ -80,7 +84,7 @@ v1.2.11 remove dependency on backports gem
80
84
  We apologise for the inconvenience.
81
85
 
82
86
  v1.2.10 minor bug fix in java code
83
-
87
+
84
88
  * Don't obscure a legitimate exception because of an unexpected nil
85
89
 
86
90
  v1.2.7 further lock adjustments, deadlock risk reduction
@@ -94,7 +98,7 @@ v1.2.7 further lock adjustments, deadlock risk reduction
94
98
  the case of an unforseen condition.
95
99
 
96
100
  * Improve the CZookeeper#wait_until_connected to use a deadline approach
97
- to waiting for both running and connected states. Also, handle the
101
+ to waiting for both running and connected states. Also, handle the
98
102
  'nil' (wait forever) timeout properly.
99
103
 
100
104
  * Wake all waiting threads on all ConditionVariables when CZookeeper#shut_down!
@@ -109,26 +113,26 @@ v1.2.5 cleanup locking in ZookeeperBase
109
113
  exposed us to deadlocks in situations where an async event would be
110
114
  delivered (probably a SESSION_EXPIRED event), but the callback block could
111
115
  not be called because the dispatch thread would block on the mutex being
112
- held by the caller of create.
116
+ held by the caller of create.
113
117
 
114
118
  This version cleans up that usage, and ensures that the only time we hold
115
119
  the mutex is during startup/shutdown (when the value of @czk may be changing),
116
120
  and in all other cases we grab the mutex, dereference, and unlock then perform
117
- whatever action on the reference.
121
+ whatever action on the reference.
118
122
 
119
123
  * Add a safety net to Continuation (which will soon be called 'Promise' or
120
124
  'Future' at the request of @eric). If any operation takes more than 30s
121
125
  an exception will be raised in the calling thread. The session timeout
122
126
  setting makes it so that no operation should take more than 20s, so we know
123
127
  if we haven't received a reply in *longer* than that, something has gone
124
- awry.
128
+ awry.
125
129
 
126
130
  v1.2.4 fix buffer overflow in CZookeeper client_id code
127
-
131
+
128
132
  * the 'passwd' part of the struct is a char[16], but isn't null terminated.
129
133
  use rb_str_new with an explicit length, rather than rb_str_new2 which
130
134
  uses strlen().
131
-
135
+
132
136
  v1.2.3 ensure that all threads are woken up on shutdown
133
137
 
134
138
  * There was an edge case where a call would be queued up and its thread
@@ -154,7 +158,7 @@ v1.2.1 simplify assert_open
154
158
  action. This was meant as a fail-early lightweight check of the connection
155
159
  state and it worked well when we were running against the mt code. Now this
156
160
  requires us to use a Continuation and make our way through the event loop.
157
- There is a possible deadlock this release should solve that was caused by
161
+ There is a possible deadlock this release should solve that was caused by
158
162
  the assert_open code holding a lock while making an async call through
159
163
  the event loop. This is no longer the case. The assert_open call only checks
160
164
  that the current handle hasn't been closed, the connection-state checking
@@ -168,7 +172,7 @@ v1.2.0 Stop the World, I Wanna fork()
168
172
  and resume_after_fork_in_parent to match their ZK counterparts
169
173
 
170
174
  * replaced the Queue in QueueWithPipe (really have to change that name)
171
- with an Array and Mutex/ConditionVariable pair. This allows us to
175
+ with an Array and Mutex/ConditionVariable pair. This allows us to
172
176
  have better control over the shutdown signaling, and lets us resume
173
177
  operations after a pause.
174
178
 
@@ -194,7 +198,7 @@ v1.1.0 Rewrite C backend to use zookeeper_st, the async library
194
198
  be held by a thread when fork() was called, which opened up the possibility
195
199
  for corruption and other badness.
196
200
 
197
- This version contains a Continuation class, which allows us to present a
201
+ This version contains a Continuation class, which allows us to present a
198
202
  synchronous front-end to the asynchronous backend. All features are still
199
203
  supported, no special action is necessary to prepare for a fork, and the
200
204
  post-fork procedure is the same as before: call reopen() in the child,
@@ -240,14 +244,14 @@ v1.0.0 Single Zookeeper namespace
240
244
 
241
245
  * Java and C now use different names for the base class, to avoid the
242
246
  possibility of error. Java is now JavaBase, C remains ZookeeperBase.
243
-
247
+
244
248
  * All client methods are defined in the ClientMethods module and mixed
245
249
  into the constructed Client class.
246
250
 
247
251
  * Fix all requires, no longer monkey with $LOAD_PATH, use require_relative
248
252
 
249
- * Bugfix for C client.
250
-
253
+ * Bugfix for C client.
254
+
251
255
  Because we release the GIL, there's the possibilty that in the middle of a
252
256
  synchronous C call, ruby will have switched thread contexts and one of
253
257
  those threads will call close. It seems that during normal operation, this
@@ -277,20 +281,20 @@ v0.9.0 RELEASE THE KRAK..er, GIL!!
277
281
 
278
282
  * In >= 1.9.2 the ruby interpreter allows you to release the GIL when
279
283
  calling into native code, sounds like a good idea.
280
-
284
+
281
285
  This release makes use of that code by parsing the zookeeper.h header file
282
286
  and extracting the method signatures of all relevant zoo_* functions, then
283
287
  generating boilerplate that allows us to call those functions via the
284
288
  rb_thread_blocking_region function.
285
289
 
286
290
  1.8.7 compatibility is maintained by stubbing out that functionality if built
287
- under 1.8.7.
291
+ under 1.8.7.
288
292
 
289
293
  * 1.8.7 is deprecated! I will continue to support 1.8.7 for the near future
290
294
  but sometime soon, you're gonna have to upgrade.
291
295
 
292
296
  v0.8.4 fix NameError, require 'forwardable'
293
-
297
+
294
298
  * Really not sure why this didn't come up in tests
295
299
 
296
300
  * issue here https://github.com/slyphon/zk/issues/22
@@ -310,7 +314,7 @@ v0.8.3 fix NonLocalJump exception in event delivery thread shutdown code
310
314
 
311
315
  v0.8.2 fix close after a fork()
312
316
 
313
- * The dispatch thread will be dead in this situation, so we need to
317
+ * The dispatch thread will be dead in this situation, so we need to
314
318
  check to see if it's already dead before waiting on it to exit.
315
319
 
316
320
  v0.8.1 Java client fix, silence warnings
@@ -318,20 +322,20 @@ v0.8.1 Java client fix, silence warnings
318
322
  v0.8.0 Refactor C implementaion, EventMachine client
319
323
 
320
324
  * separated CZookeeper and ZookeeperBase implementation
321
-
325
+
322
326
  This solves issues with reopen not working properly, makes for a much
323
327
  cleaner event delivery implementation. ZookeeperBase controls the lifecycle
324
328
  of the event dispatch thread now, rather than it being tied to CZookeeper.
325
-
329
+
326
330
  * added support for the 'sync' API call
327
-
331
+
328
332
  * Refactored zookeeper_c.c and zookeeper_lib.c
329
-
333
+
330
334
  More error checking in zookeeper_lib.c and restructure some things to make
331
335
  logic easier to follow
332
-
336
+
333
337
  Fix bug in method_get_next_event that made the shutdown case so complicated
334
-
338
+
335
339
  * Massively simplified EMClient implementation
336
340
 
337
341
  Rather than trying to hook the IO used by zookeeper_lib to notify zookeeper_c
data/ext/c_zookeeper.rb CHANGED
@@ -73,7 +73,8 @@ class CZookeeper
73
73
  @running_cond = @mutex.new_cond
74
74
 
75
75
  # used to signal we've received the connected event
76
- @state_cond = @mutex.new_cond
76
+ @state_mutex = Monitor.new
77
+ @state_cond = @state_mutex.new_cond
77
78
 
78
79
  # the current state of the connection
79
80
  @state = ZOO_CLOSED_STATE
@@ -120,14 +121,6 @@ class CZookeeper
120
121
  state == ZOO_ASSOCIATING_STATE
121
122
  end
122
123
 
123
- def unhealthy?
124
- @_closed || @_shutting_down || is_unrecoverable
125
- end
126
-
127
- def healthy?
128
- !unhealthy?
129
- end
130
-
131
124
  def close
132
125
  return if closed?
133
126
 
@@ -172,7 +165,7 @@ class CZookeeper
172
165
 
173
166
  def state
174
167
  return ZOO_CLOSED_STATE if closed?
175
- @mutex.synchronize { @state }
168
+ @state_mutex.synchronize { @state }
176
169
  end
177
170
 
178
171
  # this implementation is gross, but i don't really see another way of doing it
@@ -187,7 +180,7 @@ class CZookeeper
187
180
 
188
181
  return false unless wait_until_running(timeout)
189
182
 
190
- @mutex.synchronize do
183
+ @state_mutex.synchronize do
191
184
  while true
192
185
  if timeout
193
186
  now = Time.now
@@ -205,6 +198,20 @@ class CZookeeper
205
198
  end
206
199
 
207
200
  private
201
+ # This method is NOT SYNCHRONIZED!
202
+ #
203
+ # you must hold the @mutex lock while calling this method
204
+ def unhealthy?
205
+ @_closed || @_shutting_down || is_unrecoverable
206
+ end
207
+
208
+ # This method is NOT SYNCHRONIZED!
209
+ #
210
+ # you must hold the @mutex lock while calling this method
211
+ def healthy?
212
+ !unhealthy?
213
+ end
214
+
208
215
  # submits a job for processing
209
216
  # blocks the caller until result has returned
210
217
  def submit_and_block(meth, *args)
@@ -227,6 +234,8 @@ class CZookeeper
227
234
  # this method is part of the reopen/close code, and is responsible for
228
235
  # shutting down the dispatch thread.
229
236
  #
237
+ # this method must be EXTERNALLY SYNCHRONIZED!
238
+ #
230
239
  # @event_thread will be nil when this method exits
231
240
  #
232
241
  def stop_event_thread
@@ -329,8 +338,8 @@ class CZookeeper
329
338
  if (hash[:req_id] == ZKRB_GLOBAL_CB_REQ) && (hash[:type] == -1)
330
339
  ev_state = hash[:state]
331
340
 
332
- if @state != ev_state
333
- @mutex.synchronize do
341
+ @state_mutex.synchronize do
342
+ if @state != ev_state
334
343
  @state = ev_state
335
344
  @state_cond.broadcast
336
345
  end
@@ -368,9 +377,12 @@ class CZookeeper
368
377
  @mutex.synchronize do
369
378
  @_shutting_down = true
370
379
  # ollie ollie oxen all home free!
371
- @state_cond.broadcast
372
380
  @running_cond.broadcast
373
381
  end
382
+
383
+ @state_mutex.synchronize do
384
+ @state_cond.broadcast
385
+ end
374
386
  end
375
387
 
376
388
  # called by underlying C code to signal we're running
@@ -1,4 +1,4 @@
1
1
  module Zookeeper
2
- VERSION = '1.4.7'
2
+ VERSION = '1.4.8'
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.7
4
+ version: 1.4.8
5
5
  prerelease:
6
6
  platform: java
7
7
  authors:
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2013-11-07 00:00:00.000000000 Z
17
+ date: 2014-01-16 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: slyphon-log4j
@@ -188,4 +188,3 @@ test_files:
188
188
  - spec/support/progress_formatter.rb
189
189
  - spec/support/zookeeper_spec_helpers.rb
190
190
  - spec/zookeeper_spec.rb
191
- has_rdoc: