rabbit-wq 1.6.3 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 99990b341472fc45fb672ae58b4248c85ef210b3
4
- data.tar.gz: 392e5f66abc7537ec8ea1b14c25bb81d2f791acd
3
+ metadata.gz: c97ac243defa2aac2f23a698f956eac51dfa8574
4
+ data.tar.gz: 3339d19f9f1d53523e05343c2e69e906111f3afb
5
5
  SHA512:
6
- metadata.gz: 30582b9f999ad7e9296ac8f79094882bfca690d20cd2163551e3122a53d4e428e9c1fb4a0bed51b14599ebc6aa27a8ce6bd3ef723519b4af8ee998eb213aea75
7
- data.tar.gz: 5e21ba5f485f56d472482febfd6af03c61dc1bf2d8b9bd0c781402297eb1d4bb5d818a1523041e72b2bff349324491265431c109e438d640a8d54dca1146287f
6
+ metadata.gz: a411faf8ad4c6a2fc5c79059898172754f0661f42ce7dd35db00709c487b322c2ac94ef0c2cdabb18974c5f7de0fdb38b67ffae7c1e111966680ae4ae69dbb27
7
+ data.tar.gz: f4042f81efaa480cdb975f1e8df376e1d504b1d934a02888150085d124f0eeb875df25387f161c4e430768c989cdfc2a096301dbae2d390f0b8962a644210422
data/README.md CHANGED
@@ -68,6 +68,30 @@ Or install it yourself as:
68
68
 
69
69
  RabbitWQ::Work.enqueue( worker, retry: 1, retry_delay: 30000 )
70
70
 
71
+ #### Skipping Retry by Forcing a Final Error
72
+
73
+ You can use the RabbitWQ::FinalError to skip retry functionality in the case of an error that will never recover given a time delay.
74
+
75
+ class SomeWorker < Struct.new( :some_variable )
76
+ def call
77
+ final_error( "Some message" )
78
+ end
79
+ end
80
+
81
+ The #final_error method will raise a RabbitWQ::FinalError which triggers the normal final error functionality (callbacks, logging,
82
+ error queue queueing). If you owuld like to treat the final error as something other than an error level occurence, you can pass the level
83
+ to #final_error.
84
+
85
+ class SomeWorker < Struct.new( :some_variable )
86
+ def call
87
+ final_error( "Some message", :info )
88
+ end
89
+ end
90
+
91
+ When a level other than :error is provided, an log entry to the work log is created at the level provided, ie. :info. However, an error is
92
+ not logged and an error is not queued on the error queue. The error callbacks are still executed. If you want to avoid functionality in
93
+ an existing callback, you can test the #level of the error.
94
+
71
95
  ### Queueing Work with a Retry and Auto-Scaling Retry Dealy
72
96
 
73
97
  RabbitWQ::Work.enqueue( worker, retry: 1, retry_delay: 'auto-scale' )
data/lib/rabbit_wq.rb CHANGED
@@ -10,6 +10,7 @@ module RabbitWQ
10
10
 
11
11
  autoload :Command, 'rabbit_wq/command'
12
12
  autoload :Configuration, 'rabbit_wq/configuration'
13
+ autoload :FinalError, 'rabbit_wq/final_error'
13
14
  autoload :Logging, 'rabbit_wq/logging'
14
15
  autoload :Queues, 'rabbit_wq/queues'
15
16
  autoload :MessageHandler, 'rabbit_wq/message_handler'
@@ -0,0 +1,11 @@
1
+ module RabbitWQ
2
+ class FinalError < StandardError
3
+
4
+ attr_reader :level
5
+
6
+ def initialize( level=:error )
7
+ @level = level
8
+ end
9
+
10
+ end
11
+ end
@@ -24,7 +24,6 @@ module RabbitWQ
24
24
  try_on_success_callback( worker )
25
25
  channel.ack delivery_info.delivery_tag
26
26
  rescue => e
27
- error e
28
27
  handle_error( worker, e, channel, delivery_info, payload, metadata )
29
28
  end
30
29
 
@@ -49,7 +48,7 @@ module RabbitWQ
49
48
  message: e.message,
50
49
  backtrace: e.backtrace }
51
50
 
52
- if headers && headers['retry']
51
+ if headers && headers['retry'] && !e.is_a?( RabbitWQ::FinalError )
53
52
  attempt = headers.fetch( 'attempt', 1 ).to_i
54
53
 
55
54
  if attempt < headers['retry']
@@ -61,6 +60,7 @@ module RabbitWQ
61
60
 
62
61
  Work.enqueue_payload( payload, headers.merge( delay: retry_delay, attempt: attempt + 1 ).
63
62
  merge( error: error_metadata ))
63
+ error( e )
64
64
  worker_error( worker, "ERROR WITH RETRY " + error_metadata.inspect )
65
65
  try_on_error_callback( worker, e )
66
66
  try_on_retryable_error_callback( worker, e )
@@ -69,7 +69,16 @@ module RabbitWQ
69
69
  end
70
70
  end
71
71
 
72
+ if e.is_a?( RabbitWQ::FinalError ) && e.level != :error
73
+ RabbitWQ.work_logger.send( e.level, worker, e.message )
74
+ try_on_error_callback( worker, e )
75
+ try_on_final_error_callback( worker, e )
76
+ channel.nack delivery_info.delivery_tag
77
+ return
78
+ end
79
+
72
80
  Work.enqueue_error_payload( payload, error: error_metadata )
81
+ error( e )
73
82
  worker_error( worker, "FINAL ERROR " + error_metadata.inspect )
74
83
  try_on_error_callback( worker, e )
75
84
  try_on_final_error_callback( worker, e )
@@ -1,3 +1,3 @@
1
1
  module RabbitWQ
2
- VERSION = "1.6.3"
2
+ VERSION = "1.7.0"
3
3
  end
@@ -37,6 +37,10 @@ module RabbitWQ
37
37
  true
38
38
  end
39
39
 
40
+ def final_error( msg, level=:error )
41
+ raise RabbitWQ::FinalError.new( level ), msg
42
+ end
43
+
40
44
  # When true, will place the worker in error queue
41
45
  #
42
46
  def error_on_disabled?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbit-wq
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.3
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - C. Jason Harrelson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-25 00:00:00.000000000 Z
11
+ date: 2014-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -130,6 +130,7 @@ files:
130
130
  - lib/rabbit_wq/cli.rb
131
131
  - lib/rabbit_wq/command.rb
132
132
  - lib/rabbit_wq/configuration.rb
133
+ - lib/rabbit_wq/final_error.rb
133
134
  - lib/rabbit_wq/logging.rb
134
135
  - lib/rabbit_wq/message_handler.rb
135
136
  - lib/rabbit_wq/queues.rb