google-cloud-pubsub 2.1.1 → 2.4.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: 450987f2e0c301c5b43af3211dda2c6698dfa76a29076c47dc9a9690698fa9df
4
- data.tar.gz: 84f19d7d3aacaa290e7364558ebd29795f3fce76783254df8d2df43b653e02f8
3
+ metadata.gz: a4148f77602c7b9031ed772a14735b25414034684472928fb5244a3c07c2c080
4
+ data.tar.gz: 247fd6d4697c8e4f04858487441a3552f30ebe3010720861a1e2c9e8198de219
5
5
  SHA512:
6
- metadata.gz: 7b10cd6edeb5cf4d352028f58a233eb8f56f4de079ed4f2b344cb930750efe16758c736bb160635a8e019083ddf04fe01255175f18467d35a46966e9d1c19787
7
- data.tar.gz: b67f8da4a9c0b73fa065a9364773dbaaa2682d993163f9bac62fab849b00178aaeab258cc0d4962e74106535be540ec2e42cfb6b888d973b4b97c06efb217f32
6
+ metadata.gz: c926ed2d0bca88e81a0545e86ca4fdd916df9d24f1108e4e74cf9140c0a835b79fb6fc207074d62a920de0958e69071235d0c8874970aae9db3657e24c36b2e1
7
+ data.tar.gz: 3f719066bf2ffc015b88dd0ffc5f13c38d853c2e54603daa6190905420a87b4aeb9372e4d1bcb37d68863ac38151d147d465ec3891333608718ede84123dca92
data/CHANGELOG.md CHANGED
@@ -1,5 +1,44 @@
1
1
  # Release History
2
2
 
3
+ ### 2.4.0 / 2021-03-10
4
+
5
+ #### Features
6
+
7
+ * Drop support for Ruby 2.4 and add support for Ruby 3.0
8
+
9
+ ### 2.3.2 / 2021-02-08
10
+
11
+ #### Bug Fixes
12
+
13
+ * Fix project option in Project#topic and Project#subscription
14
+ * Ensure that project option is used when skip_lookup is false.
15
+ * Improve documentation of topic_name, subscription_name and snapshot_name.
16
+
17
+ ### 2.3.1 / 2021-01-13
18
+
19
+ #### Bug Fixes
20
+
21
+ * Update Subscription#retry_policy=
22
+ * Remove conditional RPC to fetch full resource before update.
23
+
24
+ ### 2.3.0 / 2020-11-18
25
+
26
+ #### Features
27
+
28
+ * Add inventory.use_legacy_flow_control to listen options
29
+ * Add inventory.use_legacy_flow_control to Subscription#listen options
30
+ * Add Subscriber#use_legacy_flow_control?
31
+
32
+ #### Documentation
33
+
34
+ * Remove EXPERIMENTAL label from RetryPolicy docs
35
+
36
+ ### 2.2.0 / 2020-11-11
37
+
38
+ #### Features
39
+
40
+ * Add Subscription#remove_dead_letter_policy
41
+
3
42
  ### 2.1.1 / 2020-10-26
4
43
 
5
44
  #### Documentation
data/CONTRIBUTING.md CHANGED
@@ -24,7 +24,7 @@ be able to accept your pull requests.
24
24
  In order to use the google-cloud-pubsub console and run the project's tests,
25
25
  there is a small amount of setup:
26
26
 
