google-cloud-pubsub 0.26.0 → 2.6.1

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.
Files changed (56) hide show
  1. checksums.yaml +5 -5
  2. data/.yardopts +12 -2
  3. data/AUTHENTICATION.md +178 -0
  4. data/CHANGELOG.md +659 -0
  5. data/CODE_OF_CONDUCT.md +40 -0
  6. data/CONTRIBUTING.md +187 -0
  7. data/EMULATOR.md +37 -0
  8. data/LICENSE +2 -2
  9. data/LOGGING.md +32 -0
  10. data/OVERVIEW.md +528 -0
  11. data/TROUBLESHOOTING.md +31 -0
  12. data/lib/google/cloud/pubsub/async_publisher/batch.rb +310 -0
  13. data/lib/google/cloud/pubsub/async_publisher.rb +402 -0
  14. data/lib/google/cloud/pubsub/batch_publisher.rb +100 -0
  15. data/lib/google/cloud/pubsub/convert.rb +91 -0
  16. data/lib/google/cloud/pubsub/credentials.rb +26 -10
  17. data/lib/google/cloud/pubsub/errors.rb +85 -0
  18. data/lib/google/cloud/pubsub/message.rb +80 -17
  19. data/lib/google/cloud/pubsub/policy.rb +17 -14
  20. data/lib/google/cloud/pubsub/project.rb +364 -250
  21. data/lib/google/cloud/pubsub/publish_result.rb +103 -0
  22. data/lib/google/cloud/pubsub/received_message.rb +162 -24
  23. data/lib/google/cloud/pubsub/retry_policy.rb +88 -0
  24. data/lib/google/cloud/pubsub/schema/list.rb +180 -0
  25. data/lib/google/cloud/pubsub/schema.rb +310 -0
  26. data/lib/google/cloud/pubsub/service.rb +281 -265
  27. data/lib/google/cloud/pubsub/snapshot/list.rb +21 -21
  28. data/lib/google/cloud/pubsub/snapshot.rb +55 -15
  29. data/lib/google/cloud/pubsub/subscriber/enumerator_queue.rb +54 -0
  30. data/lib/google/cloud/pubsub/subscriber/inventory.rb +173 -0
  31. data/lib/google/cloud/pubsub/subscriber/sequencer.rb +115 -0
  32. data/lib/google/cloud/pubsub/subscriber/stream.rb +400 -0
  33. data/lib/google/cloud/pubsub/subscriber/timed_unary_buffer.rb +230 -0
  34. data/lib/google/cloud/pubsub/subscriber.rb +417 -0
  35. data/lib/google/cloud/pubsub/subscription/list.rb +28 -28
  36. data/lib/google/cloud/pubsub/subscription/push_config.rb +268 -0
  37. data/lib/google/cloud/pubsub/subscription.rb +900 -172
  38. data/lib/google/cloud/pubsub/topic/list.rb +21 -21
  39. data/lib/google/cloud/pubsub/topic.rb +674 -95
  40. data/lib/google/cloud/pubsub/version.rb +6 -4
  41. data/lib/google/cloud/pubsub.rb +104 -439
  42. data/lib/google-cloud-pubsub.rb +60 -29
  43. metadata +88 -50
  44. data/README.md +0 -69
  45. data/lib/google/cloud/pubsub/topic/publisher.rb +0 -86
  46. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/duration.rb +0 -77
  47. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/field_mask.rb +0 -223
  48. data/lib/google/cloud/pubsub/v1/doc/google/protobuf/timestamp.rb +0 -81
  49. data/lib/google/cloud/pubsub/v1/doc/google/pubsub/v1/pubsub.rb +0 -503
  50. data/lib/google/cloud/pubsub/v1/publisher_client.rb +0 -605
  51. data/lib/google/cloud/pubsub/v1/publisher_client_config.json +0 -96
  52. data/lib/google/cloud/pubsub/v1/subscriber_client.rb +0 -1104
  53. data/lib/google/cloud/pubsub/v1/subscriber_client_config.json +0 -127
  54. data/lib/google/cloud/pubsub/v1.rb +0 -17
  55. data/lib/google/pubsub/v1/pubsub_pb.rb +0 -187
  56. data/lib/google/pubsub/v1/pubsub_services_pb.rb +0 -159
