google-cloud-pubsub 1.6.1 → 1.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: 65b27ec5d2bc4fe8948301c5a6d56adb62e436bb0d5da35997cc77bb05e2af59
4
- data.tar.gz: 9f7eba965695f834c77cb50f229b2a84ae9d0039528f203b5a0e9db6758e0ae9
3
+ metadata.gz: 43ee60087a74bfc9938a61cf66f67b937f30c440f921ef83294f5dd2ec8e1079
4
+ data.tar.gz: 9104bacc161434e7edc1b5553cb0d2f2681ddd6a6a000bf947e212af7dad4df0
5
5
  SHA512:
6
- metadata.gz: 4cb430ff1c904e6ca3248f024e8b9f82aafc5c28ca90fd45f5265a86df70fc7e48cf68d93e0b71ef4d1946beb2319e898aa6c3c8ca4f78085490b330899f9991
7
- data.tar.gz: 8b0af8b3bb8eed0dc11c5e30a61bfb0502758340f5f7062c5f040b371231f58c057bc2d154cdb5a572e81bb674f12c27ed2f734f267a3006f06cd53b2ee6bee8
6
+ metadata.gz: 4130c4d2961f54b8cf6f1a5957f50d50e37d57bcd56d032df3bbc10497e8788d55e405c69b8570cc24322800af37a35e49daf67755b1652b763b5a9da44b464e
7
+ data.tar.gz: 5777e0c8d1ca9d56c2a94056971b1e59ccf63e3a1e6dd532f5d223f7a6b8a80f0f0aa29bf1aa984376b48d279bccc3e23aa4ff50940c47b4920c47a6340e5975
@@ -1,5 +1,40 @@
1
1
  # Release History
2
2
 
3
+ ### 1.10.0 / 2020-07-23
4
+
5
+ #### Features
6
+
7
+ * Add Subscription#detach and #detached?
8
+
9
+ ### 1.9.0 / 2020-07-21
10
+
11
+ #### Features
12
+
13
+ * Add support for server-side flow control
14
+
15
+ ### 1.8.0 / 2020-06-29
16
+
17
+ #### Features
18
+
19
+ * Add Subscription#filter
20
+
21
+ ### 1.7.1 / 2020-05-28
22
+
23
+ #### Documentation
24
+
25
+ * Fix a few broken links
26
+
27
+ ### 1.7.0 / 2020-05-21
28
+
29
+ #### Features
30
+
31
+ * Add Retry Policy support
32
+ * Add RetryPolicy
33
+ * Add retry_policy param to Topic#subscribe
34
+ * Add Subscription#retry_policy
35
+ * Add Subscription#retry_policy=
36
+ * Set client-scoped UUID in initial StreamingPullRequest#client_id
37
+
3
38
  ### 1.6.1 / 2020-05-06
4
39
 
5
40
  #### Documentation
@@ -24,14 +24,8 @@ improved, *please* create a new issue on GitHub so we can talk about it.
24
24
 
25
25
  - [New issue][gh-ruby]
26
26
 
27
- Or, you can ask questions on the [Google Cloud Platform Slack][slack-ruby]. You
28
- can use the "ruby" channel for general Ruby questions, or use the
29
- "google-cloud-ruby" channel if you have questions about this gem in particular.
30
-
31
27
  [so-ruby]: http://stackoverflow.com/questions/tagged/google-cloud-platform+ruby+pubsub
32
28
 
33
- [gh-search-ruby]: https://github.com/googlecloudplatform/google-cloud-ruby/issues?q=label%3A%22api%3A+pubsub%22
34
-
35
- [gh-ruby]: https://github.com/googlecloudplatform/google-cloud-ruby/issues/new
29
+ [gh-search-ruby]: https://github.com/googleapis/google-cloud-ruby/issues?q=label%3A%22api%3A+pubsub%22
36
30
 
