zookeeper 1.1.2 → 1.1.3

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,3 +1,5 @@
1
+ v1.1.2 backport change from 1.2.1: make assert_open more sane
2
+
1
3
  v1.1.1 Cleanup after code review (h/t @eric)
2
4
 
3
5
  * While hunting down this bug: https://bugs.ruby-lang.org/issues/6438
@@ -117,8 +117,7 @@ class ZookeeperBase
117
117
  # if either of these happen, the user will need to renegotiate a connection via reopen
118
118
  def assert_open
119
119
  @mutex.synchronize do
120
- raise Exceptions::SessionExpired if state == ZOO_EXPIRED_SESSION_STATE
121
- raise Exceptions::NotConnected unless connected?
120
+ raise Exceptions::NotConnected if closed?
122
121
  if forked?
123
122
  raise InheritedConnectionError, <<-EOS.gsub(/(?:^|\n)\s*/, ' ').strip
124
123
  You tried to use a connection inherited from another process
@@ -82,6 +82,9 @@ module Zookeeper
82
82
  @mutex = Mutex.new
83
83
  @cond = ConditionVariable.new
84
84
  @rval = nil
85
+
86
+ # make this error reporting more robust if necessary, right now, just set to state
87
+ @error = nil
85
88
 
86
89
  # set to true when an event occurs that would cause the caller to
87
90
  # otherwise block forever
@@ -90,9 +93,17 @@ module Zookeeper
90
93
 
91
94
  # the caller calls this method and receives the response from the async loop
92
95
  def value
93
- @mutex.lock
94
- begin
95
- @cond.wait(@mutex) until @rval
96
+ @mutex.synchronize do
97
+ @cond.wait(@mutex) until @rval or @error
98
+
99
+ case @error
100
+ when nil
101
+ # ok, nothing to see here, carry on
102
+ when ZOO_EXPIRED_SESSION_STATE
103
+ raise Exceptions::SessionExpired, "connection has expired"
104
+ else
105
+ raise Exceptions::NotConnected, "connection state is #{STATE_NAMES[@error]}"
106
+ end
96
107
 
97
108
  case @rval.length
98
109
  when 1
@@ -100,8 +111,6 @@ module Zookeeper
100
111
  else
101
112
  return @rval
102
113
  end
103
- ensure
104
- @mutex.unlock
105
114
  end
106
115
  end
107
116
 
@@ -124,13 +133,24 @@ module Zookeeper
124
133
  # implementation, but it's more important to get *something* working and
125
134
  # passing specs, then refactor to make everything sane
126
135
  #
136
+ #
127
137
  def submit(czk)
138
+ state = czk.zkrb_state # check the state of the connection
139
+
140
+ if @meth == :state # if the method is a state call
141
+ @rval = [state] # we're done, no error
142
+ return deliver!
143
+
144
+ elsif state != ZOO_CONNECTED_STATE # otherwise, we must be connected
145
+ @error = state # so set the error
146
+ return deliver! # and we're out
147
+ end
148
+
128
149
  rc, *_ = czk.__send__(:"zkrb_#{@meth}", *async_args)
129
150
 
130
- # if this is an state call, async call, or we failed to submit it
131
- if (@meth == :state) or user_callback? or (rc != ZOK)
132
- @rval = [rc] # create the repsonse
133
- deliver! # wake the caller and we're out
151
+ if user_callback? or (rc != ZOK) # async call, or we failed to submit it
152
+ @rval = [rc] # create the repsonse
153
+ deliver! # wake the caller and we're out
134
154
  end
135
155
  end
136
156
 
@@ -152,9 +172,6 @@ module Zookeeper
152
172
 
153
173
  logger.debug { "async_args, meth: #{meth} ary: #{ary.inspect}, #{callback_arg_idx}" }
154
174
 
155
- # this is not already an async call
156
- # so we replace the req_id with the ZKRB_ASYNC_CONTN_ID so the
157
- # event thread knows to dispatch it itself
158
175
  ary[callback_arg_idx] ||= self
159
176
 
160
177
  ary
@@ -165,11 +182,8 @@ module Zookeeper
165
182
  end
166
183
 
167
184
  def deliver!
168
- @mutex.lock
169
- begin
185
+ @mutex.synchronize do
170
186
  @cond.signal
171
- ensure
172
- @mutex.unlock rescue nil
173
187
  end
174
188
  end
175
189
  end # Base
@@ -1,4 +1,4 @@
1
1
  module Zookeeper
2
- VERSION = '1.1.2'
2
+ VERSION = '1.1.3'
3
3
  DRIVER_VERSION = '3.3.5'
4
4
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zookeeper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 2
10
- version: 1.1.2
9
+ - 3
10
+ version: 1.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Phillip Pearson
@@ -20,7 +20,7 @@ autorequire:
20
20
  bindir: bin
21
21
  cert_chain: []
22
22
 
23
- date: 2012-05-17 00:00:00 Z
23
+ date: 2012-05-21 00:00:00 Z
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: backports