@@ -0,0 +1,103 @@
1
+ # Copyright 2017 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
+ module Google
17
+ module Cloud
18
+ module PubSub
19
+ ##
20
+ # The result of a publish operation. The message object is available on
21
+ # {#message} and will have {#message_id} assigned by the API.
22
+ #
23
+ # When the publish operation was successful the result will be marked
24
+ # {#succeeded?}. Otherwise, the result will be marked {#failed?} and the
25
+ # error raised will be availabe on {#error}.
26
+ #
27
+ class PublishResult
28
+ ##
29
+ # @private Create an PublishResult object.
30
+ def initialize message, error = nil
31
+ @message = message
32
+ @error = error
33
+ end
34
+
35
+ ##
36
+ # The message.
37
+ def message
38
+ @message
39
+ end
40
+ alias msg message
41
+
42
+ ##
43
+ # The message's data.
44
+ def data
45
+ message.data
46
+ end
47
+
48
+ ##
49
+ # The message's attributes.
50
+ def attributes
51
+ message.attributes
52
+ end
53
+
54
+ ##
55
+ # The ID of the message, assigned by the server at publication
56
+ # time. Guaranteed to be unique within the topic.
57
+ def message_id
58
+ message.message_id
59
+ end
60
+ alias msg_id message_id
61
+
62
+ ##
63
+ # The time at which the message was published.
64
+ def published_at
65
+ message.published_at
66
+ end
67
+ alias publish_time published_at
68
+
69
+ ##
70
+ # The error that was raised when published, if any.
71
+ def error
72
+ @error
73
+ end
74
+
75
+ ##
76
+ # Whether the publish request was successful.
77
+ def succeeded?
78
+ error.nil?
79
+ end
80
+
81
+ # Whether the publish request failed.
82
+ def failed?
83
+ !succeeded?
84
+ end
85
+
86
+ ##
87
+ # @private Create an PublishResult object from a message protobuf.
88
+ def self.from_grpc msg_grpc
89
+ new Message.from_grpc(msg_grpc)
90
+ end
91
+
92
+ ##
93
+ # @private Create an PublishResult object from a message protobuf and an
94
+ # error.
95
+ def self.from_error msg_grpc, error
96
+ new Message.from_grpc(msg_grpc), error
97
+ end
98
+ end
99
+ end
100
+
101
+ Pubsub = PubSub unless const_defined? :Pubsub
102
+ end
103
+ end
@@ -1,10 +1,10 @@
1
- # Copyright 2015 Google Inc. All rights reserved.
1
+ # Copyright 2015 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.
5
5
  # You may obtain a copy of the License at
6
6
  #
7
- # http://www.apache.org/licenses/LICENSE-2.0
7
+ # https://www.apache.org/licenses/LICENSE-2.0
8
8
  #
9
9
  # Unless required by applicable law or agreed to in writing, software
10
10
  # distributed under the License is distributed on an "AS IS" BASIS,
@@ -18,7 +18,7 @@ require "google/cloud/pubsub/message"
18
18
 
19
19
  module Google
20
20
  module Cloud
21
- module Pubsub
21
+ module PubSub
22
22
  ##
23
23
  # # ReceivedMessage
24
24
  #
@@ -27,29 +27,34 @@ module Google
27
27
  # @example
28
28
  # require "google/cloud/pubsub"
29
29
  #
30
- # pubsub = Google::Cloud::Pubsub.new
30
+ # pubsub = Google::Cloud::PubSub.new
31
31
  #
32
32
  # sub = pubsub.subscription "my-topic-sub"
33
- # received_message = sub.pull.first
34
- # if received_message
33
+ # subscriber = sub.listen do |received_message|
35
34
  # puts received_message.message.data
36
35
  # received_message.acknowledge!
37
36
  # end
38
37
  #