37
- [slack-ruby]: https://gcp-slack.appspot.com/
31
+ [gh-ruby]: https://github.com/googleapis/google-cloud-ruby/issues/new
@@ -0,0 +1,90 @@
1
+ # Copyright 2016 Google LLC
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+
16
+ require "google/cloud/errors"
17
+
18
+ module Google
19
+ module Cloud
20
+ module PubSub
21
+ ##
22
+ # # RetryPolicy
23
+ #
24
+ # An immutable Retry Policy value object that specifies how Cloud Pub/Sub retries message delivery.
25
+ #
26
+ # Retry delay will be exponential based on provided minimum and maximum backoffs. (See [Exponential
27
+ # backoff](https://en.wikipedia.org/wiki/Exponential_backoff).)
28
+ #
29
+ # Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events for a given message.
30
+ #
31
+ # Retry Policy is implemented on a best effort basis. At times, the delay between consecutive deliveries may not
32
+ # match the configuration. That is, delay can be more or less than configured backoff.
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
+ # @attr [Numeric] minimum_backoff The minimum delay between consecutive deliveries of a given message. Value
38
+ # should be between 0 and 600 seconds. The default value is 10 seconds.
39
+ # @attr [Numeric] maximum_backoff The maximum delay between consecutive deliveries of a given message. Value
40
+ # should be between 0 and 600 seconds. The default value is 600 seconds.
41
+ #
42
+ # @example
43
+ # require "google/cloud/pubsub"
44
+ #
45
+ # pubsub = Google::Cloud::PubSub.new
46
+ #
47
+ # sub = pubsub.subscription "my-topic-sub"
48
+ #
49
+ # sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
50
+ #
51
+ # sub.retry_policy.minimum_backoff #=> 5
52
+ # sub.retry_policy.maximum_backoff #=> 300
53
+ #
54
+ class RetryPolicy
55
+ attr_reader :minimum_backoff, :maximum_backoff
56
+
57
+ ##
58
+ # Creates a new, immutable RetryPolicy value object.
59
+ #
60
+ # @attr [Numeric, nil] minimum_backoff The minimum delay between consecutive deliveries of a given message.
61
+ # Value should be between 0 and 600 seconds. If `nil` is provided, the default value is 10 seconds.
62
+ # @attr [Numeric, nil] maximum_backoff The maximum delay between consecutive deliveries of a given message.
63
+ # Value should be between 0 and 600 seconds. If `nil` is provided, the default value is 600 seconds.
64
+ #
65
+ def initialize minimum_backoff: nil, maximum_backoff: nil
66
+ @minimum_backoff = minimum_backoff
67
+ @maximum_backoff = maximum_backoff
68
+ end
69
+
70
+ ##
71
+ # @private Convert the RetryPolicy to a Google::Cloud::PubSub::V1::RetryPolicy object.
72
+ def to_grpc
73
+ Google::Cloud::PubSub::V1::RetryPolicy.new(
74
+ minimum_backoff: Convert.number_to_duration(minimum_backoff),
75
+ maximum_backoff: Convert.number_to_duration(maximum_backoff)
76
+ )
77
+ end
78
+
79
+ ##
80
+ # @private New RetryPolicy from a Google::Cloud::PubSub::V1::RetryPolicy object.
81
+ def self.from_grpc grpc
82
+ new(
83
+ minimum_backoff: Convert.duration_to_number(grpc.minimum_backoff),
84
+ maximum_backoff: Convert.duration_to_number(grpc.maximum_backoff)
85
+ )
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -19,6 +19,7 @@ require "google/cloud/pubsub/convert"
19
19
  require "google/cloud/pubsub/version"
20
20
  require "google/cloud/pubsub/v1"
21
21
  require "google/gax/errors"
22
+ require "securerandom"
22
23
 
23
24
  module Google
24
25
  module Cloud
@@ -28,6 +29,12 @@ module Google
28
29
  # methods.
29
30
  class Service
30
31
  attr_accessor :project, :credentials, :host, :timeout, :client_config
32
+ ###
33
+ # The same client_id is used across all streaming pull connections that are created by this client. This is
34
+ # intentional, as it indicates to the server that any guarantees, such as message ordering, made for a stream
35
+ # that is disconnected will be made for the stream that is created to replace it. The attr_accessor allows the
36
+ # value to be replaced for unit testing.
37
+ attr_accessor :client_id
31
38
 
32
39
  ##
33
40
  # Creates a new Service instance.
@@ -38,6 +45,7 @@ module Google
38
45
  @host = host || V1::PublisherClient::SERVICE_ADDRESS
39
46
  @timeout = timeout
40
47
  @client_config = client_config || {}
48
+ @client_id = SecureRandom.uuid.freeze
41
49
  end
42
50
 
43
51
  def channel
@@ -233,21 +241,18 @@ module Google
233
241
  push_endpoint: options[:endpoint],
234
242
  attributes: (options[:attributes] || {}).to_h
235
243
  end
236
- deadline = options[:deadline]
237
- retain_acked = options[:retain_acked]
238
- mrd = Convert.number_to_duration options[:retention]
239
- labels = options[:labels]
240
- message_ordering = options[:message_ordering]
241
244
  execute do
242
245
  subscriber.create_subscription \
243
246
  name, topic,
244
247
  push_config: push_config,
245
- ack_deadline_seconds: deadline,
246
- retain_acked_messages: retain_acked,
247
- message_retention_duration: mrd,
248
- labels: labels,
249
- enable_message_ordering: message_ordering,
248
+ ack_deadline_seconds: options[:deadline],
249
+ retain_acked_messages: options[:retain_acked],
250
+ message_retention_duration: Convert.number_to_duration(options[:retention]),
251
+ labels: options[:labels],
252
+ enable_message_ordering: options[:message_ordering],
253
+ filter: options[:filter],
250
254
  dead_letter_policy: dead_letter_policy(options),
255
+ retry_policy: options[:retry_policy],
251
256
  options: default_options
252
257
  end
253
258
  end
@@ -260,12 +265,20 @@ module Google
260
265
  end
261
266
 
262
267
  ##
263
- # Deletes an existing subscription.
264
- # All pending messages in the subscription are immediately dropped.
268
+ # Deletes an existing subscription. All pending messages in the subscription are immediately dropped.
265
269
  def delete_subscription subscription
266
270
  execute do
267
- subscriber.delete_subscription subscription_path(subscription),
268
- options: default_options
271
+ subscriber.delete_subscription subscription_path(subscription), options: default_options
272
+ end
273
+ end
274
+
275
+ ##
276
+ # Detaches a subscription from its topic. All messages retained in the subscription are dropped. Subsequent
277
+ # `Pull` and `StreamingPull` requests will raise `FAILED_PRECONDITION`. If the subscription is a push
278
+ # subscription, pushes to the endpoint will stop.
279
+ def detach_subscription subscription
280
+ execute do
281
+ publisher.detach_subscription subscription_path(subscription), options: default_options
269
282
  end
270
283
  end
271
284
 
@@ -363,6 +363,9 @@ module Google
363
363
  req.stream_ack_deadline_seconds = @subscriber.deadline
364
364
  req.modify_deadline_ack_ids += @inventory.ack_ids
