rabbit-wq 1.6.3 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
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