38
+ # # Start background threads that will call the block passed to listen.
39
+ # subscriber.start
40
+ #
41
+ # # Shut down the subscriber when ready to stop receiving messages.
42
+ # subscriber.stop!
43
+ #
39
44
  class ReceivedMessage
40
45
  ##
41
46
  # @private The {Subscription} object.
42
47
  attr_accessor :subscription
43
48
 
44
49
  ##
45
- # @private The gRPC Google::Pubsub::V1::ReceivedMessage object.
50
+ # @private The gRPC Google::Cloud::PubSub::V1::ReceivedMessage object.
46
51
  attr_accessor :grpc
47
52
 
48
53
  ##
49
54
  # @private Create an empty {Subscription} object.
50
55
  def initialize
51
56
  @subscription = nil
52
- @grpc = Google::Pubsub::V1::ReceivedMessage.new
57
+ @grpc = Google::Cloud::PubSub::V1::ReceivedMessage.new
53
58
  end
54
59
 
55
60
  ##
@@ -58,21 +63,60 @@ module Google
58
63
  @grpc.ack_id
59
64
  end
60
65
 
66
+ ##
67
+ # Returns the delivery attempt counter for the message. If a dead letter policy is not set on the subscription,
68
+ # this will be `nil`. See {Topic#subscribe}, {Subscription#dead_letter_topic=} and
69
+ # {Subscription#dead_letter_max_delivery_attempts=}.
70
+ #
71
+ # The delivery attempt counter is `1 + (the sum of number of NACKs and number of ack_deadline exceeds)` for the
72
+ # message.
73
+ #
74
+ # A NACK is any call to `ModifyAckDeadline` with a `0` deadline. An `ack_deadline` exceeds event is whenever a
75
+ # message is not acknowledged within `ack_deadline`. Note that `ack_deadline` is initially
76
+ # `Subscription.ackDeadlineSeconds`, but may get extended automatically by the client library.
77
+ #
78
+ # The first delivery of a given message will have this value as `1`. The value is calculated at best effort and
79
+ # is approximate.
80
+ #
81
+ # @return [Integer, nil] A delivery attempt value of `1` or greater, or `nil` if a dead letter policy is not set
82
+ # on the subscription.
83
+ #
84
+ # @example
85
+ # require "google/cloud/pubsub"
86
+ #
87
+ # pubsub = Google::Cloud::PubSub.new
88
+ #
89
+ # topic = pubsub.topic "my-topic"
90
+ # dead_letter_topic = pubsub.topic "my-dead-letter-topic", skip_lookup: true
91
+ # sub = topic.subscribe "my-topic-sub",
92
+ # dead_letter_topic: dead_letter_topic,
93
+ # dead_letter_max_delivery_attempts: 10
94
+ #
95
+ # subscriber = sub.listen do |received_message|
96
+ # puts received_message.message.delivery_attempt
97
+ # end
98
+ #
99
+ def delivery_attempt
100
+ return nil if @grpc.delivery_attempt && @grpc.delivery_attempt < 1
101
+ @grpc.delivery_attempt
102
+ end
103
+
61
104
  ##
62
105
  # The received message.
63
106
  def message
64
107
  Message.from_grpc @grpc.message
65
108
  end
66
- alias_method :msg, :message
109
+ alias msg message
67
110
 
68
111
  ##
69
- # The received message's data.
112
+ # The received message payload. This data is a list of bytes encoded as
113
+ # ASCII-8BIT.
70
114
  def data
71
115
  message.data
72
116
  end
73
117
 
74
118
  ##
75
- # The received message's attributes.
119
+ # Optional attributes for the received message.
76
120
  def attributes
77
121
  message.attributes
78
122
  end
@@ -83,7 +127,36 @@ module Google
83
127
  def message_id
84
128
  message.message_id
85
129
  end