365
365
  req.modify_deadline_seconds += @inventory.ack_ids.map { @subscriber.deadline }
366
+ req.client_id = @subscriber.service.client_id
367
+ req.max_outstanding_messages = @inventory.limit
368
+ req.max_outstanding_bytes = @inventory.bytesize
366
369
  end
367
370
  end
368
371
 
@@ -18,6 +18,7 @@ require "google/cloud/errors"
18
18
  require "google/cloud/pubsub/subscription/list"
19
19
  require "google/cloud/pubsub/subscription/push_config"
20
20
  require "google/cloud/pubsub/received_message"
21
+ require "google/cloud/pubsub/retry_policy"
21
22
  require "google/cloud/pubsub/snapshot"
22
23
  require "google/cloud/pubsub/subscriber"
23
24
  require "google/cloud/pubsub/v1"
@@ -322,7 +323,7 @@ module Google
322
323
  # If {#expires_in=} is not set, a *default* value of of 31 days will be
323
324
  # used. The minimum allowed value is 1 day.
324
325
  #
325
- # Makes an API call to retrieve the labels value when called on a
326
+ # Makes an API call to retrieve the value when called on a
326
327
  # reference object. See {#reference?}.
327
328
  #
328
329
  # @return [Numeric, nil] The expiration duration, or `nil` if unset.
@@ -352,6 +353,18 @@ module Google
352
353
  @resource_name = nil
353
354
  end
354
355
 
356
+ ##
357
+ # An expression written in the Cloud Pub/Sub filter language. If non-empty, then only {Message} instances whose
358
+ # `attributes` field matches the filter are delivered on this subscription. If empty, then no messages are
359
+ # filtered out.
360
+ #
361
+ # @return [String] The frozen filter string.
362
+ #
363
+ def filter
364
+ ensure_grpc!
365
+ @grpc.filter.freeze
366
+ end
367
+
355
368
  ##
356
369
  # Returns the {Topic} to which dead letter messages should be published if a dead letter policy is configured,
357
370
  # otherwise `nil`. Dead lettering is done on a best effort basis. The same message might be dead lettered
@@ -483,6 +496,65 @@ module Google
483
496
  @resource_name = nil
484
497
  end
485
498
 
499
+ ##
500
+ # A policy that specifies how Cloud Pub/Sub retries message delivery for this subscription. If `nil`, the
501
+ # default retry policy is applied. This generally implies that messages will be retried as soon as possible
502
+ # for healthy subscribers. Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events
503
+ # for a given message.
504
+ #
505
+ # **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
506
+ # production use. It is not subject to any SLA or deprecation policy.
507
+ #
508
+ # @return [RetryPolicy, nil] The retry policy for the subscription, or `nil`.
509
+ #
510
+ # @example
511
+ # require "google/cloud/pubsub"
512
+ #
513
+ # pubsub = Google::Cloud::PubSub.new
514
+ #
515
+ # sub = pubsub.subscription "my-topic-sub"
516
+ #
517
+ # sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
518
+ #
519
+ # sub.retry_policy.minimum_backoff #=> 5
520
+ # sub.retry_policy.maximum_backoff #=> 300
521
+ #
522
+ def retry_policy
523
+ ensure_grpc!
524
+ return nil unless @grpc.retry_policy
525
+ RetryPolicy.from_grpc @grpc.retry_policy
526
+ end
527
+
528
+ ##
529
+ # Sets a policy that specifies how Cloud Pub/Sub retries message delivery for this subscription. If `nil`, the
530
+ # default retry policy is applied. This generally implies that messages will be retried as soon as possible
531
+ # for healthy subscribers. Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events
532
+ # for a given message.
533
+ #
534
+ # **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
535
+ # production use. It is not subject to any SLA or deprecation policy.
536
+ #
537
+ # @param [RetryPolicy, nil] new_retry_policy A new retry policy for the subscription, or `nil`.
538
+ #
539
+ # @example
540
+ # require "google/cloud/pubsub"
541
+ #
542
+ # pubsub = Google::Cloud::PubSub.new
543
+ #
544
+ # sub = pubsub.subscription "my-topic-sub"
545
+ #
546
+ # sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
547
+ #
548
+ # sub.retry_policy.minimum_backoff #=> 5
549
+ # sub.retry_policy.maximum_backoff #=> 300
550
+ #
551
+ def retry_policy= new_retry_policy
552
+ ensure_grpc!
553
+ new_retry_policy = new_retry_policy.to_grpc if new_retry_policy
554
+ update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, retry_policy: new_retry_policy
555
+ @grpc = service.update_subscription update_grpc, :retry_policy
556
+ end
557
+
486
558
  ##
487
559
  # Whether message ordering has been enabled. When enabled, messages
488
560
  # published with the same `ordering_key` will be delivered in the order
@@ -494,7 +566,7 @@ module Google
494
566
  #
495
567
  # See {Topic#publish_async}, {#listen}, and {Message#ordering_key}.
496
568
  #
497
- # Makes an API call to retrieve the retain_acked value when called on a
569
+ # Makes an API call to retrieve the enable_message_ordering value when called on a
498
570
  # reference object. See {#reference?}.
499
571
  #
500
572
  # @return [Boolean]
@@ -504,6 +576,35 @@ module Google
504
576
  @grpc.enable_message_ordering
505
577
  end
506
578
 
