google-cloud-pubsub 2.9.2 → 2.10.0

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: 8394bc5fb6c16d7ce9e7cb3245014813255379c0e7ed8e43031e5426d0815b49
4
- data.tar.gz: def32abf5611649a5bf1d6b4d5f2f5c13b498a79f286503bfc343d662ecf260b
3
+ metadata.gz: dfea48d152ed64a8f424def3c0ecdbdc7458da875f12d9ca72aa04a61a682c8c
4
+ data.tar.gz: b19ac0708ab621f94c90e76fa9819ebd06ef4c4d4afd158b5da185dea5cfbb65
5
5
  SHA512:
6
- metadata.gz: e385d303a2ebad9b7ffb0510452d146af19de56cafdf8ffda81a23952fce998a2f38be41b95781ea4cc12e55e6f85782afbbbb427d2b39f96ef21477e053bded
7
- data.tar.gz: 3e758b507919e9a06d8760a4f422eb7b91ddfb832be1a708e98569604ff87688c44a8afb5c1cdbe088194fe9a32d4d2cd08a4c7bfec7a804fa3cf44f87ca359a
6
+ metadata.gz: ccb470b1228bbb234000c74f05396cbfcfe89780557962d4fa5268ad32a164627a48d0a45f605c6cbccdae2944cdf6f6829cb6310c73a0b0fc9de32495a565f4
7
+ data.tar.gz: 4dbce7523618c04e64ba84231bc9cfce06b9c16026a18c51c451337a7db851c122e47f0e1cc3d07a841ec4fcdd67a1b6ee338c888721b3e77db3b18a9f34948b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Release History
2
2
 
3
+ ### 2.10.0 (2022-06-14)
4
+
5
+ #### Features
6
+
7
+ * introduce min_duration_per_lease_extension
8
+
3
9
  ### 2.9.2 (2022-04-28)
4
10
 
5
11
  #### Bug Fixes
@@ -35,16 +35,18 @@ module Google
35
35
  attr_reader :bytesize
36
36
  attr_reader :extension
37
37
  attr_reader :max_duration_per_lease_extension
38
+ attr_accessor :min_duration_per_lease_extension
38
39
  attr_reader :use_legacy_flow_control
39
40
 
40
41
  def initialize stream, limit:, bytesize:, extension:, max_duration_per_lease_extension:,
41
- use_legacy_flow_control:
42
+ min_duration_per_lease_extension:, use_legacy_flow_control:
42
43
  super()
43
44
  @stream = stream
44
45
  @limit = limit
45
46
  @bytesize = bytesize
46
47
  @extension = extension
47
48
  @max_duration_per_lease_extension = max_duration_per_lease_extension
49
+ @min_duration_per_lease_extension = min_duration_per_lease_extension
48
50
  @use_legacy_flow_control = use_legacy_flow_control
49
51
  @inventory = {}
50
52
  @wait_cond = new_cond
@@ -162,6 +164,8 @@ module Google
162
164
  def calc_delay
163
165
  delay = (stream.subscriber.deadline - 3) * rand(0.8..0.9)
164
166
  delay = [delay, max_duration_per_lease_extension].min if max_duration_per_lease_extension.positive?
167
+ delay = [delay, min_duration_per_lease_extension].max if min_duration_per_lease_extension.positive? &&
168
+ stream.exactly_once_delivery_enabled
165
169
  delay
166
170
  end
167
171
  end
@@ -46,6 +46,10 @@ module Google
46
46
  # @private Sequencer.
47
47
  attr_reader :sequencer
48
48
 
49
+ ##
50
+ # @private exactly_once_delivery_enabled.
51
+ attr_reader :exactly_once_delivery_enabled
52
+
49
53
  ##
50
54
  # @private Create an empty Subscriber::Stream object.
51
55
  def initialize subscriber
@@ -57,6 +61,7 @@ module Google
57
61
  @stopped = nil
58
62
  @paused = nil
59
63
  @pause_cond = new_cond
64
+ @exactly_once_delivery_enabled = false
60
65
 
61
66
  @inventory = Inventory.new self, **@subscriber.stream_inventory
62
67
 
@@ -242,9 +247,13 @@ module Google
242
247
  begin