86
- alias_method :msg_id, :message_id
130
+ alias msg_id message_id
131
+
132
+ ##
133
+ # Identifies related messages for which publish order should be
134
+ # respected.
135
+ #
136
+ # Google Cloud Pub/Sub ordering keys provide the ability to ensure
137
+ # related messages are sent to subscribers in the order in which they
138
+ # were published. Messages can be tagged with an ordering key, a string
139
+ # that identifies related messages for which publish order should be
140
+ # respected. The service guarantees that, for a given ordering key and
141
+ # publisher, messages are sent to subscribers in the order in which they
142
+ # were published. Ordering does not require sacrificing high throughput
143
+ # or scalability, as the service automatically distributes messages for
144
+ # different ordering keys across subscribers.
145
+ #
146
+ # See {Topic#publish_async} and {Subscription#listen}.
147
+ #
148
+ # @return [String]
149
+ #
150
+ def ordering_key
151
+ message.ordering_key
152
+ end
153
+
154
+ ##
155
+ # The time at which the message was published.
156
+ def published_at
157
+ message.published_at
158
+ end
159
+ alias publish_time published_at
87
160
 
88
161
  ##
89
162
  # Acknowledges receipt of the message.
@@ -91,20 +164,26 @@ module Google
91
164
  # @example
92
165
  # require "google/cloud/pubsub"
93
166
  #
94
- # pubsub = Google::Cloud::Pubsub.new
167
+ # pubsub = Google::Cloud::PubSub.new
95
168
  #
96
169
  # sub = pubsub.subscription "my-topic-sub"
97
- # received_message = sub.pull.first
98
- # if received_message
170
+ # subscriber = sub.listen do |received_message|
99
171
  # puts received_message.message.data
172
+ #
100
173
  # received_message.acknowledge!
101
174
  # end
102
175
  #
176
+ # # Start background threads that will call block passed to listen.
177
+ # subscriber.start
178
+ #
179
+ # # Shut down the subscriber when ready to stop receiving messages.
180
+ # subscriber.stop!
181
+ #
103
182
  def acknowledge!
104
183
  ensure_subscription!
105
184
  subscription.acknowledge ack_id
106
185
  end
107
- alias_method :ack!, :acknowledge!
186
+ alias ack! acknowledge!
108
187
 
109
188
  ##
110
189
  # Modifies the acknowledge deadline for the message.
@@ -121,24 +200,81 @@ module Google
121
200
  # @example
122
201
  # require "google/cloud/pubsub"
123
202
  #
124
- # pubsub = Google::Cloud::Pubsub.new
203
+ # pubsub = Google::Cloud::PubSub.new
125
204
  #
126
205
  # sub = pubsub.subscription "my-topic-sub"
127
- # received_message = sub.pull.first
128
- # if received_message
206
+ # subscriber = sub.listen do |received_message|
129
207
  # puts received_message.message.data
208
+ #
130
209
  # # Delay for 2 minutes
131
- # received_message.delay! 120
210
+ # received_message.modify_ack_deadline! 120
132
211
  # end
133
212
  #
134
- def delay! new_deadline
213
+ # # Start background threads that will call block passed to listen.
214
+ # subscriber.start
215
+ #
216
+ # # Shut down the subscriber when ready to stop receiving messages.
217
+ # subscriber.stop!
218
+ #
219
+ def modify_ack_deadline! new_deadline
135
220
  ensure_subscription!
136
- subscription.delay new_deadline, ack_id
221
+ subscription.modify_ack_deadline new_deadline, ack_id
222
+ end
223
+
224
+ ##
225
+ # Resets the acknowledge deadline for the message without acknowledging
226
+ # it.
227
+ #
228
+ # This will make the message available for redelivery.
229
+ #
230
+ # @example
231
+ # require "google/cloud/pubsub"
232
+ #
233
+ # pubsub = Google::Cloud::PubSub.new
234
+ #
235
+ # sub = pubsub.subscription "my-topic-sub"
236
+ # subscriber = sub.listen do |received_message|
237
+ # puts received_message.message.data
238
+ #
239
+ # # Release message back to the API.
240
+ # received_message.reject!
241
+ # end
242
+ #
243
+ # # Start background threads that will call block passed to listen.
244
+ # subscriber.start
245
+ #
246
+ # # Shut down the subscriber when ready to stop receiving messages.
247
+ # subscriber.stop!
248
+ #
249
+ def reject!
250
+ modify_ack_deadline! 0
251
+ end
252
+ alias nack! reject!
253
+ alias ignore! reject!
254
+
255
+ # @private
256
+ def hash
257
+ @grpc.hash
258
+ end
259
+
260
+ # @private
261
+ def eql? other
262
+ return false unless other.is_a? self.class
263
+ @grpc.hash == other.hash
264
+ end
265
+ # @private
266
+ alias == eql?
267
+
268
+ # @private
269
+ def <=> other
270
+ return nil unless other.is_a? self.class
271
+ other_grpc = other.instance_variable_get :@grpc
272
+ @grpc <=> other_grpc
137
273
  end