579
+ ##
580
+ # Whether the subscription is detached from its topic. Detached subscriptions don't receive messages from their
581
+ # topic and don't retain any backlog. {#pull} and {#listen} (pull and streaming pull) operations will raise
582
+ # `FAILED_PRECONDITION`. If the subscription is a push subscription (see {#push_config}), pushes to the endpoint
583
+ # will not be made. The default value is `false`.
584
+ #
585
+ # See {Topic#subscribe} and {#detach}.
586
+ #
587
+ # Makes an API call to retrieve the value when called on a
588
+ # reference object. See {#reference?}.
589
+ #
590
+ # @return [Boolean]
591
+ #
592
+ # @example
593
+ # require "google/cloud/pubsub"
594
+ #
595
+ # pubsub = Google::Cloud::PubSub.new
596
+ #
597
+ # sub = pubsub.subscription "my-topic-sub"
598
+ # sub.detach
599
+ #
600
+ # # sleep 120
601
+ # sub.detached? #=> true
602
+ #
603
+ def detached?
604
+ ensure_grpc!
605
+ @grpc.detached
606
+ end
607
+
507
608
  ##
508
609
  # Determines whether the subscription exists in the Pub/Sub service.
509
610
  #
@@ -551,6 +652,32 @@ module Google
551
652
  true
552
653
  end
553
654
 
655
+ ##
656
+ # Detaches a subscription from its topic. All messages retained in the subscription are dropped. Detached
657
+ # subscriptions don't receive messages from their topic and don't retain any backlog. Subsequent {#pull} and
658
+ # {#listen} (pull and streaming pull) operations will raise `FAILED_PRECONDITION`. If the subscription is a push
659
+ # subscription (see {#push_config}), pushes to the endpoint will stop. It may take a few minutes for the
660
+ # subscription's detached state to be reflected in subsequent calls to {#detached?}.
661
+ #
662
+ # @return [Boolean] Returns `true` if the detach operation was successful.
663
+ #
664
+ # @example
665
+ # require "google/cloud/pubsub"
666
+ #
667
+ # pubsub = Google::Cloud::PubSub.new
668
+ #
669
+ # sub = pubsub.subscription "my-topic-sub"
670
+ # sub.detach
671
+ #
672
+ # # sleep 120
673
+ # sub.detached? #=> true
674
+ #
675
+ def detach
676
+ ensure_service!
677
+ service.detach_subscription name
678
+ true
679
+ end
680
+
554
681
  ##
555
682
  # Pulls messages from the server. Returns an empty list if there are no
556
683
  # messages available in the backlog. Raises an ApiError with status
@@ -19,6 +19,7 @@ require "google/cloud/pubsub/async_publisher"
19
19
  require "google/cloud/pubsub/batch_publisher"
20
20
  require "google/cloud/pubsub/subscription"
21
21
  require "google/cloud/pubsub/policy"
22
+ require "google/cloud/pubsub/retry_policy"
22
23
 
23
24
  module Google
24
25
  module Cloud
@@ -285,6 +286,9 @@ module Google
285
286
  # Managing Labels](https://cloud.google.com/pubsub/docs/labels).
286
287
  # @param [Boolean] message_ordering Whether to enable message ordering
287
288
  # on the subscription.
289
+ # @param [String] filter An expression written in the Cloud Pub/Sub filter language. If non-empty, then only
290
+ # {Message} instances whose `attributes` field matches the filter are delivered on this subscription. If
291
+ # empty, then no messages are filtered out. Optional.
288
292
  # @param [Topic] dead_letter_topic The {Topic} to which dead letter messages for the subscription should be
289
293
  # published. Dead lettering is done on a best effort basis. The same message might be dead lettered multiple
290
294
  # times. The Cloud Pub/Sub service account associated with the enclosing subscription's parent project (i.e.,
@@ -297,6 +301,13 @@ module Google
297
301
  # the subscription's dead letter policy. Dead lettering is done on a best effort basis. The same message might
298
302
  # be dead lettered multiple times. The value must be between 5 and 100. If this parameter is 0, a default
299
303
  # value of 5 is used. The `dead_letter_topic` must also be set.
304
+ # @param [RetryPolicy] retry_policy A policy that specifies how Cloud Pub/Sub retries message delivery for
305
+ # this subscription. If not set, the default retry policy is applied. This generally implies that messages
306
+ # will be retried as soon as possible for healthy subscribers. Retry Policy will be triggered on NACKs or
307
+ # acknowledgement deadline exceeded events for a given message.
308
+ #
309
+ # **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
310
+ # production use. It is not subject to any SLA or deprecation policy.
300
311
  #
301
312
  # @return [Google::Cloud::PubSub::Subscription]
302
313
  #
@@ -340,17 +351,30 @@ module Google
340
351
  # dead_letter_topic: dead_letter_topic,
341
352
  # dead_letter_max_delivery_attempts: 10
342
353
  #
354
+ # @example Configure a Retry Policy:
355
+ # require "google/cloud/pubsub"
356
+ #
357
+ # pubsub = Google::Cloud::PubSub.new
358
+ #
359
+ # topic = pubsub.topic "my-topic"
360
+ #
361
+ # retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
362
+ # sub = topic.subscribe "my-topic-sub", retry_policy: retry_policy
363
+ #
343
364
  def subscribe subscription_name, deadline: nil, retain_acked: false, retention: nil, endpoint: nil, labels: nil,
344
- message_ordering: nil, dead_letter_topic: nil, dead_letter_max_delivery_attempts: nil
365
+ message_ordering: nil, filter: nil, dead_letter_topic: nil,
366
+ dead_letter_max_delivery_attempts: nil, retry_policy: nil
345
367
  ensure_service!