27
- 1. Install Ruby. google-cloud-pubsub requires Ruby 2.4+. You may choose to
27
+ 1. Install Ruby. google-cloud-pubsub requires Ruby 2.5+. You may choose to
28
28
  manage your Ruby and gem installations with [RVM](https://rvm.io/),
29
29
  [rbenv](https://github.com/rbenv/rbenv), or
30
30
  [chruby](https://github.com/postmodern/chruby).
@@ -45,7 +45,7 @@ there is a small amount of setup:
45
45
 
46
46
  ```sh
47
47
  $ cd google-cloud-pubsub/
48
- $ bundle exec rake bundleupdate
48
+ $ bundle install
49
49
  ```
50
50
 
51
51
  ## Console
data/LOGGING.md CHANGED
@@ -3,7 +3,7 @@
3
3
  To enable logging for this library, set the logger for the underlying
4
4
  [gRPC](https://github.com/grpc/grpc/tree/master/src/ruby) library. The logger
5
5
  that you set may be a Ruby stdlib
6
- [`Logger`](https://ruby-doc.org/stdlib-2.5.0/libdoc/logger/rdoc/Logger.html) as
6
+ [`Logger`](https://ruby-doc.org/stdlib/libdoc/logger/rdoc/Logger.html) as
7
7
  shown below, or a
8
8
  [`Google::Cloud::Logging::Logger`](https://googleapis.dev/ruby/google-cloud-logging/latest)
9
9
  that will write logs to [Stackdriver
@@ -44,8 +44,8 @@ module Google
44
44
  #
45
45
  # topic.async_publisher.stop!
46
46
  #
47
- # @attr_reader [String] topic_name The name of the topic the messages are published to. In the form of
48
- # "/projects/project-identifier/topics/topic-name".
47
+ # @attr_reader [String] topic_name The name of the topic the messages are published to. The value is a
48
+ # fully-qualified topic name in the form `projects/{project_id}/topics/{topic_id}`.
49
49
  # @attr_reader [Integer] max_bytes The maximum size of messages to be collected before the batch is published.
50
50
  # Default is 1,000,000 (1MB).
51
51
  # @attr_reader [Integer] max_messages The maximum number of messages to be collected before the batch is
@@ -59,8 +59,12 @@ module Google
59
59
  class AsyncPublisher
60
60
  include MonitorMixin
61
61
 
62
- attr_reader :topic_name, :max_bytes, :max_messages, :interval,
63
- :publish_threads, :callback_threads
62
+ attr_reader :topic_name
63
+ attr_reader :max_bytes
64
+ attr_reader :max_messages
65
+ attr_reader :interval
66
+ attr_reader :publish_threads
67
+ attr_reader :callback_threads
64
68
  ##
65
69
  # @private Implementation accessors
66
70
  attr_reader :service, :batch, :publish_thread_pool,
@@ -303,7 +307,7 @@ module Google
303
307
 
304
308
  def publish_batches! stop: nil
305
309
  @batches.reject! { |_ordering_key, batch| batch.empty? }
306
- @batches.values.each do |batch|
310
+ @batches.each_value do |batch|
307
311
  ready = batch.publish! stop: stop
308
312
  publish_batch_async @topic_name, batch if ready
309
313
  end
@@ -25,7 +25,8 @@ module Google
25
25
  class Batch
26
26
  include MonitorMixin
27
27
 
28
- attr_reader :items, :ordering_key
28
+ attr_reader :items
29
+ attr_reader :ordering_key
29
30
 
30
31
  def initialize publisher, ordering_key
31
32
  # init MonitorMixin
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
  require "googleauth"
17
- require "google/cloud/pubsub/v1/publisher/credentials.rb"
17
+ require "google/cloud/pubsub/v1/publisher/credentials"
18
18
 
19
19
  module Google
20
20
  module Cloud
@@ -68,7 +68,8 @@ module Google
68
68
  # end
69
69
  #
70
70
  class Policy
71
- attr_reader :etag, :roles
71
+ attr_reader :etag
72
+ attr_reader :roles
72
73
 
73
74
  ##
74
75
  # @private Creates a Policy object.
@@ -167,7 +168,7 @@ module Google
167
168
  role: role_name,
168
169
  members: roles[role_name]
169
170
  )
170
- end
171
+ end.compact
171
172
  )
172
173
  end
173
174
 
@@ -75,10 +75,14 @@ module Google
75
75
  ##
76
76
  # Retrieves topic by name.
77
77
  #
78
- # @param [String] topic_name Name of a topic.
78
+ # @param [String] topic_name Name of a topic. The value can be a simple
79
+ # topic ID (relative name), in which case the current project ID will
80
+ # be supplied, or a fully-qualified topic name in the form
81
+ # `projects/{project_id}/topics/{topic_id}`.
79
82
  # @param [String] project If the topic belongs to a project other than
80
83
  # the one currently connected to, the alternate project ID can be
81
- # specified here. Optional.
84
+ # specified here. Optional. Not used if a fully-qualified topic name
85
+ # is provided for `topic_name`.
82
86
  # @param [Boolean] skip_lookup Optionally create a {Topic} object
83
87
  # without verifying the topic resource exists on the Pub/Sub service.
84
88
  # Calls made on this object will raise errors if the topic resource
@@ -147,7 +151,7 @@ module Google
147
151
  ensure_service!
148
152
  options = { project: project }
149
153
  return Topic.from_name topic_name, service, options if skip_lookup
150
- grpc = service.get_topic topic_name
154
+ grpc = service.get_topic topic_name, options
151
155
  Topic.from_grpc grpc, service, async: async
152
156
  rescue Google::Cloud::NotFoundError
153
157
  nil
@@ -158,7 +162,16 @@ module Google
158
162
  ##
159
163
  # Creates a new topic.
160
164
  #
161
- # @param [String] topic_name Name of a topic.
165
+ # @param [String] topic_name Name of a topic. Required.
166
+ # The value can be a simple topic ID (relative name), in which
167
+ # case the current project ID will be supplied, or a fully-qualified
168
+ # topic name in the form `projects/{project_id}/topics/{topic_id}`.
169
+ #
170
+ # The topic ID (relative name) must start with a letter, and
171
+ # contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
172
+ # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
173
+ # signs (`%`). It must be between 3 and 255 characters in length, and
174
+ # it must not start with `goog`.
162
175
  # @param [Hash] labels A hash of user-provided labels associated with
163
176
  # the topic. You can use these to organize and group your topics.
164
177
  # Label keys and values can be no longer than 63 characters, can only
@@ -250,10 +263,14 @@ module Google
250
263
  ##
251
264
  # Retrieves subscription by name.
252
265
  #
253
- # @param [String] subscription_name Name of a subscription.
266
+ # @param [String] subscription_name Name of a subscription. The value can
267
+ # be a simple subscription ID, in which case the current project ID
268
+ # will be supplied, or a fully-qualified subscription name in the form
269
+ # `projects/{project_id}/subscriptions/{subscription_id}`.
254
270
  # @param [String] project If the subscription belongs to a project other
255
271
  # than the one currently connected to, the alternate project ID can be
256
- # specified here.
272
+ # specified here. Not used if a fully-qualified subscription name is
273
+ # provided for `subscription_name`.
257
274
  # @param [Boolean] skip_lookup Optionally create a {Subscription} object
258
275
  # without verifying the subscription resource exists on the Pub/Sub
259
276
  # service. Calls made on this object will raise errors if the service
@@ -283,7 +300,7 @@ module Google
283
300
  ensure_service!
284
301
  options = { project: project }
285
302
  return Subscription.from_name subscription_name, service, options if skip_lookup
286
- grpc = service.get_subscription subscription_name
303
+ grpc = service.get_subscription subscription_name, options
287
304
  Subscription.from_grpc grpc, service
288
305
  rescue Google::Cloud::NotFoundError
289
306
  nil
@@ -31,9 +31,6 @@ module Google
31
31
  # Retry Policy is implemented on a best effort basis. At times, the delay between consecutive deliveries may not
32
32
  # match the configuration. That is, delay can be more or less than configured backoff.
33
33
  #
34
- # **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for production
35
- # use. It is not subject to any SLA or deprecation policy.
36
- #
37
34
  # @attr [Numeric] minimum_backoff The minimum delay between consecutive deliveries of a given message. Value
38
35
  # should be between 0 and 600 seconds. The default value is 10 seconds.
39
36
  # @attr [Numeric] maximum_backoff The maximum delay between consecutive deliveries of a given message. Value
@@ -52,7 +49,8 @@ module Google
52
49
  # sub.retry_policy.maximum_backoff #=> 300
53
50
  #
54
51
  class RetryPolicy
55
- attr_reader :minimum_backoff, :maximum_backoff
52
+ attr_reader :minimum_backoff
53
+ attr_reader :maximum_backoff
56
54
 
57
55
  ##
58
56
  # Creates a new, immutable RetryPolicy value object.
@@ -26,7 +26,10 @@ module Google
26
26
  ##
27
27
  # @private Represents the Pub/Sub service API, including IAM mixins.
28
28
  class Service
29
- attr_accessor :project, :credentials, :host, :timeout
29
+ attr_accessor :project
30
+ attr_accessor :credentials
31
+ attr_accessor :host
32
+ attr_accessor :timeout
30
33
  ###
31
34
  # The same client_id is used across all streaming pull connections that are created by this client. This is
32
35
  # intentional, as it indicates to the server that any guarantees, such as message ordering, made for a stream
@@ -58,8 +58,10 @@ module Google
58
58
  end
59
59
 
60
60
  ##
61
- # The name of the snapshot. Format is
62
- # `projects/{project}/snapshots/{snap}`.
61
+ # The name of the snapshot.
62
+ #
63
+ # @return [String] A fully-qualified snapshot name in the form
64
+ # `projects/{project_id}/snapshots/{snapshot_id}`.
63
65
  def name
64
66
  @grpc.name
65
67
  end
@@ -125,12 +125,12 @@ module Google
125
125
  # puts snapshot.name
126
126
  # end
127
127
  #
128
- def all request_limit: nil
128
+ def all request_limit: nil, &block
129
129
  request_limit = request_limit.to_i if request_limit
130
130
  return enum_for :all, request_limit: request_limit unless block_given?
131
131
  results = self
132
132
  loop do
133
- results.each { |r| yield r }
133
+ results.each(&block)
134
134
  if request_limit
135
135
  request_limit -= 1
136
136
  break if request_limit.negative?
@@ -64,8 +64,13 @@ module Google
64
64
  class Subscriber
65
65
  include MonitorMixin
66
66
 
67
- attr_reader :subscription_name, :callback, :deadline, :streams, :message_ordering, :callback_threads,
68
- :push_threads
67
+ attr_reader :subscription_name
68
+ attr_reader :callback
69
+ attr_reader :deadline
70
+ attr_reader :streams
71
+ attr_reader :message_ordering
72
+ attr_reader :callback_threads
73
+ attr_reader :push_threads
69
74
 
70
75
  ##
71
76
  # @private Implementation attributes.
@@ -306,6 +311,17 @@ module Google
306
311
  # @deprecated Use {#max_outstanding_bytes}.
307
312
  alias inventory_bytesize max_outstanding_bytes
308
313
 
314
+ ##
315
+ # Whether to enforce flow control at the client side only or to enforce it at both the client and
316
+ # the server. For more details about flow control see https://cloud.google.com/pubsub/docs/pull#config.
317
+ #
318
+ # @return [Boolean] `true` when only client side flow control is enforced, `false` when both client and
319
+ # server side flow control are enforced.
320
+ #
321
+ def use_legacy_flow_control?
322
+ @inventory[:use_legacy_flow_control]
323
+ end
324
+
309
325
  ##
310
326
  # The number of seconds that received messages can be held awaiting processing. Default is 3,600 (1 hour).
311
327
  #
@@ -334,7 +350,8 @@ module Google
334
350
  limit: @inventory[:max_outstanding_messages].fdiv(@streams).ceil,
335
351
  bytesize: @inventory[:max_outstanding_bytes].fdiv(@streams).ceil,
336
352
  extension: @inventory[:max_total_lease_duration],
337
- max_duration_per_lease_extension: @inventory[:max_duration_per_lease_extension]
353
+ max_duration_per_lease_extension: @inventory[:max_duration_per_lease_extension],
354
+ use_legacy_flow_control: @inventory[:use_legacy_flow_control]
338
355
  }
339
356
  end
340
357
 
@@ -377,6 +394,7 @@ module Google
377
394
  @inventory[:max_outstanding_bytes] = Integer(@inventory[:max_outstanding_bytes] || 100_000_000)
378
395
  @inventory[:max_total_lease_duration] = Integer(@inventory[:max_total_lease_duration] || 3600)
379
396
  @inventory[:max_duration_per_lease_extension] = Integer(@inventory[:max_duration_per_lease_extension] || 0)
397
+ @inventory[:use_legacy_flow_control] = @inventory[:use_legacy_flow_control] || false
380
398
  end
381
399
 
382
400
  def default_error_callbacks
@@ -30,15 +30,22 @@ module Google
30
30
 
31
31
  include MonitorMixin
32
32
 
33
- attr_reader :stream, :limit, :bytesize, :extension, :max_duration_per_lease_extension
34
-
35
- def initialize stream, limit:, bytesize:, extension:, max_duration_per_lease_extension:
33
+ attr_reader :stream
34
+ attr_reader :limit
35
+ attr_reader :bytesize
36
+ attr_reader :extension
37
+ attr_reader :max_duration_per_lease_extension
38
+ attr_reader :use_legacy_flow_control
39
+
40
+ def initialize stream, limit:, bytesize:, extension:, max_duration_per_lease_extension:,
41
+ use_legacy_flow_control:
36
42
  super()
37
43
  @stream = stream
38
44
  @limit = limit
39
45
  @bytesize = bytesize
40
46
  @extension = extension
41
47
  @max_duration_per_lease_extension = max_duration_per_lease_extension
48
+ @use_legacy_flow_control = use_legacy_flow_control
42
49
  @inventory = {}
43
50
  @wait_cond = new_cond
44
51
  end
@@ -58,7 +58,7 @@ module Google
58
58
  @paused = nil
59
59
  @pause_cond = new_cond
60
60
 
61
- @inventory = Inventory.new self, @subscriber.stream_inventory
61
+ @inventory = Inventory.new self, **@subscriber.stream_inventory
62
62
 
63
63
  @sequencer = Sequencer.new(&method(:perform_callback_async)) if subscriber.message_ordering
64
64
 
@@ -363,8 +363,8 @@ module Google
363
363
  req.modify_deadline_ack_ids += @inventory.ack_ids
364
364
  req.modify_deadline_seconds += @inventory.ack_ids.map { @subscriber.deadline }
365
365
  req.client_id = @subscriber.service.client_id
366
- req.max_outstanding_messages = @inventory.limit
367
- req.max_outstanding_bytes = @inventory.bytesize
366
+ req.max_outstanding_messages = @inventory.use_legacy_flow_control ? 0 : @inventory.limit
367
+ req.max_outstanding_bytes = @inventory.use_legacy_flow_control ? 0 : @inventory.bytesize
368
368
  end
369
369
  end
370
370
 
@@ -25,7 +25,8 @@ module Google
25
25
  class TimedUnaryBuffer
26
26
  include MonitorMixin
27
27
 
28
- attr_reader :max_bytes, :interval
28
+ attr_reader :max_bytes
29
+ attr_reader :interval
29
30
 
30
31
  def initialize subscriber, max_bytes: 500_000, interval: 1.0
31
32
  super() # to init MonitorMixin
@@ -138,7 +139,7 @@ module Google
138
139
  end
139
140
 
140
141
  groups = prev_reg.each_pair.group_by { |_ack_id, delay| delay }
141
- req_hash = Hash[groups.map { |k, v| [k, v.map(&:first)] }]
142
+ req_hash = groups.transform_values { |v| v.map(&:first) }
142
143
 
143
144
  requests = { acknowledge: [] }
144
145
  ack_ids = Array(req_hash.delete(:ack)) # ack has no deadline set
@@ -215,11 +216,9 @@ module Google
215
216
 
216
217
  def add_future pool
217
218
  Concurrent::Promises.future_on pool do
218
- begin
219
- yield
220
- rescue StandardError => e
221
- error! e
222
- end
219
+ yield
220
+ rescue StandardError => e
221
+ error! e
223
222
  end
224
223
  end
225
224
  end
@@ -77,7 +77,9 @@ module Google
77
77
  ##
78
78
  # The name of the subscription.
79
79
  #
80
- # @return [String]
80
+ # @return [String] A fully-qualified subscription name in the form
81
+ # `projects/{project_id}/subscriptions/{subscription_id}`.
82
+ #
81
83
  def name
82
84
  return @resource_name if reference?
83
85
  @grpc.name
@@ -330,7 +332,7 @@ module Google
330
332
  # If {#expires_in=} is not set, a *default* value of of 31 days will be
331
333
  # used. The minimum allowed value is 1 day.
332
334
  #
333
- # Makes an API call to retrieve the value when called on a
335
+ # Makes an API call to retrieve the expires_in value when called on a
334
336
  # reference object. See {#reference?}.
335
337
  #
336
338
  # @return [Numeric, nil] The expiration duration, or `nil` if unset.
@@ -365,6 +367,9 @@ module Google
365
367
  # `attributes` field matches the filter are delivered on this subscription. If empty, then no messages are
366
368
  # filtered out.
367
369
  #
370
+ # Makes an API call to retrieve the filter value when called on a reference
371
+ # object. See {#reference?}.
372
+ #
368
373
  # @return [String] The frozen filter string.
369
374
  #
370
375
  def filter
@@ -377,8 +382,8 @@ module Google
377
382
  # otherwise `nil`. Dead lettering is done on a best effort basis. The same message might be dead lettered
378
383
  # multiple times.
379
384
  #
380
- # See also {#dead_letter_topic=}, {#dead_letter_max_delivery_attempts=} and
381
- # {#dead_letter_max_delivery_attempts}.
385
+ # See also {#dead_letter_topic=}, {#dead_letter_max_delivery_attempts=}, {#dead_letter_max_delivery_attempts}
386
+ # and {#remove_dead_letter_policy}.
382
387
  #
383
388
  # Makes an API call to retrieve the topic name when called on a reference object. See {#reference?}.
384
389
  #
@@ -409,7 +414,11 @@ module Google
409
414
  # The operation will fail if the topic does not exist. Users should ensure that there is a subscription attached
410
415
  # to this topic since messages published to a topic with no subscriptions are lost.
411
416
  #
412
- # See also {#dead_letter_topic}, {#dead_letter_max_delivery_attempts=} and {#dead_letter_max_delivery_attempts}.
417
+ # Makes an API call to retrieve the dead_letter_policy value when called on a
418
+ # reference object. See {#reference?}.
419
+ #
420
+ # See also {#dead_letter_topic}, {#dead_letter_max_delivery_attempts=}, {#dead_letter_max_delivery_attempts}
421
+ # and {#remove_dead_letter_policy}.
413
422
  #
414
423
  # @param [Topic] new_dead_letter_topic The topic to which dead letter messages for the subscription should be
415
424
  # published.
@@ -441,14 +450,15 @@ module Google
441
450
  # acknowledgement deadline has been exceeded for the message). A NACK is any call to ModifyAckDeadline with a 0
442
451
  # deadline. Note that client libraries may automatically extend ack_deadlines.
443
452
  #
444
- # This field will be honored on a best effort basis. If this parameter is 0, a default value of 5 is used.
453
+ # This field will be honored on a best effort basis. If this parameter is `nil` or `0`, a default value of `5`
454
+ # is used.
445
455
  #
446
- # See also {#dead_letter_max_delivery_attempts=}, {#dead_letter_topic=} and {#dead_letter_topic}.
456
+ # See also {#dead_letter_max_delivery_attempts=}, {#dead_letter_topic=}, {#dead_letter_topic}
457
+ # and {#remove_dead_letter_policy}.
447
458
  #
448
- # Makes an API call to retrieve the value when called on a reference object. See {#reference?}.
459
+ # Makes an API call to retrieve the dead_letter_policy when called on a reference object. See {#reference?}.
449
460
  #
450
- # @return [Integer, nil] A value between 5 and 100, or `nil` if no dead letter policy is configured. If this
451
- # value is 0, a default value of 5 is used.
461
+ # @return [Integer, nil] A value between `5` and `100`, or `nil` if no dead letter policy is configured.
452
462
  #
453
463
  # @example
454
464
  # require "google/cloud/pubsub"
@@ -475,10 +485,15 @@ module Google
475
485
  #
476
486
  # This field will be honored on a best effort basis. If this parameter is 0, a default value of 5 is used.
477
487
  #
478
- # The dead letter topic must also be set. See {#dead_letter_topic=} and {#dead_letter_topic}.
488
+ # Makes an API call to retrieve the dead_letter_policy when called on a reference object. See {#reference?}.
489
+ #
490
+ # The dead letter topic must be set first. See {#dead_letter_topic=}, {#dead_letter_topic} and
491
+ # {#remove_dead_letter_policy}.
479
492
  #
480
- # @param [Integer] new_dead_letter_max_delivery_attempts A value between 5 and 100. If this parameter is 0, a
481
- # default value of 5 is used.
493
+ # @param [Integer, nil] new_dead_letter_max_delivery_attempts A value between 5 and 100. If this parameter is
494
+ # `nil` or `0`, a default value of 5 is used.
495
+ #
496
+ # @raise [ArgumentError] if the dead letter topic has not been set. See {#dead_letter_topic=}.
482
497
  #
483
498
  # @example
484
499
  # require "google/cloud/pubsub"
@@ -503,14 +518,48 @@ module Google
503
518
  @resource_name = nil
504
519
  end
505
520
 
521
+ ##
522
+ # Removes an existing dead letter policy. A dead letter policy specifies the conditions for dead lettering
523
+ # messages in the subscription. If a dead letter policy is not set, dead lettering is disabled.
524
+ #
525
+ # Makes an API call to retrieve the dead_letter_policy when called on a reference object. See {#reference?}.
526
+ #
527
+ # See {#dead_letter_topic}, {#dead_letter_topic=}, {#dead_letter_max_delivery_attempts} and
528
+ # {#dead_letter_max_delivery_attempts=}.
529
+ #
530
+ # @return [Boolean] `true` if an existing dead letter policy was removed, `false` if no existing dead letter
531
+ # policy was present.
532
+ #
533
+ # @example
534
+ # require "google/cloud/pubsub"
535
+ #
536
+ # pubsub = Google::Cloud::PubSub.new
537
+ #
538
+ # sub = pubsub.subscription "my-topic-sub"
539
+ #
540
+ # sub.dead_letter_topic.name #=> "projects/my-project/topics/my-dead-letter-topic"
541
+ # sub.dead_letter_max_delivery_attempts #=> 10
542
+ #
543
+ # sub.remove_dead_letter_policy
544
+ #
545
+ # sub.dead_letter_topic #=> nil
546
+ # sub.dead_letter_max_delivery_attempts #=> nil
547
+ #
548
+ def remove_dead_letter_policy
549
+ ensure_grpc!
550
+ return false if @grpc.dead_letter_policy.nil?
551
+ update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, dead_letter_policy: nil
552
+ @grpc = service.update_subscription update_grpc, :dead_letter_policy
553
+ true
554
+ end
555
+
506
556
  ##
507
557
  # A policy that specifies how Cloud Pub/Sub retries message delivery for this subscription. If `nil`, the
508
558
  # default retry policy is applied. This generally implies that messages will be retried as soon as possible
509
559
  # for healthy subscribers. Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events
510
560
  # for a given message.
511
561
  #
512
- # **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
513
- # production use. It is not subject to any SLA or deprecation policy.
562
+ # Makes an API call to retrieve the retry_policy when called on a reference object. See {#reference?}.
514
563
  #
515
564
  # @return [RetryPolicy, nil] The retry policy for the subscription, or `nil`.
516
565
  #
@@ -538,9 +587,6 @@ module Google
538
587
  # for healthy subscribers. Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events
539
588
  # for a given message.
540
589
  #
541
- # **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
542
- # production use. It is not subject to any SLA or deprecation policy.
543
- #
544
590
  # @param [RetryPolicy, nil] new_retry_policy A new retry policy for the subscription, or `nil`.
545
591
  #
546
592
  # @example
@@ -556,10 +602,11 @@ module Google
556
602
  # sub.retry_policy.maximum_backoff #=> 300
557
603
  #
558
604
  def retry_policy= new_retry_policy
559
- ensure_grpc!
605
+ ensure_service!
560
606
  new_retry_policy = new_retry_policy.to_grpc if new_retry_policy
561
607
  update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, retry_policy: new_retry_policy
562
608
  @grpc = service.update_subscription update_grpc, :retry_policy
609
+ @resource_name = nil
563
610
  end
564
611
 
565
612
  ##
@@ -591,7 +638,7 @@ module Google
591
638
  #
592
639
  # See {Topic#subscribe} and {#detach}.
593
640
  #
594
- # Makes an API call to retrieve the value when called on a
641
+ # Makes an API call to retrieve the detached value when called on a
595
642
  # reference object. See {#reference?}.
596
643
  #
597
644
  # @return [Boolean]
@@ -832,6 +879,9 @@ module Google
832
879
  # Default is 1,000. (Note: replaces `:limit`, which is deprecated.)
833
880
  # * `:max_outstanding_bytes` [Integer] The total byte size of received messages to be collected by
834
881
  # subscriber. Default is 100,000,000 (100MB). (Note: replaces `:bytesize`, which is deprecated.)
882
+ # * `:use_legacy_flow_control` [Boolean] Disables enforcing flow control settings at the Cloud PubSub
883
+ # server and the less accurate method of only enforcing flow control at the client side is used instead.
884
+ # Default is false.
835
885
  # * `:max_total_lease_duration` [Integer] The number of seconds that received messages can be held awaiting
836
886
  # processing. Default is 3,600 (1 hour). (Note: replaces `:extension`, which is deprecated.)
837
887
  # * `:max_duration_per_lease_extension` [Integer] The maximum amount of time in seconds for a single lease
@@ -1016,14 +1066,19 @@ module Google
1016
1066
  # * Any messages published to the subscription's topic following the
1017
1067
  # successful completion of the `create_snapshot` operation.
1018
1068
  #
1019
- # @param [String, nil] snapshot_name Name of the new snapshot. If the
1020
- # name is not provided, the server will assign a random name
1021
- # for this snapshot on the same project as the subscription. The
1022
- # format is `projects/{project}/snapshots/{snap}`. The name must start
1023
- # with a letter, and contain only letters ([A-Za-z]), numbers
1024
- # ([0-9], dashes (-), underscores (_), periods (.), tildes (~), plus
1025
- # (+) or percent signs (%). It must be between 3 and 255 characters in
1026
- # length, and it must not start with "goog". Optional.
1069
+ # @param [String, nil] snapshot_name Name of the new snapshot. Optional.
1070
+ # If the name is not provided, the server will assign a random name
1071
+ # for this snapshot on the same project as the subscription.
1072
+ # The value can be a simple snapshot ID (relative name), in which
1073
+ # case the current project ID will be supplied, or a fully-qualified
1074
+ # snapshot name in the form
1075
+ # `projects/{project_id}/snapshots/{snapshot_id}`.
1076
+ #
1077
+ # The snapshot ID (relative name) must start with a letter, and
1078
+ # contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
1079
+ # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
1080
+ # signs (`%`). It must be between 3 and 255 characters in length, and
1081
+ # it must not start with `goog`.
1027
1082
  # @param [Hash] labels A hash of user-provided labels associated with
1028
1083
  # the snapshot. You can use these to organize and group your
1029
1084
  # snapshots. Label keys and values can be no longer than 63
@@ -130,12 +130,12 @@ module Google
130
130
  # puts subscription.name
131
131
  # end
132
132
  #
133
- def all request_limit: nil
133
+ def all request_limit: nil, &block
134
134
  request_limit = request_limit.to_i if request_limit
135
135
  return enum_for :all, request_limit: request_limit unless block_given?
136
136
  results = self
137
137
  loop do
138
- results.each { |r| yield r }
138
+ results.each(&block)
139
139
  if request_limit
140
140
  request_limit -= 1
141
141
  break if request_limit.negative?
@@ -85,10 +85,10 @@ module Google
85
85
  end
86
86
 
87
87
  ##
88
- # The name of the topic in the form of
89
- # "/projects/project-identifier/topics/topic-name".
88
+ # The name of the topic.
90
89
  #
91
- # @return [String]
90
+ # @return [String] A fully-qualified topic name in the form
91
+ # `projects/{project_id}/topics/{topic_id}`.
92
92
  #
93
93
  def name
94
94
  return @resource_name if reference?
@@ -255,11 +255,17 @@ module Google
255
255
  ##
256
256
  # Creates a new {Subscription} object on the current Topic.
257
257
  #
258
- # @param [String] subscription_name Name of the new subscription. Must
259
- # start with a letter, and contain only letters ([A-Za-z]), numbers
260
- # ([0-9], dashes (-), underscores (_), periods (.), tildes (~), plus
261
- # (+) or percent signs (%). It must be between 3 and 255 characters in
262
- # length, and it must not start with "goog". Required.
258
+ # @param [String] subscription_name Name of the new subscription. Required.
259
+ # The value can be a simple subscription ID (relative name), in which
260
+ # case the current project ID will be supplied, or a fully-qualified
261
+ # subscription name in the form
262
+ # `projects/{project_id}/subscriptions/{subscription_id}`.
263
+ #
264
+ # The subscription ID (relative name) must start with a letter, and
265
+ # contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
266
+ # underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
267
+ # signs (`%`). It must be between 3 and 255 characters in length, and
268
+ # it must not start with `goog`.
263
269
  # @param [Integer] deadline The maximum number of seconds after a
264
270
  # subscriber receives a message before the subscriber should
265
271
  # acknowledge the message.
@@ -309,9 +315,6 @@ module Google
309
315
  # will be retried as soon as possible for healthy subscribers. Retry Policy will be triggered on NACKs or
310
316
  # acknowledgement deadline exceeded events for a given message.
311
317
  #
312
- # **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
313
- # production use. It is not subject to any SLA or deprecation policy.
314
- #
315
318
  # @return [Google::Cloud::PubSub::Subscription]
316
319
  #
317
320
  # @example
@@ -418,7 +421,11 @@ module Google
418
421
  ##
419
422
  # Retrieves subscription by name.
420
423
  #
421
- # @param [String] subscription_name Name of a subscription.
424
+ # @param [String] subscription_name Name of a subscription. The value
425
+ # can be a simple subscription ID (relative name), in which case the
426
+ # current project ID will be supplied, or a fully-qualified
427
+ # subscription name in the form
428
+ # `projects/{project_id}/subscriptions/{subscription_id}`.
422
429
  # @param [Boolean] skip_lookup Optionally create a {Subscription} object
423
430
  # without verifying the subscription resource exists on the Pub/Sub
424
431
  # service. Calls made on this object will raise errors if the service
@@ -670,7 +677,7 @@ module Google
670
677
  def publish_async data = nil, attributes = nil, ordering_key: nil, **extra_attrs, &callback
671
678
  ensure_service!
672
679
 
673
- @async_publisher ||= AsyncPublisher.new name, service, @async_opts
680
+ @async_publisher ||= AsyncPublisher.new name, service, **@async_opts
674
681
  @async_publisher.publish data, attributes, ordering_key: ordering_key, **extra_attrs, &callback
675
682
  end
676
683
 
@@ -686,7 +693,7 @@ module Google
686
693
  # {Subscription#listen}, and {Message#ordering_key}.
687
694
  #
688
695
  def enable_message_ordering!
689
- @async_publisher ||= AsyncPublisher.new name, service, @async_opts
696
+ @async_publisher ||= AsyncPublisher.new name, service, **@async_opts
690
697
  @async_publisher.enable_message_ordering!
691
698
  end
692
699
 
@@ -702,7 +709,7 @@ module Google
702
709
  # @return [Boolean]
703
710
  #
704
711
  def message_ordering?
705
- @async_publisher ||= AsyncPublisher.new name, service, @async_opts
712
+ @async_publisher ||= AsyncPublisher.new name, service, **@async_opts
706
713
  @async_publisher.message_ordering?
707
714
  end
708
715
 
@@ -715,7 +722,7 @@ module Google
715
722
  # @return [boolean] `true` when resumed, `false` otherwise.
716
723
  #
717
724
  def resume_publish ordering_key
718
- @async_publisher ||= AsyncPublisher.new name, service, @async_opts
725
+ @async_publisher ||= AsyncPublisher.new name, service, **@async_opts
719
726
  @async_publisher.resume_publish ordering_key
720
727
  end
721
728
 
@@ -124,12 +124,12 @@ module Google
124
124
  # puts topic.name
125
125
  # end
126
126
  #
127
- def all request_limit: nil
127
+ def all request_limit: nil, &block
128
128
  request_limit = request_limit.to_i if request_limit
129
129
  return enum_for :all, request_limit: request_limit unless block_given?
130
130
  results = self
131
131
  loop do
132
- results.each { |r| yield r }
132
+ results.each(&block)
133
133
  if request_limit
134
134
  request_limit -= 1
135
135
  break if request_limit.negative?
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module PubSub
19
- VERSION = "2.1.1".freeze
19
+ VERSION = "2.4.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.1.1
4
+ version: 2.4.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: 2020-10-26 00:00:00.000000000 Z
12
+ date: 2021-03-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -73,14 +73,14 @@ dependencies:
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: 1.24.0
76
+ version: 1.25.1
77
77
  type: :development
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
81
  - - "~>"
82
82
  - !ruby/object:Gem::Version
83
- version: 1.24.0
83
+ version: 1.25.1
84
84
  - !ruby/object:Gem::Dependency
85
85
  name: minitest
86
86
  requirement: !ruby/object:Gem::Requirement
@@ -252,14 +252,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
252
252
  requirements:
253
253
  - - ">="
254
254
  - !ruby/object:Gem::Version
255
- version: '2.4'
255
+ version: '2.5'
256
256
  required_rubygems_version: !ruby/object:Gem::Requirement
257
257
  requirements:
258
258
  - - ">="
259
259
  - !ruby/object:Gem::Version
260
260
  version: '0'
261
261
  requirements: []
262
- rubygems_version: 3.1.4
262
+ rubygems_version: 3.2.13
263
263
  signing_key:
264
264
  specification_version: 4
265
265
  summary: API Client library for Google Cloud Pub/Sub