hanami-events-cloud_pubsub 2.1.3 → 2.1.4

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: 9b535cead0f43738abd37ba5487c71c04fe58dfc0af3c22cc0860f86ca8c3036
4
- data.tar.gz: 2b0175b75fa4caed47c2b592a674b39ccd2ee392adf715a52211a70b4a633ba2
3
+ metadata.gz: e51fcb2486cdeca9c675d1a37e4c70f21ba9cad09fc3a148294cb03f1a2570ec
4
+ data.tar.gz: cdfad2c9b22abf3c4c80349b977c7f966e0a1c40faf955f4553ab06cbf999eb1
5
5
  SHA512:
6
- metadata.gz: f8916a647db7d0d14c8b56fa3e359fc553cb022d28b989de6f1442aaa18dd96605f16eb089dec0ccdcb0aea9f6730c950907e3fd5b6bae8c801c194f87c61a7b
7
- data.tar.gz: 3002bd4edceba5fd9a85dfbd0b0e58407283775b37cf301e97a08f95c2a13bf1257ab274d7aedea1ad44c5da42ac1e7ae46cb0b7a35c82051a167ec630ac95a4
6
+ metadata.gz: 820f3a4bed9594d8ce3b287232d59d1a4d2b96334b6b4ce4ce5ee0693db56536902e89773321f7486319a86a1f39f077ec1410c4a5cd5930004366325724feb0
7
+ data.tar.gz: 6349ab7adf08c16a7847f51e94278ca771a40ebf1ebbb567b1b78c53e8dabea06143e5a37b07f119533b7d91fa17c331e4693dd4ffe356f69f4f97b4f42c3311
data/Gemfile.lock CHANGED
@@ -8,7 +8,7 @@ GIT
8
8
  PATH
9
9
  remote: .
10
10
  specs:
11
- hanami-events-cloud_pubsub (2.1.3)
11
+ hanami-events-cloud_pubsub (2.1.4)
12
12
  dry-configurable (~> 0.8.0)
13
13
  google-cloud-pubsub (~> 0.34.0)
14
14
  hanami-cli (~> 0.2)
@@ -7,8 +7,11 @@ module Hanami
7
7
  module Middleware
8
8
  # Middleware used for automatically acknowledging messages
9
9
  class AutoRetry
10
- def initialize(logger: nil)
10
+ attr_reader :max_attempts
11
+
12
+ def initialize(logger: nil, max_attempts: 1200)
11
13
  @logger = logger
14
+ @max_attempts = max_attempts
12
15
  end
13
16
 
14
17
  def call(message, args = {})
@@ -26,22 +29,48 @@ module Hanami
26
29
  private
27
30
 
28
31
  def ack_or_reject(message, succeeded, failed, args)
29
- id = message.message_id
30
-
31
32
  if succeeded
32
- message.acknowledge!
33
- logger.debug "Message(#{id}) was acknowledged"
33
+ handle_success(message, args)
34
+ elsif failed && max_attempts_reached?(args)
35
+ handle_max_attempts_reached(message, args)
34
36
  elsif failed
35
- seconds = calculate_backoff_seconds(message, args)
36
- success = message.modify_ack_deadline!(seconds)
37
- msg = "added #{success ? seconds : 0} seconds of delay to ack deadline"
38
- logger.debug "Message(#{id}) failed, #{msg}" if success
37
+ handle_failure(message, args)
39
38
  else
40
- message.reject!
41
- logger.warn "Message(#{id}) was terminated from outside, rescheduling"
39
+ handle_unfinished(message, args)
42
40
  end
43
41
  end
44
42
 
43
+ def handle_success(message, _args)
44
+ message.acknowledge!
45
+ logger.debug "Message(#{message.message_id}) was acknowledged"
46
+ end
47
+
48
+ def max_attempts_reached?(args)
49
+ args.key?(:attempts) && args[:attempts] >= max_attempts
50
+ end
51
+
52
+ def handle_max_attempts_reached(message, _args)
53
+ id = message.message_id
54
+ msg = 'number of attempts exceeded max attempts ' \
55
+ "of #{max_attempts}, acknowledging message"
56
+ logger.debug "Message(#{id}) failed, #{msg}"
57
+ message.acknowledge!
58
+ end
59
+
60
+ def handle_failure(message, args)
61
+ id = message.message_id
62
+ seconds = calculate_backoff_seconds(message, args)
63
+ success = message.modify_ack_deadline!(seconds)
64
+ msg = "added #{success ? seconds : 0} seconds of delay to ack deadline"
65
+ logger.debug "Message(#{id}) failed, #{msg}" if success
66
+ end
67
+
68
+ def handle_unfinished(message, _args)
69
+ id = message.message_id
70
+ message.reject!
71
+ logger.warn "Message(#{id}) was terminated from outside, rescheduling"
72
+ end
73
+
45
74
  def logger
46
75
  @logger || CloudPubsub.logger
47
76
  end
@@ -3,7 +3,7 @@
3
3
  module Hanami
4
4
  module Events
5
5
  module CloudPubsub
6
- VERSION = '2.1.3'
6
+ VERSION = '2.1.4'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hanami-events-cloud_pubsub
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian Ker-Seymer