346
368
  options = { deadline: deadline, retain_acked: retain_acked, retention: retention, endpoint: endpoint,
347
- labels: labels, message_ordering: message_ordering,
369
+ labels: labels, message_ordering: message_ordering, filter: filter,
348
370
  dead_letter_max_delivery_attempts: dead_letter_max_delivery_attempts }
371
+
349
372
  options[:dead_letter_topic_name] = dead_letter_topic.name if dead_letter_topic
350
373
  if options[:dead_letter_max_delivery_attempts] && !options[:dead_letter_topic_name]
351
374
  # Service error message "3:Invalid resource name given (name=)." does not identify param.
352
375
  raise ArgumentError, "dead_letter_topic is required with dead_letter_max_delivery_attempts"
353
376
  end
377
+ options[:retry_policy] = retry_policy.to_grpc if retry_policy
354
378
  grpc = service.create_subscription name, subscription_name, options
355
379
  Subscription.from_grpc grpc, service
356
380
  end
@@ -17,6 +17,7 @@ module Google
17
17
  module Cloud
18
18
  module PubSub
19
19
  module V1
20
+ # A policy constraining the storage of messages published to the topic.
20
21
  # @!attribute [rw] allowed_persistence_regions
21
22
  # @return [Array<String>]
22
23
  # A list of IDs of GCP regions where messages that are published to the topic
@@ -67,7 +68,8 @@ module Google
67
68
  # @!attribute [rw] attributes
68
69
  # @return [Hash{String => String}]
69
70
  # Attributes for this message. If this field is empty, the message must
70
- # contain non-empty data.
71
+ # contain non-empty data. This can be used to filter messages on the
72
+ # subscription.
71
73
  # @!attribute [rw] message_id
72
74
  # @return [String]
73
75
  # ID of this message, assigned by the server when the message is published.
@@ -173,7 +175,7 @@ module Google
173
175
  # Response for the `ListTopicSubscriptions` method.
174
176
  # @!attribute [rw] subscriptions
175
177
  # @return [Array<String>]
176
- # The names of the subscriptions that match the request.
178
+ # The names of subscriptions attached to the topic specified in the request.
177
179
  # @!attribute [rw] next_page_token
178
180
  # @return [String]
179
181
  # If not empty, indicates that there may be more subscriptions that match
@@ -214,6 +216,17 @@ module Google
214
216
  # Format is `projects/{project}/topics/{topic}`.
215
217
  class DeleteTopicRequest; end
216
218
 
219
+ # Request for the DetachSubscription method.
220
+ # @!attribute [rw] subscription
221
+ # @return [String]
222
+ # Required. The subscription to detach.
223
+ # Format is `projects/{project}/subscriptions/{subscription}`.
224
+ class DetachSubscriptionRequest; end
225
+
226
+ # Response for the DetachSubscription method.
227
+ # Reserved for future use.
228
+ class DetachSubscriptionResponse; end
229
+
217
230
  # A subscription resource.
218
231
  # @!attribute [rw] name
219
232
  # @return [String]
@@ -295,13 +308,11 @@ module Google
295
308
  # value for `expiration_policy.ttl` is 1 day.
296
309
  # @!attribute [rw] filter
297
310
  # @return [String]
298
- # An expression written in the Cloud Pub/Sub filter language. If non-empty,
311
+ # An expression written in the Pub/Sub [filter
312
+ # language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
299
313
  # then only `PubsubMessage`s whose `attributes` field matches the filter are
300
314
  # delivered on this subscription. If empty, then no messages are filtered
301
315
  # out.
302
- # <b>EXPERIMENTAL:</b> This feature is part of a closed alpha release. This
303
- # API might be changed in backward-incompatible ways and is not recommended
304
- # for production use. It is not subject to any SLA or deprecation policy.
305
316
  # @!attribute [rw] dead_letter_policy
306
317
  # @return [Google::Cloud::PubSub::V1::DeadLetterPolicy]
307
318
  # A policy that specifies the conditions for dead lettering messages in
@@ -314,16 +325,20 @@ module Google
314
325
  # permission to Acknowledge() messages on this subscription.
315
326
  # @!attribute [rw] retry_policy
316
327
  # @return [Google::Cloud::PubSub::V1::RetryPolicy]
317
- # A policy that specifies how Cloud Pub/Sub retries message delivery for this
328
+ # A policy that specifies how Pub/Sub retries message delivery for this
318
329
  # subscription.
319
330
  #
320
331
  # If not set, the default retry policy is applied. This generally implies
321
332
  # that messages will be retried as soon as possible for healthy subscribers.
322
333
  # RetryPolicy will be triggered on NACKs or acknowledgement deadline
323
334
  # exceeded events for a given message.
324
- # <b>EXPERIMENTAL:</b> This API might be changed in backward-incompatible
325
- # ways and is not recommended for production use. It is not subject to any
326
- # SLA or deprecation policy.
335
+ # @!attribute [rw] detached
336
+ # @return [true, false]
337
+ # Indicates whether the subscription is detached from its topic. Detached
338
+ # subscriptions don't receive messages from their topic and don't retain any
339
+ # backlog. `Pull` and `StreamingPull` requests will return
340
+ # FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
341
+ # the endpoint will not be made.
327
342
  class Subscription; end
328
343
 
329
344
  # A policy that specifies how Cloud Pub/Sub retries message delivery.
@@ -455,8 +470,11 @@ module Google
455
470
  # The message.
456
471
  # @!attribute [rw] delivery_attempt
457
472
  # @return [Integer]
