google-cloud-pubsub 2.15.1 → 2.15.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.
- 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
|