google-cloud-pubsub 1.1.3 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +122 -0
- data/EMULATOR.md +1 -1
- data/TROUBLESHOOTING.md +2 -8
- data/lib/google/cloud/pubsub/async_publisher.rb +15 -19
- data/lib/google/cloud/pubsub/project.rb +18 -26
- data/lib/google/cloud/pubsub/received_message.rb +38 -0
- data/lib/google/cloud/pubsub/retry_policy.rb +90 -0
- data/lib/google/cloud/pubsub/service.rb +37 -15
- data/lib/google/cloud/pubsub/subscriber/inventory.rb +43 -15
- data/lib/google/cloud/pubsub/subscriber/stream.rb +7 -8
- data/lib/google/cloud/pubsub/subscriber.rb +86 -15
- data/lib/google/cloud/pubsub/subscription/push_config.rb +2 -2
- data/lib/google/cloud/pubsub/subscription.rb +296 -6
- data/lib/google/cloud/pubsub/topic.rb +65 -2
- data/lib/google/cloud/pubsub/v1/credentials.rb +1 -1
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/iam_policy.rb +1 -1
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/options.rb +1 -1
- data/lib/google/cloud/pubsub/v1/doc/google/iam/v1/policy.rb +1 -1
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +1 -1
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/empty.rb +1 -1
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +1 -1
- data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +1 -1
- data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +168 -79
- data/lib/google/cloud/pubsub/v1/doc/google/type/expr.rb +1 -1
- data/lib/google/cloud/pubsub/v1/publisher_client.rb +175 -33
- data/lib/google/cloud/pubsub/v1/publisher_client_config.json +16 -1
- data/lib/google/cloud/pubsub/v1/subscriber_client.rb +145 -64
- data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +12 -3
- data/lib/google/cloud/pubsub/version.rb +1 -1
- data/lib/google/pubsub/v1/pubsub_pb.rb +20 -0
- data/lib/google/pubsub/v1/pubsub_services_pb.rb +7 -3
- metadata +6 -5
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright
|
1
|
+
# Copyright 2020 Google LLC
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -64,7 +64,11 @@ module Google
|
|
64
64
|
"list_topic_subscriptions" => Google::Gax::PageDescriptor.new(
|
65
65
|
"page_token",
|
66
66
|
"next_page_token",
|
67
|
-
"subscriptions")
|
67
|
+
"subscriptions"),
|
68
|
+
"list_topic_snapshots" => Google::Gax::PageDescriptor.new(
|
69
|
+
"page_token",
|
70
|
+
"next_page_token",
|
71
|
+
"snapshots")
|
68
72
|
}.freeze
|
69
73
|
|
70
74
|
private_constant :PAGE_DESCRIPTORS
|
@@ -94,6 +98,12 @@ module Google
|
|
94
98
|
|
95
99
|
private_constant :PROJECT_PATH_TEMPLATE
|
96
100
|
|
101
|
+
SUBSCRIPTION_PATH_TEMPLATE = Google::Gax::PathTemplate.new(
|
102
|
+
"projects/{project}/subscriptions/{subscription}"
|
103
|
+
)
|
104
|
+
|
105
|
+
private_constant :SUBSCRIPTION_PATH_TEMPLATE
|
106
|
+
|
97
107
|
TOPIC_PATH_TEMPLATE = Google::Gax::PathTemplate.new(
|
98
108
|
"projects/{project}/topics/{topic}"
|
99
109
|
)
|
@@ -109,6 +119,17 @@ module Google
|
|
109
119
|
)
|
110
120
|
end
|
111
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
|
+
|
112
133
|
# Returns a fully-qualified topic resource name string.
|
113
134
|
# @param project [String]
|
114
135
|
# @param topic [String]
|
@@ -198,6 +219,9 @@ module Google
|
|
198
219
|
google_api_client.freeze
|
199
220
|
|
200
221
|
headers = { :"x-goog-api-client" => google_api_client }
|
222
|
+
if credentials.respond_to?(:quota_project_id) && credentials.quota_project_id
|
223
|
+
headers[:"x-goog-user-project"] = credentials.quota_project_id
|
224
|
+
end
|
201
225
|
headers.merge!(metadata) unless metadata.nil?
|
202
226
|
client_config_file = Pathname.new(__dir__).join(
|
203
227
|
"publisher_client_config.json"
|
@@ -289,6 +313,14 @@ module Google
|
|
289
313
|
{'topic' => request.topic}
|
290
314
|
end
|
291
315
|
)
|
316
|
+
@list_topic_snapshots = Google::Gax.create_api_call(
|
317
|
+
@publisher_stub.method(:list_topic_snapshots),
|
318
|
+
defaults["list_topic_snapshots"],
|
319
|
+
exception_transformer: exception_transformer,
|
320
|
+
params_extractor: proc do |request|
|
321
|
+
{'topic' => request.topic}
|
322
|
+
end
|
323
|
+
)
|
292
324
|
@delete_topic = Google::Gax.create_api_call(
|
293
325
|
@publisher_stub.method(:delete_topic),
|
294
326
|
defaults["delete_topic"],
|
@@ -321,6 +353,14 @@ module Google
|
|
321
353
|
{'resource' => request.resource}
|
322
354
|
end
|
323
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
|
+
)
|
324
364
|
end
|
325
365
|
|
326
366
|
# Service calls
|
@@ -330,7 +370,7 @@ module Google
|
|
330
370
|
# resource name rules</a>.
|
331
371
|
#
|
332
372
|
# @param name [String]
|
333
|
-
# The name of the topic. It must have the format
|
373
|
+
# Required. The name of the topic. It must have the format
|
334
374
|
# `"projects/{project}/topics/{topic}"`. `{topic}` must start with a letter,
|
335
375
|
# and contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),
|
336
376
|
# underscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent
|
@@ -386,15 +426,15 @@ module Google
|
|
386
426
|
# topic are not modifiable.
|
387
427
|
#
|
388
428
|
# @param topic [Google::Cloud::PubSub::V1::Topic | Hash]
|
389
|
-
# The updated topic object.
|
429
|
+
# Required. The updated topic object.
|
390
430
|
# A hash of the same form as `Google::Cloud::PubSub::V1::Topic`
|
391
431
|
# can also be provided.
|
392
432
|
# @param update_mask [Google::Protobuf::FieldMask | Hash]
|
393
|
-
# Indicates which fields in the provided topic to update. Must be
|
394
|
-
# and non-empty. Note that if `update_mask` contains
|
395
|
-
# "message_storage_policy"
|
396
|
-
#
|
397
|
-
#
|
433
|
+
# Required. Indicates which fields in the provided topic to update. Must be
|
434
|
+
# specified and non-empty. Note that if `update_mask` contains
|
435
|
+
# "message_storage_policy" but the `message_storage_policy` is not set in
|
436
|
+
# the `topic` provided above, then the updated value is determined by the
|
437
|
+
# policy configured at the project or organization level.
|
398
438
|
# A hash of the same form as `Google::Protobuf::FieldMask`
|
399
439
|
# can also be provided.
|
400
440
|
# @param options [Google::Gax::CallOptions]
|
@@ -434,10 +474,10 @@ module Google
|
|
434
474
|
# does not exist.
|
435
475
|
#
|
436
476
|
# @param topic [String]
|
437
|
-
# The messages in the request will be published on this topic.
|
477
|
+
# Required. The messages in the request will be published on this topic.
|
438
478
|
# Format is `projects/{project}/topics/{topic}`.
|
439
479
|
# @param messages [Array<Google::Cloud::PubSub::V1::PubsubMessage | Hash>]
|
440
|
-
# The messages to publish.
|
480
|
+
# Required. The messages to publish.
|
441
481
|
# A hash of the same form as `Google::Cloud::PubSub::V1::PubsubMessage`
|
442
482
|
# can also be provided.
|
443
483
|
# @param options [Google::Gax::CallOptions]
|
@@ -474,7 +514,7 @@ module Google
|
|
474
514
|
# Gets the configuration of a topic.
|
475
515
|
#
|
476
516
|
# @param topic [String]
|
477
|
-
# The name of the topic to get.
|
517
|
+
# Required. The name of the topic to get.
|
478
518
|
# Format is `projects/{project}/topics/{topic}`.
|
479
519
|
# @param options [Google::Gax::CallOptions]
|
480
520
|
# Overrides the default settings for this call, e.g, timeout,
|
@@ -505,7 +545,7 @@ module Google
|
|
505
545
|
# Lists matching topics.
|
506
546
|
#
|
507
547
|
# @param project [String]
|
508
|
-
# The name of the project in which to list topics.
|
548
|
+
# Required. The name of the project in which to list topics.
|
509
549
|
# Format is `projects/{project-id}`.
|
510
550
|
# @param page_size [Integer]
|
511
551
|
# The maximum number of resources contained in the underlying API
|
@@ -557,10 +597,10 @@ module Google
|
|
557
597
|
@list_topics.call(req, options, &block)
|
558
598
|
end
|
559
599
|
|
560
|
-
# Lists the names of the subscriptions on this topic.
|
600
|
+
# Lists the names of the attached subscriptions on this topic.
|
561
601
|
#
|
562
602
|
# @param topic [String]
|
563
|
-
# The name of the topic that subscriptions are attached to.
|
603
|
+
# Required. The name of the topic that subscriptions are attached to.
|
564
604
|
# Format is `projects/{project}/topics/{topic}`.
|
565
605
|
# @param page_size [Integer]
|
566
606
|
# The maximum number of resources contained in the underlying API
|
@@ -612,6 +652,66 @@ module Google
|
|
612
652
|
@list_topic_subscriptions.call(req, options, &block)
|
613
653
|
end
|
614
654
|
|
655
|
+
# Lists the names of the snapshots on this topic. Snapshots are used in
|
656
|
+
# <a href="https://cloud.google.com/pubsub/docs/replay-overview">Seek</a>
|
657
|
+
# operations, which allow
|
658
|
+
# you to manage message acknowledgments in bulk. That is, you can set the
|
659
|
+
# acknowledgment state of messages in an existing subscription to the state
|
660
|
+
# captured by a snapshot.
|
661
|
+
#
|
662
|
+
# @param topic [String]
|
663
|
+
# Required. The name of the topic that snapshots are attached to.
|
664
|
+
# Format is `projects/{project}/topics/{topic}`.
|
665
|
+
# @param page_size [Integer]
|
666
|
+
# The maximum number of resources contained in the underlying API
|
667
|
+
# response. If page streaming is performed per-resource, this
|
668
|
+
# parameter does not affect the return value. If page streaming is
|
669
|
+
# performed per-page, this determines the maximum number of
|
670
|
+
# resources in a page.
|
671
|
+
# @param options [Google::Gax::CallOptions]
|
672
|
+
# Overrides the default settings for this call, e.g, timeout,
|
673
|
+
# retries, etc.
|
674
|
+
# @yield [result, operation] Access the result along with the RPC operation
|
675
|
+
# @yieldparam result [Google::Gax::PagedEnumerable<String>]
|
676
|
+
# @yieldparam operation [GRPC::ActiveCall::Operation]
|
677
|
+
# @return [Google::Gax::PagedEnumerable<String>]
|
678
|
+
# An enumerable of String instances.
|
679
|
+
# See Google::Gax::PagedEnumerable documentation for other
|
680
|
+
# operations such as per-page iteration or access to the response
|
681
|
+
# object.
|
682
|
+
# @raise [Google::Gax::GaxError] if the RPC is aborted.
|
683
|
+
# @example
|
684
|
+
# require "google/cloud/pubsub"
|
685
|
+
#
|
686
|
+
# publisher_client = Google::Cloud::PubSub::Publisher.new(version: :v1)
|
687
|
+
# formatted_topic = Google::Cloud::PubSub::V1::PublisherClient.topic_path("[PROJECT]", "[TOPIC]")
|
688
|
+
#
|
689
|
+
# # Iterate over all results.
|
690
|
+
# publisher_client.list_topic_snapshots(formatted_topic).each do |element|
|
691
|
+
# # Process element.
|
692
|
+
# end
|
693
|
+
#
|
694
|
+
# # Or iterate over results one page at a time.
|
695
|
+
# publisher_client.list_topic_snapshots(formatted_topic).each_page do |page|
|
696
|
+
# # Process each page at a time.
|
697
|
+
# page.each do |element|
|
698
|
+
# # Process element.
|
699
|
+
# end
|
700
|
+
# end
|
701
|
+
|
702
|
+
def list_topic_snapshots \
|
703
|
+
topic,
|
704
|
+
page_size: nil,
|
705
|
+
options: nil,
|
706
|
+
&block
|
707
|
+
req = {
|
708
|
+
topic: topic,
|
709
|
+
page_size: page_size
|
710
|
+
}.delete_if { |_, v| v.nil? }
|
711
|
+
req = Google::Gax::to_proto(req, Google::Cloud::PubSub::V1::ListTopicSnapshotsRequest)
|
712
|
+
@list_topic_snapshots.call(req, options, &block)
|
713
|
+
end
|
714
|
+
|
615
715
|
# Deletes the topic with the given name. Returns `NOT_FOUND` if the topic
|
616
716
|
# does not exist. After a topic is deleted, a new topic may be created with
|
617
717
|
# the same name; this is an entirely new topic with none of the old
|
@@ -619,7 +719,7 @@ module Google
|
|
619
719
|
# not deleted, but their `topic` field is set to `_deleted-topic_`.
|
620
720
|
#
|
621
721
|
# @param topic [String]
|
622
|
-
# Name of the topic to delete.
|
722
|
+
# Required. Name of the topic to delete.
|
623
723
|
# Format is `projects/{project}/topics/{topic}`.
|
624
724
|
# @param options [Google::Gax::CallOptions]
|
625
725
|
# Overrides the default settings for this call, e.g, timeout,
|
@@ -647,8 +747,11 @@ module Google
|
|
647
747
|
nil
|
648
748
|
end
|
649
749
|
|
650
|
-
# Sets the access control policy on the specified resource. Replaces
|
651
|
-
# existing policy.
|
750
|
+
# Sets the access control policy on the specified resource. Replaces
|
751
|
+
# any existing policy.
|
752
|
+
#
|
753
|
+
# Can return `NOT_FOUND`, `INVALID_ARGUMENT`, and `PERMISSION_DENIED`
|
754
|
+
# errors.
|
652
755
|
#
|
653
756
|
# @param resource [String]
|
654
757
|
# REQUIRED: The resource for which the policy is being specified.
|
@@ -672,11 +775,13 @@ module Google
|
|
672
775
|
# require "google/cloud/pubsub"
|
673
776
|
#
|
674
777
|
# publisher_client = Google::Cloud::PubSub::Publisher.new(version: :v1)
|
675
|
-
#
|
778
|
+
#
|
779
|
+
# # TODO: Initialize `resource`:
|
780
|
+
# resource = ''
|
676
781
|
#
|
677
782
|
# # TODO: Initialize `policy`:
|
678
783
|
# policy = {}
|
679
|
-
# response = publisher_client.set_iam_policy(
|
784
|
+
# response = publisher_client.set_iam_policy(resource, policy)
|
680
785
|
|
681
786
|
def set_iam_policy \
|
682
787
|
resource,
|
@@ -691,9 +796,8 @@ module Google
|
|
691
796
|
@set_iam_policy.call(req, options, &block)
|
692
797
|
end
|
693
798
|
|
694
|
-
# Gets the access control policy for a resource.
|
695
|
-
#
|
696
|
-
# set.
|
799
|
+
# Gets the access control policy for a resource. Returns an empty policy
|
800
|
+
# if the resource exists and does not have a policy set.
|
697
801
|
#
|
698
802
|
# @param resource [String]
|
699
803
|
# REQUIRED: The resource for which the policy is being requested.
|
@@ -715,8 +819,10 @@ module Google
|
|
715
819
|
# require "google/cloud/pubsub"
|
716
820
|
#
|
717
821
|
# publisher_client = Google::Cloud::PubSub::Publisher.new(version: :v1)
|
718
|
-
#
|
719
|
-
#
|
822
|
+
#
|
823
|
+
# # TODO: Initialize `resource`:
|
824
|
+
# resource = ''
|
825
|
+
# response = publisher_client.get_iam_policy(resource)
|
720
826
|
|
721
827
|
def get_iam_policy \
|
722
828
|
resource,
|
@@ -731,13 +837,13 @@ module Google
|
|
731
837
|
@get_iam_policy.call(req, options, &block)
|
732
838
|
end
|
733
839
|
|
734
|
-
# Returns permissions that a caller has on the specified resource.
|
735
|
-
#
|
736
|
-
# permissions, not a NOT_FOUND error.
|
840
|
+
# Returns permissions that a caller has on the specified resource. If the
|
841
|
+
# resource does not exist, this will return an empty set of
|
842
|
+
# permissions, not a `NOT_FOUND` error.
|
737
843
|
#
|
738
|
-
# Note: This operation is designed to be used for building
|
739
|
-
# UIs and command-line tools, not for authorization
|
740
|
-
# may "fail open" without warning.
|
844
|
+
# Note: This operation is designed to be used for building
|
845
|
+
# permission-aware UIs and command-line tools, not for authorization
|
846
|
+
# checking. This operation may "fail open" without warning.
|
741
847
|
#
|
742
848
|
# @param resource [String]
|
743
849
|
# REQUIRED: The resource for which the policy detail is being requested.
|
@@ -759,11 +865,13 @@ module Google
|
|
759
865
|
# require "google/cloud/pubsub"
|
760
866
|
#
|
761
867
|
# publisher_client = Google::Cloud::PubSub::Publisher.new(version: :v1)
|
762
|
-
#
|
868
|
+
#
|
869
|
+
# # TODO: Initialize `resource`:
|
870
|
+
# resource = ''
|
763
871
|
#
|
764
872
|
# # TODO: Initialize `permissions`:
|
765
873
|
# permissions = []
|
766
|
-
# response = publisher_client.test_iam_permissions(
|
874
|
+
# response = publisher_client.test_iam_permissions(resource, permissions)
|
767
875
|
|
768
876
|
def test_iam_permissions \
|
769
877
|
resource,
|
@@ -777,6 +885,40 @@ module Google
|
|
777
885
|
req = Google::Gax::to_proto(req, Google::Iam::V1::TestIamPermissionsRequest)
|
778
886
|
@test_iam_permissions.call(req, options, &block)
|
779
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
|
780
922
|
end
|
781
923
|
end
|
782
924
|
end
|
@@ -7,9 +7,14 @@
|
|
7
7
|
"UNAVAILABLE",
|
8
8
|
"UNKNOWN"
|
9
9
|
],
|
10
|
+
"non_idempotent2": [],
|
10
11
|
"non_idempotent": [
|
11
12
|
"UNAVAILABLE"
|
12
13
|
],
|
14
|
+
"idempotent2": [
|
15
|
+
"DEADLINE_EXCEEDED",
|
16
|
+
"UNAVAILABLE"
|
17
|
+
],
|
13
18
|
"none": [],
|
14
19
|
"publish": [
|
15
20
|
"ABORTED",
|
@@ -53,7 +58,7 @@
|
|
53
58
|
"retry_params_name": "default"
|
54
59
|
},
|
55
60
|
"Publish": {
|
56
|
-
"timeout_millis":
|
61
|
+
"timeout_millis": 20000,
|
57
62
|
"retry_codes_name": "publish",
|
58
63
|
"retry_params_name": "messaging",
|
59
64
|
"bundling": {
|
@@ -79,6 +84,11 @@
|
|
79
84
|
"retry_codes_name": "idempotent",
|
80
85
|
"retry_params_name": "default"
|
81
86
|
},
|
87
|
+
"ListTopicSnapshots": {
|
88
|
+
"timeout_millis": 60000,
|
89
|
+
"retry_codes_name": "idempotent2",
|
90
|
+
"retry_params_name": "default"
|
91
|
+
},
|
82
92
|
"DeleteTopic": {
|
83
93
|
"timeout_millis": 60000,
|
84
94
|
"retry_codes_name": "non_idempotent",
|
@@ -98,6 +108,11 @@
|
|
98
108
|
"timeout_millis": 60000,
|
99
109
|
"retry_codes_name": "non_idempotent",
|
100
110
|
"retry_params_name": "default"
|
111
|
+
},
|
112
|
+
"DetachSubscription": {
|
113
|
+
"timeout_millis": 60000,
|
114
|
+
"retry_codes_name": "non_idempotent2",
|
115
|
+
"retry_params_name": "default"
|
101
116
|
}
|
102
117
|
}
|
103
118
|
}
|