243
248
  # Cannot syncronize the enumerator, causes deadlock
244
249
  response = enum.next
250
+ new_exactly_once_delivery_enabled = response&.subscription_properties&.exactly_once_delivery_enabled
245
251
 
246
- # Use synchronize so both changes happen atomically
252
+ # Use synchronize so changes happen atomically
247
253
  synchronize do
254
+ update_min_duration_per_lease_extension new_exactly_once_delivery_enabled
255
+ @exactly_once_delivery_enabled = new_exactly_once_delivery_enabled unless new_exactly_once_delivery_enabled.nil?
256
+
248
257
  # Create receipt of received messages reception
249
258
  @subscriber.buffer.modify_ack_deadline @subscriber.deadline, response.received_messages.map(&:ack_id)
250
259
 
@@ -285,6 +294,14 @@ module Google
285
294
 
286
295
  # rubocop:enable all
287
296
 
297
+ # Updates min_duration_per_lease_extension to 60 when exactly_once_delivery_enabled
298
+ # and reverts back to default 0 when disabled.
299
+ # Skips if exactly_once_enabled is not modified.
300
+ def update_min_duration_per_lease_extension new_exactly_once_delivery_enabled
301
+ return if new_exactly_once_delivery_enabled == @exactly_once_delivery_enabled
302
+ @inventory.min_duration_per_lease_extension = new_exactly_once_delivery_enabled ? 60 : 0
303
+ end
304
+
288
305
  def register_callback rec_msg
289
306
  if @sequencer
290
307
  # Add the message to the sequencer to invoke the callback.
@@ -331,6 +331,16 @@ module Google
331
331
  @inventory[:max_duration_per_lease_extension]
332
332
  end
333
333
 
334
+ ##
335
+ # The minimum amount of time in seconds for a single lease extension attempt. Bounds the delay before a message
336
+ # redelivery if the subscriber fails to extend the deadline. Default is 0 (disabled).
337
+ #
338
+ # @return [Integer] The minimum number of seconds.
339
+ #
340
+ def min_duration_per_lease_extension
341
+ @inventory[:min_duration_per_lease_extension]
342
+ end
343
+
334
344
  ##
335
345
  # @private
336
346
  def stream_inventory
@@ -339,6 +349,7 @@ module Google
339
349
  bytesize: @inventory[:max_outstanding_bytes].fdiv(@streams).ceil,
340
350
  extension: @inventory[:max_total_lease_duration],
341
351
  max_duration_per_lease_extension: @inventory[:max_duration_per_lease_extension],
352
+ min_duration_per_lease_extension: @inventory[:min_duration_per_lease_extension],
342
353
  use_legacy_flow_control: @inventory[:use_legacy_flow_control]
343
354
  }
344
355
  end
@@ -394,6 +405,7 @@ module Google
394
405
  @inventory[:max_outstanding_bytes] = Integer(@inventory[:max_outstanding_bytes] || 100_000_000)
395
406
  @inventory[:max_total_lease_duration] = Integer(@inventory[:max_total_lease_duration] || 3600)
396
407
  @inventory[:max_duration_per_lease_extension] = Integer(@inventory[:max_duration_per_lease_extension] || 0)
408
+ @inventory[:min_duration_per_lease_extension] = Integer(@inventory[:min_duration_per_lease_extension] || 0)
397
409
  @inventory[:use_legacy_flow_control] = @inventory[:use_legacy_flow_control] || false
398
410
  end
399
411
 
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module PubSub
19
- VERSION = "2.9.2".freeze
19
+ VERSION = "2.10.0".freeze
20
20
  end
21
21
 
22
22
  Pubsub = PubSub unless const_defined? :Pubsub
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.9.2
4
+ version: 2.10.0
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: 2022-04-29 00:00:00.000000000 Z
12
+ date: 2022-06-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -276,7 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
276
276
  - !ruby/object:Gem::Version
277
277
  version: '0'
278
278
  requirements: []
279
- rubygems_version: 3.3.5
279
+ rubygems_version: 3.3.14
280
280
  signing_key:
281
281
  specification_version: 4
282
282
  summary: API Client library for Google Cloud Pub/Sub