google-cloud-pubsub 0.30.1 → 0.30.2

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a7b5e4f3c773caf36d339a3184ee4307d69722387f315cad6d14180d7240751
4
- data.tar.gz: 726c1f954229054c11e5369bbf03b79eda0eddf2695c3073e9f942ea946654ae
3
+ metadata.gz: 8bc2cbfb8b149d600fbdf725934ccef18019853c3c371d34d964a47532640b33
4
+ data.tar.gz: 836fae2f33841cd070137fab258d208b456018214a25335f6e7848b1c9e0270b
5
5
  SHA512:
6
- metadata.gz: 7ecc9df27c7d8fc2a43047d233502a9d14229f2a523f8d65e9d73a81f54fa4b3aa843fd21d2b8d2c4d6bb15daa90e70a258298bbed123f852f799a6f0fd2b6ad
7
- data.tar.gz: ed09233e63045916592c796e7b5ef182dbd06c9c4a76350736be955e13cb8cd28c22c9d4fb2c93303dd2c480341632dc4d395309b31f6c9ad23cee61aac93418
6
+ metadata.gz: 55cf18d0b63d2f68f28db33f85dd21ded29e960e3cd871278b9abfedfa86829b49e3ea6ba96a7ad1fad15f96da65a2d75fb3f9c2dcd59025f1aba753878a79ca
7
+ data.tar.gz: ce9772ea6d63bc664739c58ee56c32f84c44f9662c6ba9800a9aacd1a7e09eea9757649ca3290f8db894a07a4401ec4fd9f9573d5c4c7230b8e91ac0141c5fb1
@@ -285,16 +285,20 @@ module Google
285
285
  @publisher = publisher
286
286
  @messages = []
287
287
  @callbacks = []
288
+ @total_message_bytes = publisher.topic_name.bytesize + 2
288
289
  end
289
290
 
290
291
  def add msg, callback
291
292
  @messages << msg
292
293
  @callbacks << callback
294
+ @total_message_bytes += msg.to_proto.bytesize + 2
293
295
  end
294
296
 
295
297
  def try_add msg, callback
296
- if total_message_count + 1 > @publisher.max_messages ||
297
- total_message_bytes + msg.to_proto.size >= @publisher.max_bytes
298
+ new_message_count = total_message_count + 1
299
+ new_message_bytes = total_message_bytes + msg.to_proto.bytesize + 2
300
+ if new_message_count > @publisher.max_messages ||
301
+ new_message_bytes >= @publisher.max_bytes
298
302
  return false
299
303
  end
300
304
  add msg, callback
@@ -311,7 +315,7 @@ module Google
311
315
  end
312
316
 
313
317
  def total_message_bytes
314
- @messages.map(&:to_proto).map(&:size).inject(0, :+)
318
+ @total_message_bytes
315
319
  end
316
320
 
317
321
  def items
@@ -162,39 +162,57 @@ module Google
162
162
  def initialize max_bytes: 10000000
163
163
  @max_bytes = max_bytes
164
164
  @request = Google::Pubsub::V1::StreamingPullRequest.new
165
+ @total_message_bytes = 0
165
166
  end
166
167
 
167
168
  def ack ack_id
168
169
  @request.ack_ids << ack_id
170
+ @total_message_bytes += addl_ack_bytes ack_id
169
171
  end
170
172
 
171
173
  def try_ack ack_id
172
- addl_bytes = ack_id.size
174
+ addl_bytes = addl_ack_bytes ack_id
173
175
  return false if total_message_bytes + addl_bytes >= @max_bytes
174
176
 
175
177
  ack ack_id
176
178
  true
177
179
  end
178
180
 
181
+ def addl_ack_bytes ack_id
182
+ ack_id.bytesize + 2
183
+ end
184
+
179
185
  def delay deadline, ack_id
180
186
  @request.modify_deadline_seconds << deadline
181
187
  @request.modify_deadline_ack_ids << ack_id
188
+ @total_message_bytes += addl_delay_bytes deadline, ack_id
182
189
  end
183
190
 
184
191
  def try_delay deadline, ack_id
185
- addl_bytes = deadline.to_s.size + ack_id.size
192
+ addl_bytes = addl_delay_bytes deadline, ack_id
186
193
  return false if total_message_bytes + addl_bytes >= @max_bytes
187
194
 
188
195
  delay deadline, ack_id
189
196
  true
190
197
  end
191
198
 
199
+ def addl_delay_bytes deadline, ack_id
200
+ bytes_for_int(deadline) + ack_id.bytesize + 4
201
+ end
202
+
203
+ def bytes_for_int num
204
+ # Ruby 2.0 does not have Integer#bit_length
205
+ return [num].pack("s").bytesize unless num.respond_to? :bit_length
206
+
207
+ (num.bit_length / 8.0).ceil
208
+ end
209
+
192
210
  def ready?
193
211
  total_message_bytes >= @max_bytes
194
212
  end
195
213
 
196
214
  def total_message_bytes
197
- request.to_proto.size
215
+ @total_message_bytes
198
216
  end
199
217
  end
200
218
  end
@@ -230,16 +230,27 @@ module Google
230
230
  break
231
231
  end
232
232
  end
233
+ # Has the loop broken but we aren't stopped?
234
+ # Could be GRPC has thrown an internal error, so restart.
235
+ synchronize { raise "restart thread" unless @stopped }
233
236
  rescue GRPC::DeadlineExceeded, GRPC::Unavailable, GRPC::Cancelled,
234
- GRPC::ResourceExhausted, GRPC::Internal
237
+ GRPC::ResourceExhausted, GRPC::Internal, GRPC::Core::CallError
235
238
  # The GAPIC layer will raise DeadlineExceeded when stream is opened
236
239
  # longer than the timeout value it is configured for. When this
237
240
  # happends, restart the stream stealthly.
238
241
  # Also stealthly restart the stream on Unavailable, Cancelled,
239
242
  # ResourceExhausted, and Internal.
243
+ # Also, also stealthly restart the stream when GRPC raises the
244
+ # internal CallError.
240
245
  synchronize { start_streaming! }
241
246
  rescue StandardError => e
242
- raise Google::Cloud::Error.from_error(e)
247
+ synchronize do
248
+ if @stopped
249
+ raise Google::Cloud::Error.from_error(e)
250
+ else
251
+ start_streaming!
252
+ end
253
+ end
243
254
  end
244
255
 
245
256
  # rubocop:enable all
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Pubsub
19
- VERSION = "0.30.1".freeze
19
+ VERSION = "0.30.2".freeze
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.1
4
+ version: 0.30.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-03-08 00:00:00.000000000 Z
12
+ date: 2018-04-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core