google-cloud-pubsub 1.6.1 → 1.7.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 +4 -4
- data/CHANGELOG.md +11 -0
- data/lib/google/cloud/pubsub/retry_policy.rb +90 -0
- data/lib/google/cloud/pubsub/service.rb +9 -0
- data/lib/google/cloud/pubsub/subscriber/stream.rb +1 -0
- data/lib/google/cloud/pubsub/subscription.rb +60 -0
- data/lib/google/cloud/pubsub/topic.rb +21 -1
- data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +7 -7
- data/lib/google/cloud/pubsub/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 176ccfcca66573d1d858c76096cf3e2cbb437163aeaf0993df5e394594158a4d
|
4
|
+
data.tar.gz: 02c9e180e88ef9a5d87e68677fe40814b26a903fb65aa994ae50473080f2d27c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a1b5a6de847eb054cf72ec388eca205cf5e3a03dc00b0125ef9a9a0eb2bcd94fb21389f3cef3b56983e59e9f2a11672d02f5a2b7005be7e2658a60633798896
|
7
|
+
data.tar.gz: 1c81891756ab4f80a54ed12663a9a339b0e1ba57f821e3ee7f5f0a545a60b6cec4b5c94828bc888bc5b51cf4ab947a642ce3895b8103bc4824ce3026fac56d49
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# Release History
|
2
2
|
|
3
|
+
### 1.7.0 / 2020-05-21
|
4
|
+
|
5
|
+
#### Features
|
6
|
+
|
7
|
+
* Add Retry Policy support
|
8
|
+
* Add RetryPolicy
|
9
|
+
* Add retry_policy param to Topic#subscribe
|
10
|
+
* Add Subscription#retry_policy
|
11
|
+
* Add Subscription#retry_policy=
|
12
|
+
* Set client-scoped UUID in initial StreamingPullRequest#client_id
|
13
|
+
|
3
14
|
### 1.6.1 / 2020-05-06
|
4
15
|
|
5
16
|
#### Documentation
|
@@ -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
|
@@ -248,6 +256,7 @@ module Google
|
|
248
256
|
labels: labels,
|
249
257
|
enable_message_ordering: message_ordering,
|
250
258
|
dead_letter_policy: dead_letter_policy(options),
|
259
|
+
retry_policy: options[:retry_policy],
|
251
260
|
options: default_options
|
252
261
|
end
|
253
262
|
end
|
@@ -363,6 +363,7 @@ 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
|
366
367
|
end
|
367
368
|
end
|
368
369
|
|
@@ -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"
|
@@ -483,6 +484,65 @@ module Google
|
|
483
484
|
@resource_name = nil
|
484
485
|
end
|
485
486
|
|
487
|
+
##
|
488
|
+
# A policy that specifies how Cloud Pub/Sub retries message delivery for this subscription. If `nil`, the
|
489
|
+
# default retry policy is applied. This generally implies that messages will be retried as soon as possible
|
490
|
+
# for healthy subscribers. Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events
|
491
|
+
# for a given message.
|
492
|
+
#
|
493
|
+
# **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
|
494
|
+
# production use. It is not subject to any SLA or deprecation policy.
|
495
|
+
#
|
496
|
+
# @return [RetryPolicy, nil] The retry policy for the subscription, or `nil`.
|
497
|
+
#
|
498
|
+
# @example
|
499
|
+
# require "google/cloud/pubsub"
|
500
|
+
#
|
501
|
+
# pubsub = Google::Cloud::PubSub.new
|
502
|
+
#
|
503
|
+
# sub = pubsub.subscription "my-topic-sub"
|
504
|
+
#
|
505
|
+
# sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
|
506
|
+
#
|
507
|
+
# sub.retry_policy.minimum_backoff #=> 5
|
508
|
+
# sub.retry_policy.maximum_backoff #=> 300
|
509
|
+
#
|
510
|
+
def retry_policy
|
511
|
+
ensure_grpc!
|
512
|
+
return nil unless @grpc.retry_policy
|
513
|
+
RetryPolicy.from_grpc @grpc.retry_policy
|
514
|
+
end
|
515
|
+
|
516
|
+
##
|
517
|
+
# Sets a policy that specifies how Cloud Pub/Sub retries message delivery for this subscription. If `nil`, the
|
518
|
+
# default retry policy is applied. This generally implies that messages will be retried as soon as possible
|
519
|
+
# for healthy subscribers. Retry Policy will be triggered on NACKs or acknowledgement deadline exceeded events
|
520
|
+
# for a given message.
|
521
|
+
#
|
522
|
+
# **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
|
523
|
+
# production use. It is not subject to any SLA or deprecation policy.
|
524
|
+
#
|
525
|
+
# @param [RetryPolicy, nil] new_retry_policy A new retry policy for the subscription, or `nil`.
|
526
|
+
#
|
527
|
+
# @example
|
528
|
+
# require "google/cloud/pubsub"
|
529
|
+
#
|
530
|
+
# pubsub = Google::Cloud::PubSub.new
|
531
|
+
#
|
532
|
+
# sub = pubsub.subscription "my-topic-sub"
|
533
|
+
#
|
534
|
+
# sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
|
535
|
+
#
|
536
|
+
# sub.retry_policy.minimum_backoff #=> 5
|
537
|
+
# sub.retry_policy.maximum_backoff #=> 300
|
538
|
+
#
|
539
|
+
def retry_policy= new_retry_policy
|
540
|
+
ensure_grpc!
|
541
|
+
new_retry_policy = new_retry_policy.to_grpc if new_retry_policy
|
542
|
+
update_grpc = Google::Cloud::PubSub::V1::Subscription.new name: name, retry_policy: new_retry_policy
|
543
|
+
@grpc = service.update_subscription update_grpc, :retry_policy
|
544
|
+
end
|
545
|
+
|
486
546
|
##
|
487
547
|
# Whether message ordering has been enabled. When enabled, messages
|
488
548
|
# published with the same `ordering_key` will be delivered in the order
|
@@ -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
|
@@ -297,6 +298,13 @@ module Google
|
|
297
298
|
# the subscription's dead letter policy. Dead lettering is done on a best effort basis. The same message might
|
298
299
|
# be dead lettered multiple times. The value must be between 5 and 100. If this parameter is 0, a default
|
299
300
|
# value of 5 is used. The `dead_letter_topic` must also be set.
|
301
|
+
# @param [RetryPolicy] retry_policy A policy that specifies how Cloud Pub/Sub retries message delivery for
|
302
|
+
# this subscription. If not set, the default retry policy is applied. This generally implies that messages
|
303
|
+
# will be retried as soon as possible for healthy subscribers. Retry Policy will be triggered on NACKs or
|
304
|
+
# acknowledgement deadline exceeded events for a given message.
|
305
|
+
#
|
306
|
+
# **EXPERIMENTAL:** This API might be changed in backward-incompatible ways and is not recommended for
|
307
|
+
# production use. It is not subject to any SLA or deprecation policy.
|
300
308
|
#
|
301
309
|
# @return [Google::Cloud::PubSub::Subscription]
|
302
310
|
#
|
@@ -340,8 +348,19 @@ module Google
|
|
340
348
|
# dead_letter_topic: dead_letter_topic,
|
341
349
|
# dead_letter_max_delivery_attempts: 10
|
342
350
|
#
|
351
|
+
# @example Configure a Retry Policy:
|
352
|
+
# require "google/cloud/pubsub"
|
353
|
+
#
|
354
|
+
# pubsub = Google::Cloud::PubSub.new
|
355
|
+
#
|
356
|
+
# topic = pubsub.topic "my-topic"
|
357
|
+
#
|
358
|
+
# retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
|
359
|
+
# sub = topic.subscribe "my-topic-sub", retry_policy: retry_policy
|
360
|
+
#
|
343
361
|
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
|
362
|
+
message_ordering: nil, dead_letter_topic: nil, dead_letter_max_delivery_attempts: nil,
|
363
|
+
retry_policy: nil
|
345
364
|
ensure_service!
|
346
365
|
options = { deadline: deadline, retain_acked: retain_acked, retention: retention, endpoint: endpoint,
|
347
366
|
labels: labels, message_ordering: message_ordering,
|
@@ -351,6 +370,7 @@ module Google
|
|
351
370
|
# Service error message "3:Invalid resource name given (name=)." does not identify param.
|
352
371
|
raise ArgumentError, "dead_letter_topic is required with dead_letter_max_delivery_attempts"
|
353
372
|
end
|
373
|
+
options[:retry_policy] = retry_policy.to_grpc if retry_policy
|
354
374
|
grpc = service.create_subscription name, subscription_name, options
|
355
375
|
Subscription.from_grpc grpc, service
|
356
376
|
end
|
@@ -455,8 +455,11 @@ module Google
|
|
455
455
|
# The message.
|
456
456
|
# @!attribute [rw] delivery_attempt
|
457
457
|
# @return [Integer]
|
458
|
-
#
|
459
|
-
#
|
458
|
+
# The approximate number of times that Cloud Pub/Sub has attempted to deliver
|
459
|
+
# the associated message to a subscriber.
|
460
|
+
#
|
461
|
+
# More precisely, this is 1 + (number of NACKs) +
|
462
|
+
# (number of ack_deadline exceeds) for this message.
|
460
463
|
#
|
461
464
|
# A NACK is any call to ModifyAckDeadline with a 0 deadline. An ack_deadline
|
462
465
|
# exceeds event is whenever a message is not acknowledged within
|
@@ -464,13 +467,10 @@ module Google
|
|
464
467
|
# Subscription.ackDeadlineSeconds, but may get extended automatically by
|
465
468
|
# the client library.
|
466
469
|
#
|
467
|
-
#
|
468
|
-
# is calculated at best effort and is approximate.
|
470
|
+
# Upon the first delivery of a given message, `delivery_attempt` will have a
|
471
|
+
# value of 1. The value is calculated at best effort and is approximate.
|
469
472
|
#
|
470
473
|
# 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
474
|
class ReceivedMessage; end
|
475
475
|
|
476
476
|
# Request for the GetSubscription method.
|
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.
|
4
|
+
version: 1.7.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-
|
12
|
+
date: 2020-05-21 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
|