458
- # Delivery attempt counter is 1 + (the sum of number of NACKs and number of
459
- # ack_deadline exceeds) for this message.
473
+ # The approximate number of times that Cloud Pub/Sub has attempted to deliver
474
+ # the associated message to a subscriber.
475
+ #
476
+ # More precisely, this is 1 + (number of NACKs) +
477
+ # (number of ack_deadline exceeds) for this message.
460
478
  #
461
479
  # A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline
462
480
  # exceeds event is whenever a message is not acknowledged within
@@ -464,13 +482,10 @@ module Google
464
482
  # Subscription.ackDeadlineSeconds, but may get extended automatically by
465
483
  # the client library.
466
484
  #
467
- # The first delivery of a given message will have this value as 1. The value
468
- # is calculated at best effort and is approximate.
485
+ # Upon the first delivery of a given message, `delivery_attempt` will have a
486
+ # value of 1. The value is calculated at best effort and is approximate.
469
487
  #
470
488
  # If a DeadLetterPolicy is not set on the subscription, this will be 0.
471
- # <b>EXPERIMENTAL:</b> This feature is part of a closed alpha release. This
472
- # API might be changed in backward-incompatible ways and is not recommended
473
- # for production use. It is not subject to any SLA or deprecation policy.
474
489
  class ReceivedMessage; end
475
490
 
476
491
  # Request for the GetSubscription method.
@@ -650,6 +665,28 @@ module Google
650
665
  # to the same value so that state associated with the old stream can be
651
666
  # transferred to the new stream. The same client_id should not be used for
652
667
  # different client instances.
668
+ # @!attribute [rw] max_outstanding_messages
669
+ # @return [Integer]
670
+ # Flow control settings for the maximum number of outstanding messages. When
671
+ # there are `max_outstanding_messages` or more currently sent to the
672
+ # streaming pull client that have not yet been acked or nacked, the server
673
+ # stops sending more messages. The sending of messages resumes once the
674
+ # number of outstanding messages is less than this value. If the value is
675
+ # <= 0, there is no limit to the number of outstanding messages. This
676
+ # property can only be set on the initial StreamingPullRequest. If it is set
677
+ # on a subsequent request, the stream will be aborted with status
678
+ # `INVALID_ARGUMENT`.
679
+ # @!attribute [rw] max_outstanding_bytes
680
+ # @return [Integer]
681
+ # Flow control settings for the maximum number of outstanding bytes. When
682
+ # there are `max_outstanding_bytes` or more worth of messages currently sent
683
+ # to the streaming pull client that have not yet been acked or nacked, the
684
+ # server will stop sending more messages. The sending of messages resumes
685
+ # once the number of outstanding bytes is less than this value. If the value
686
+ # is <= 0, there is no limit to the number of outstanding bytes. This
687
+ # property can only be set on the initial StreamingPullRequest. If it is set
688
+ # on a subsequent request, the stream will be aborted with status
689
+ # `INVALID_ARGUMENT`.
653
690
  class StreamingPullRequest; end
654
691
 
655
692
  # Response for the `StreamingPull` method. This response is used to stream
@@ -98,6 +98,12 @@ module Google
98
98
 
99
99
  private_constant :PROJECT_PATH_TEMPLATE
100
100
 
101
+ SUBSCRIPTION_PATH_TEMPLATE = Google::Gax::PathTemplate.new(
102
+ "projects/{project}/subscriptions/{subscription}"
103
+ )
104
+
105
+ private_constant :SUBSCRIPTION_PATH_TEMPLATE
106
+
101
107
  TOPIC_PATH_TEMPLATE = Google::Gax::PathTemplate.new(
102
108
  "projects/{project}/topics/{topic}"
103
109
  )
@@ -113,6 +119,17 @@ module Google
113
119
  )
114
120
  end
115
121
 
122
+ # Returns a fully-qualified subscription resource name string.
123
+ # @param project [String]
124
+ # @param subscription [String]
125
+ # @return [String]
126
+ def self.subscription_path project, subscription
127
+ SUBSCRIPTION_PATH_TEMPLATE.render(
128
+ :"project" => project,
129
+ :"subscription" => subscription
130
+ )
131
+ end
132
+
116
133
  # Returns a fully-qualified topic resource name string.
117
134
  # @param project [String]
118
135
  # @param topic [String]
@@ -336,6 +353,14 @@ module Google
336
353
  {'resource' => request.resource}
337
354
  end
338
355
  )
356
+ @detach_subscription = Google::Gax.create_api_call(
357
+ @publisher_stub.method(:detach_subscription),
358
+ defaults["detach_subscription"],
359
+ exception_transformer: exception_transformer,
360
+ params_extractor: proc do |request|
361
+ {'subscription' => request.subscription}
362
+ end
363
+ )
339
364
  end
340
365
 
341
366
  # Service calls
@@ -572,7 +597,7 @@ module Google
572
597
  @list_topics.call(req, options, &block)
573
598
  end
574
599
 
575
- # Lists the names of the subscriptions on this topic.
600
+ # Lists the names of the attached subscriptions on this topic.
576
601
  #
577
602
  # @param topic [String]
578
603
  # Required. The name of the topic that subscriptions are attached to.
@@ -860,6 +885,40 @@ module Google
860
885
  req = Google::Gax::to_proto(req, Google::Iam::V1::TestIamPermissionsRequest)
861
886
  @test_iam_permissions.call(req, options, &block)
862
887
  end
