kestrel-client 0.5.7 → 0.5.8
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/kestrel-client.gemspec +1 -1
- data/lib/kestrel/client/transactional.rb +18 -10
- data/spec/kestrel/client/transactional_spec.rb +13 -0
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.8
|
data/kestrel-client.gemspec
CHANGED
@@ -4,10 +4,14 @@ class Kestrel::Client::Transactional < Kestrel::Client::Proxy
|
|
4
4
|
# multiple queues.
|
5
5
|
class MultipleQueueException < StandardError; end
|
6
6
|
|
7
|
+
# Raised when a caller attempts to retry a job if
|
8
|
+
# there is no current open transaction
|
9
|
+
class NoOpenTransaction < StandardError; end
|
10
|
+
|
7
11
|
class RetryableJob < Struct.new(:retries, :job); end
|
8
12
|
|
9
13
|
# Number of times to retry a job before giving up
|
10
|
-
DEFAULT_RETRIES =
|
14
|
+
DEFAULT_RETRIES = 10
|
11
15
|
|
12
16
|
# Pct. of the time during 'normal' processing we check the error queue first
|
13
17
|
ERROR_PROCESSING_RATE = 0.1
|
@@ -39,6 +43,9 @@ class Kestrel::Client::Transactional < Kestrel::Client::Proxy
|
|
39
43
|
# ==== Returns
|
40
44
|
# Job, possibly retryable, or nil
|
41
45
|
#
|
46
|
+
# ==== Raises
|
47
|
+
# MultipleQueueException
|
48
|
+
#
|
42
49
|
def get(key, opts = {})
|
43
50
|
raise MultipleQueueException if current_queue && key != current_queue
|
44
51
|
|
@@ -69,20 +76,21 @@ class Kestrel::Client::Transactional < Kestrel::Client::Proxy
|
|
69
76
|
# retry. If the job has been retried DEFAULT_RETRIES times,
|
70
77
|
# gives up entirely.
|
71
78
|
#
|
79
|
+
# ==== Parameters
|
80
|
+
# item (optional):: if specified, the job set to the error
|
81
|
+
# queue with the given payload instead of what
|
82
|
+
# was originally fetched.
|
83
|
+
#
|
72
84
|
# ==== Returns
|
73
85
|
# Boolean:: true if the job is enqueued in the retry queue, false otherwise
|
74
86
|
#
|
87
|
+
# ==== Raises
|
88
|
+
# NoOpenTransaction
|
75
89
|
#
|
76
90
|
def retry(item = nil)
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
RetryableJob.new(current_retries, item)
|
81
|
-
else
|
82
|
-
@job.dup
|
83
|
-
end
|
84
|
-
|
85
|
-
return unless job
|
91
|
+
raise NoOpenTransaction unless @last_read_queue
|
92
|
+
|
93
|
+
job = item ? RetryableJob.new(@job.retries, item) : @job.dup
|
86
94
|
|
87
95
|
job.retries += 1
|
88
96
|
|
@@ -18,6 +18,7 @@ describe "Kestrel::Client::Transactional" do
|
|
18
18
|
returns = [:mcguffin]
|
19
19
|
stub(@raw_kestrel_client).get(@queue, anything) { returns.shift }
|
20
20
|
stub(@raw_kestrel_client).get(@queue + "_errors", anything)
|
21
|
+
|
21
22
|
mock(@raw_kestrel_client).get_from_last(@queue + "/close")
|
22
23
|
|
23
24
|
get_job.should == :mcguffin
|
@@ -29,6 +30,7 @@ describe "Kestrel::Client::Transactional" do
|
|
29
30
|
returns = [Kestrel::Client::Transactional::RetryableJob.new(1, :mcguffin)]
|
30
31
|
stub(@raw_kestrel_client).get(@queue + "_errors", anything) { returns.shift }
|
31
32
|
stub(@raw_kestrel_client).get(@queue, anything)
|
33
|
+
|
32
34
|
mock(@raw_kestrel_client).get_from_last(@queue + "_errors/close")
|
33
35
|
|
34
36
|
get_job.should == :mcguffin
|
@@ -40,6 +42,7 @@ describe "Kestrel::Client::Transactional" do
|
|
40
42
|
returns = [:mcguffin]
|
41
43
|
stub(@raw_kestrel_client).get(@queue, anything) { returns.shift }
|
42
44
|
stub(@raw_kestrel_client).get(@queue + "_errors", anything)
|
45
|
+
|
43
46
|
mock(@raw_kestrel_client).set(@queue + "_errors", anything) do |q,j|
|
44
47
|
j.retries.should == 1
|
45
48
|
j.job.should == :mcguffin
|
@@ -155,6 +158,16 @@ describe "Kestrel::Client::Transactional" do
|
|
155
158
|
@kestrel.get(@queue)
|
156
159
|
end
|
157
160
|
|
161
|
+
it "raises an exception if called when there is no open transaction" do
|
162
|
+
@kestrel.close_last_transaction
|
163
|
+
lambda { @kestrel.retry }.should raise_error(Kestrel::Client::Transactional::NoOpenTransaction)
|
164
|
+
end
|
165
|
+
|
166
|
+
it "raises an exception if retry has already been called" do
|
167
|
+
@kestrel.retry
|
168
|
+
lambda { @kestrel.retry }.should raise_error(Kestrel::Client::Transactional::NoOpenTransaction)
|
169
|
+
end
|
170
|
+
|
158
171
|
it "enqueues a fresh failed job to the errors queue with a retry count" do
|
159
172
|
mock(@raw_kestrel_client).set(@queue + "_errors", anything) do |queue, job|
|
160
173
|
job.retries.should == 1
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kestrel-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
9
|
+
- 8
|
10
|
+
version: 0.5.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matt Freels
|