138
274
 
139
275
  ##
140
276
  # @private New ReceivedMessage from a
141
- # Google::Pubsub::V1::ReceivedMessage object.
277
+ # Google::Cloud::PubSub::V1::ReceivedMessage object.
142
278
  def self.from_grpc grpc, subscription
143
279
  new.tap do |rm|
144
280
  rm.grpc = grpc
@@ -151,9 +287,11 @@ module Google
151
287
  ##
152
288
  # Raise an error unless an active subscription is available.
153
289
  def ensure_subscription!
154
- fail "Must have active subscription" unless subscription
290
+ raise "Must have active subscription" unless subscription
155
291
  end
156
292
  end
157
293
  end
294
+
295
+ Pubsub = PubSub unless const_defined? :Pubsub
158
296
  end
159
297
  end
@@ -0,0 +1,88 @@
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
+ # @attr [Numeric] minimum_backoff The minimum delay between consecutive deliveries of a given message. Value
35
+ # should be between 0 and 600 seconds. The default value is 10 seconds.
36
+ # @attr [Numeric] maximum_backoff The maximum delay between consecutive deliveries of a given message. Value
37
+ # should be between 0 and 600 seconds. The default value is 600 seconds.
38
+ #
39
+ # @example
40
+ # require "google/cloud/pubsub"
41
+ #
42
+ # pubsub = Google::Cloud::PubSub.new
43
+ #
44
+ # sub = pubsub.subscription "my-topic-sub"
45
+ #
46
+ # sub.retry_policy = Google::Cloud::PubSub::RetryPolicy.new minimum_backoff: 5, maximum_backoff: 300
47
+ #
48
+ # sub.retry_policy.minimum_backoff #=> 5
49
+ # sub.retry_policy.maximum_backoff #=> 300
50
+ #
51
+ class RetryPolicy
52
+ attr_reader :minimum_backoff
53
+ attr_reader :maximum_backoff
54
+
55
+ ##
56
+ # Creates a new, immutable RetryPolicy value object.
57
+ #
58
+ # @attr [Numeric, nil] minimum_backoff The minimum delay between consecutive deliveries of a given message.
59
+ # Value should be between 0 and 600 seconds. If `nil` is provided, the default value is 10 seconds.
60
+ # @attr [Numeric, nil] maximum_backoff The maximum 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 600 seconds.
62
+ #
63
+ def initialize minimum_backoff: nil, maximum_backoff: nil
64
+ @minimum_backoff = minimum_backoff
65
+ @maximum_backoff = maximum_backoff
66
+ end
67
+
68
+ ##
69
+ # @private Convert the RetryPolicy to a Google::Cloud::PubSub::V1::RetryPolicy object.
70
+ def to_grpc
71
+ Google::Cloud::PubSub::V1::RetryPolicy.new(
72
+ minimum_backoff: Convert.number_to_duration(minimum_backoff),
73
+ maximum_backoff: Convert.number_to_duration(maximum_backoff)
74
+ )
75
+ end
76
+
77
+ ##
78
+ # @private New RetryPolicy from a Google::Cloud::PubSub::V1::RetryPolicy object.
79
+ def self.from_grpc grpc
80
+ new(
81
+ minimum_backoff: Convert.duration_to_number(grpc.minimum_backoff),
82
+ maximum_backoff: Convert.duration_to_number(grpc.maximum_backoff)
83
+ )
84
+ end
85
+ end
86
+ end
87
+ end
88
+ end