888
+
889
+ # Detaches a subscription from this topic. All messages retained in the
890
+ # subscription are dropped. Subsequent `Pull` and `StreamingPull` requests
891
+ # will return FAILED_PRECONDITION. If the subscription is a push
892
+ # subscription, pushes to the endpoint will stop.
893
+ #
894
+ # @param subscription [String]
895
+ # Required. The subscription to detach.
896
+ # Format is `projects/{project}/subscriptions/{subscription}`.
897
+ # @param options [Google::Gax::CallOptions]
898
+ # Overrides the default settings for this call, e.g, timeout,
899
+ # retries, etc.
900
+ # @yield [result, operation] Access the result along with the RPC operation
901
+ # @yieldparam result [Google::Cloud::PubSub::V1::DetachSubscriptionResponse]
902
+ # @yieldparam operation [GRPC::ActiveCall::Operation]
903
+ # @return [Google::Cloud::PubSub::V1::DetachSubscriptionResponse]
904
+ # @raise [Google::Gax::GaxError] if the RPC is aborted.
905
+ # @example
906
+ # require "google/cloud/pubsub"
907
+ #
908
+ # publisher_client = Google::Cloud::PubSub::Publisher.new(version: :v1)
909
+ # formatted_subscription = Google::Cloud::PubSub::V1::PublisherClient.subscription_path("[PROJECT]", "[SUBSCRIPTION]")
910
+ # response = publisher_client.detach_subscription(formatted_subscription)
911
+
912
+ def detach_subscription \
913
+ subscription,
914
+ options: nil,
915
+ &block
916
+ req = {
917
+ subscription: subscription
918
+ }.delete_if { |_, v| v.nil? }
919
+ req = Google::Gax::to_proto(req, Google::Cloud::PubSub::V1::DetachSubscriptionRequest)
920
+ @detach_subscription.call(req, options, &block)
921
+ end
863
922
  end
864
923
  end
865
924
  end
@@ -7,6 +7,7 @@
7
7
  "UNAVAILABLE",
8
8
  "UNKNOWN"
9
9
  ],
10
+ "non_idempotent2": [],
10
11
  "non_idempotent": [
11
12
  "UNAVAILABLE"
12
13
  ],
@@ -107,6 +108,11 @@
107
108
  "timeout_millis": 60000,
108
109
  "retry_codes_name": "non_idempotent",
109
110
  "retry_params_name": "default"
111
+ },
112
+ "DetachSubscription": {
113
+ "timeout_millis": 60000,
114
+ "retry_codes_name": "non_idempotent2",
115
+ "retry_params_name": "default"
110
116
  }
111
117
  }
112
118
  }
@@ -510,13 +510,11 @@ module Google
510
510
  # A hash of the same form as `Google::Cloud::PubSub::V1::ExpirationPolicy`
511
511
  # can also be provided.
512
512
  # @param filter [String]
513
- # An expression written in the Cloud Pub/Sub filter language. If non-empty,
513
+ # An expression written in the Pub/Sub [filter
514
+ # language](https://cloud.google.com/pubsub/docs/filtering). If non-empty,
514
515
  # then only `PubsubMessage`s whose `attributes` field matches the filter are
515
516
  # delivered on this subscription. If empty, then no messages are filtered
516
517
  # out.
517
- # <b>EXPERIMENTAL:</b> This feature is part of a closed alpha release. This
518
- # API might be changed in backward-incompatible ways and is not recommended
519
- # for production use. It is not subject to any SLA or deprecation policy.
520
518
  # @param dead_letter_policy [Google::Cloud::PubSub::V1::DeadLetterPolicy | Hash]
521
519
  # A policy that specifies the conditions for dead lettering messages in
522
520
  # this subscription. If dead_letter_policy is not set, dead lettering
@@ -529,18 +527,21 @@ module Google
529
527
  # A hash of the same form as `Google::Cloud::PubSub::V1::DeadLetterPolicy`
530
528
  # can also be provided.
531
529
  # @param retry_policy [Google::Cloud::PubSub::V1::RetryPolicy | Hash]
532
- # A policy that specifies how Cloud Pub/Sub retries message delivery for this
530
+ # A policy that specifies how Pub/Sub retries message delivery for this
533
531
  # subscription.
534
532
  #
535
533
  # If not set, the default retry policy is applied. This generally implies
536
534
  # that messages will be retried as soon as possible for healthy subscribers.
537
535
  # RetryPolicy will be triggered on NACKs or acknowledgement deadline
538
536
  # exceeded events for a given message.
539
- # <b>EXPERIMENTAL:</b> This API might be changed in backward-incompatible
540
- # ways and is not recommended for production use. It is not subject to any
541
- # SLA or deprecation policy.
542
537
  # A hash of the same form as `Google::Cloud::PubSub::V1::RetryPolicy`
543
538
  # can also be provided.
539
+ # @param detached [true, false]
540
+ # Indicates whether the subscription is detached from its topic. Detached
541
+ # subscriptions don't receive messages from their topic and don't retain any
542
+ # backlog. `Pull` and `StreamingPull` requests will return
543
+ # FAILED_PRECONDITION. If the subscription is a push subscription, pushes to
544
+ # the endpoint will not be made.
544
545
  # @param options [Google::Gax::CallOptions]
545
546
  # Overrides the default settings for this call, e.g, timeout,
546
547
  # retries, etc.
@@ -570,6 +571,7 @@ module Google
570
571
  filter: nil,
571
572
  dead_letter_policy: nil,
572
573
  retry_policy: nil,
574
+ detached: nil,
573
575
  options: nil,
574
576
  &block
