google-cloud-pubsub 2.15.1 → 2.15.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/lib/google/cloud/pubsub/async_publisher/batch.rb +27 -14
- data/lib/google/cloud/pubsub/subscriber/stream.rb +24 -6
- data/lib/google/cloud/pubsub/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b87b7780f67e6085a5385cead0cef00b28a2648838f62127077354e4a0f16ce9
|
4
|
+
data.tar.gz: c78f13b82c1482b32a71988acf62d76a9829806cdfcdfa5bff952764438c06f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: be588f7f62da5e5e318674c40e1009e742120444e972fad475727936027b336801f2b8ae460be36c68d5912052d1fe5a577a100617aef31298d7d8312c6a000c
|
7
|
+
data.tar.gz: d79918f0b74eaaf5c393b72231e2d4162536ac0f18c8ac6eb8893d1b49dd0a68fd20e3c6ee8efcd5879a9b0aa7543948ce4c55d1532f58c7939d654b8b579dd1
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 2.15.3 (2023-04-19)
|
4
|
+
|
5
|
+
#### Bug Fixes
|
6
|
+
|
7
|
+
* wait for successful receipt modack when exactly once delivery enabled ([#21431](https://github.com/googleapis/google-cloud-ruby/issues/21431))
|
8
|
+
|
9
|
+
### 2.15.2 (2023-03-19)
|
10
|
+
|
11
|
+
#### Bug Fixes
|
12
|
+
|
13
|
+
* make batch handle publish interval ([#20913](https://github.com/googleapis/google-cloud-ruby/issues/20913))
|
14
|
+
|
3
15
|
### 2.15.1 (2023-02-23)
|
4
16
|
|
5
17
|
#### Documentation
|
@@ -141,7 +141,7 @@ module Google
|
|
141
141
|
|
142
142
|
until @queue.empty?
|
143
143
|
item = @queue.first
|
144
|
-
if try_add item.msg, item.callback
|
144
|
+
if try_add item.msg, item.callback, item.create_time
|
145
145
|
@queue.shift
|
146
146
|
next
|
147
147
|
end
|
@@ -178,12 +178,7 @@ module Google
|
|
178
178
|
return false
|
179
179
|
end
|
180
180
|
|
181
|
-
|
182
|
-
item = @queue.first
|
183
|
-
added = try_add item.msg, item.callback
|
184
|
-
break unless added
|
185
|
-
@queue.shift
|
186
|
-
end
|
181
|
+
refill_items
|
187
182
|
|
188
183
|
return false unless @publishing
|
189
184
|
if @items.empty?
|
@@ -191,6 +186,7 @@ module Google
|
|
191
186
|
return false
|
192
187
|
else
|
193
188
|
return true if stopping?
|
189
|
+
return true if interval_met?(@items.first.create_time) || batch_full_by_count?
|
194
190
|
if @queue.empty?
|
195
191
|
@publishing = false
|
196
192
|
return false
|
@@ -261,16 +257,33 @@ module Google
|
|
261
257
|
|
262
258
|
protected
|
263
259
|
|
264
|
-
def
|
265
|
-
|
260
|
+
def interval_met? create_time
|
261
|
+
Time.now - create_time > @publisher.interval
|
262
|
+
end
|
263
|
+
|
264
|
+
def batch_full_by_count?
|
265
|
+
total_message_count == @publisher.max_messages
|
266
|
+
end
|
267
|
+
|
268
|
+
def refill_items
|
269
|
+
until @queue.empty?
|
270
|
+
item = @queue.first
|
271
|
+
added = try_add item.msg, item.callback, item.create_time
|
272
|
+
break unless added
|
273
|
+
@queue.shift
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
def items_add msg, callback, create_time
|
278
|
+
item = Item.new msg, callback, (create_time || Time.now)
|
266
279
|
@items << item
|
267
280
|
@total_message_bytes += item.bytesize + 2
|
268
281
|
end
|
269
282
|
|
270
|
-
def try_add msg, callback
|
283
|
+
def try_add msg, callback, create_time = nil
|
271
284
|
if @items.empty?
|
272
285
|
# Always add when empty, even if bytesize is bigger than total
|
273
|
-
items_add msg, callback
|
286
|
+
items_add msg, callback, create_time
|
274
287
|
return true
|
275
288
|
end
|
276
289
|
new_message_count = total_message_count + 1
|
@@ -279,12 +292,12 @@ module Google
|
|
279
292
|
new_message_bytes >= @publisher.max_bytes
|
280
293
|
return false
|
281
294
|
end
|
282
|
-
items_add msg, callback
|
295
|
+
items_add msg, callback, create_time
|
283
296
|
true
|
284
297
|
end
|
285
298
|
|
286
299
|
def queue_add msg, callback
|
287
|
-
item = Item.new msg, callback
|
300
|
+
item = Item.new msg, callback, Time.now
|
288
301
|
@queue << item
|
289
302
|
end
|
290
303
|
|
@@ -292,7 +305,7 @@ module Google
|
|
292
305
|
@items.count
|
293
306
|
end
|
294
307
|
|
295
|
-
Item = Struct.new :msg, :callback do
|
308
|
+
Item = Struct.new :msg, :callback, :create_time do
|
296
309
|
def bytesize
|
297
310
|
msg.to_proto.bytesize
|
298
311
|
end
|
@@ -248,6 +248,7 @@ module Google
|
|
248
248
|
# Cannot syncronize the enumerator, causes deadlock
|
249
249
|
response = enum.next
|
250
250
|
new_exactly_once_delivery_enabled = response&.subscription_properties&.exactly_once_delivery_enabled
|
251
|
+
received_messages = response.received_messages
|
251
252
|
|
252
253
|
# Use synchronize so changes happen atomically
|
253
254
|
synchronize do
|
@@ -256,17 +257,21 @@ module Google
|
|
256
257
|
@subscriber.exactly_once_delivery_enabled = @exactly_once_delivery_enabled
|
257
258
|
|
258
259
|
# Create receipt of received messages reception
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
260
|
+
if @exactly_once_delivery_enabled
|
261
|
+
create_receipt_modack_for_eos received_messages
|
262
|
+
else
|
263
|
+
@subscriber.buffer.modify_ack_deadline @subscriber.deadline, received_messages.map(&:ack_id)
|
264
|
+
# Add received messages to inventory
|
265
|
+
@inventory.add received_messages
|
266
|
+
end
|
263
267
|
end
|
264
268
|
|
265
|
-
|
269
|
+
received_messages.each do |rec_msg_grpc|
|
266
270
|
rec_msg = ReceivedMessage.from_grpc(rec_msg_grpc, self)
|
267
271
|
# No need to synchronize the callback future
|
268
272
|
register_callback rec_msg
|
269
|
-
end
|
273
|
+
end if !@exactly_once_delivery_enabled # Exactly once delivery scenario is handled by callback
|
274
|
+
|
270
275
|
synchronize { pause_streaming! }
|
271
276
|
rescue StopIteration
|
272
277
|
break
|
@@ -295,6 +300,19 @@ module Google
|
|
295
300
|
|
296
301
|
# rubocop:enable all
|
297
302
|
|
303
|
+
def create_receipt_modack_for_eos received_messages
|
304
|
+
received_messages.each do |rec_msg_grpc|
|
305
|
+
callback = proc do |result|
|
306
|
+
if result.succeeded?
|
307
|
+
synchronize { @inventory.add rec_msg_grpc }
|
308
|
+
rec_msg = ReceivedMessage.from_grpc rec_msg_grpc, self
|
309
|
+
register_callback rec_msg
|
310
|
+
end
|
311
|
+
end
|
312
|
+
@subscriber.buffer.modify_ack_deadline @subscriber.deadline, [rec_msg_grpc.ack_id], callback
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
298
316
|
# Updates min_duration_per_lease_extension to 60 when exactly_once_delivery_enabled
|
299
317
|
# and reverts back to default 0 when disabled.
|
300
318
|
# Skips if exactly_once_enabled is not modified.
|
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: 2.15.
|
4
|
+
version: 2.15.3
|
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: 2023-
|
12
|
+
date: 2023-04-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: concurrent-ruby
|