575
577
  req = {
@@ -584,7 +586,8 @@ module Google
584
586
  expiration_policy: expiration_policy,
585
587
  filter: filter,
586
588
  dead_letter_policy: dead_letter_policy,
587
- retry_policy: retry_policy
589
+ retry_policy: retry_policy,
590
+ detached: detached
588
591
  }.delete_if { |_, v| v.nil? }
589
592
  req = Google::Gax::to_proto(req, Google::Cloud::PubSub::V1::Subscription)
590
593
  @create_subscription.call(req, options, &block)
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module PubSub
19
- VERSION = "1.6.1".freeze
19
+ VERSION = "1.10.0".freeze
20
20
  end
21
21
 
22
22
  Pubsub = PubSub unless const_defined? :Pubsub
@@ -73,6 +73,11 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
73
73
  add_message "google.pubsub.v1.DeleteTopicRequest" do
74
74
  optional :topic, :string, 1
75
75
  end
76
+ add_message "google.pubsub.v1.DetachSubscriptionRequest" do
77
+ optional :subscription, :string, 1
78
+ end
79
+ add_message "google.pubsub.v1.DetachSubscriptionResponse" do
80
+ end
76
81
  add_message "google.pubsub.v1.Subscription" do
77
82
  optional :name, :string, 1
78
83
  optional :topic, :string, 2
@@ -86,6 +91,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
86
91
  optional :filter, :string, 12
87
92
  optional :dead_letter_policy, :message, 13, "google.pubsub.v1.DeadLetterPolicy"
88
93
  optional :retry_policy, :message, 14, "google.pubsub.v1.RetryPolicy"
94
+ optional :detached, :bool, 15
89
95
  end
90
96
  add_message "google.pubsub.v1.RetryPolicy" do
91
97
  optional :minimum_backoff, :message, 1, "google.protobuf.Duration"
@@ -161,6 +167,8 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
161
167
  repeated :modify_deadline_ack_ids, :string, 4
162
168
  optional :stream_ack_deadline_seconds, :int32, 5
163
169
  optional :client_id, :string, 6
170
+ optional :max_outstanding_messages, :int64, 7
171
+ optional :max_outstanding_bytes, :int64, 8
164
172
  end
165
173
  add_message "google.pubsub.v1.StreamingPullResponse" do
166
174
  repeated :received_messages, :message, 1, "google.pubsub.v1.ReceivedMessage"
@@ -228,6 +236,8 @@ module Google::Cloud::PubSub::V1
228
236
  ListTopicSnapshotsRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v1.ListTopicSnapshotsRequest").msgclass
229
237
  ListTopicSnapshotsResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v1.ListTopicSnapshotsResponse").msgclass
230
238
  DeleteTopicRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v1.DeleteTopicRequest").msgclass
239
+ DetachSubscriptionRequest = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v1.DetachSubscriptionRequest").msgclass
240
+ DetachSubscriptionResponse = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v1.DetachSubscriptionResponse").msgclass
231
241
  Subscription = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v1.Subscription").msgclass
232
242
  RetryPolicy = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v1.RetryPolicy").msgclass
233
243
  DeadLetterPolicy = Google::Protobuf::DescriptorPool.generated_pool.lookup("google.pubsub.v1.DeadLetterPolicy").msgclass
@@ -53,7 +53,7 @@ module Google::Cloud::PubSub::V1
53
53
  rpc :GetTopic, GetTopicRequest, Topic
54
54
  # Lists matching topics.
55
55
  rpc :ListTopics, ListTopicsRequest, ListTopicsResponse
56
- # Lists the names of the subscriptions on this topic.
56
+ # Lists the names of the attached subscriptions on this topic.
57
57
  rpc :ListTopicSubscriptions, ListTopicSubscriptionsRequest, ListTopicSubscriptionsResponse
58
58
  # Lists the names of the snapshots on this topic. Snapshots are used in
59
59
  # <a href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
@@ -68,6 +68,11 @@ module Google::Cloud::PubSub::V1
68
68
  # configuration or subscriptions. Existing subscriptions to this topic are
69
69
  # not deleted, but their `topic` field is set to `_deleted-topic_`.
70
70
  rpc :DeleteTopic, DeleteTopicRequest, Google::Protobuf::Empty
71
+ # Detaches a subscription from this topic. All messages retained in the
72
+ # subscription are dropped. Subsequent `Pull` and `StreamingPull` requests
73
+ # will return FAILED_PRECONDITION. If the subscription is a push
74
+ # subscription, pushes to the endpoint will stop.
75
+ rpc :DetachSubscription, DetachSubscriptionRequest, DetachSubscriptionResponse
71
76
  end
72
77
 
73
78
  Stub = Service.rpc_stub_class
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: 1.6.1
4
+ version: 1.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: 2020-05-06 00:00:00.000000000 Z
12
+ date: 2020-07-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -278,6 +278,7 @@ files:
278
278
  - lib/google/cloud/pubsub/project.rb
279
279
  - lib/google/cloud/pubsub/publish_result.rb
280
280
  - lib/google/cloud/pubsub/received_message.rb
281
+ - lib/google/cloud/pubsub/retry_policy.rb
281
282
  - lib/google/cloud/pubsub/service.rb
282
283
  - lib/google/cloud/pubsub/snapshot.rb
283
284
  - lib/google/cloud/pubsub/snapshot/list.rb
@@ -329,7 +330,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
329
330
  - !ruby/object:Gem::Version
330
331
  version: '0'
331
332
  requirements: []
332
- rubygems_version: 3.0.6
333
+ rubygems_version: 3.1.3
333
334
  signing_key:
334
335
  specification_version: 4
335
336
  summary: API Client library for Google Cloud Pub/Sub