resque-workers-lock 1.2 → 1.3
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.
- data/lib/resque/plugins/workers/lock.rb +18 -10
- data/test/lock_test.rb +13 -15
- metadata +2 -2
|
@@ -14,12 +14,20 @@ module Resque
|
|
|
14
14
|
|
|
15
15
|
# Override in your job to control the queue lock key
|
|
16
16
|
def lock_enqueue(*args)
|
|
17
|
-
"
|
|
17
|
+
"#{name}-#{args.to_s}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def get_lock_enqueue(*args)
|
|
21
|
+
"enqueuelock:"+lock_enqueue(*args).to_s
|
|
18
22
|
end
|
|
19
23
|
|
|
20
24
|
# Override in your job to control the workers lock key.
|
|
21
25
|
def lock_workers(*args)
|
|
22
|
-
"
|
|
26
|
+
"#{name}-#{args.to_s}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def get_lock_workers(*args)
|
|
30
|
+
"workerslock:"+lock_workers(*args).to_s
|
|
23
31
|
end
|
|
24
32
|
|
|
25
33
|
# Override in your job to change the perform requeue delay
|
|
@@ -34,7 +42,7 @@ module Resque
|
|
|
34
42
|
if lock_enqueue(*args) == false
|
|
35
43
|
return true
|
|
36
44
|
else
|
|
37
|
-
return Resque.redis.setnx(
|
|
45
|
+
return Resque.redis.setnx(get_lock_enqueue(*args), true)
|
|
38
46
|
end
|
|
39
47
|
end
|
|
40
48
|
|
|
@@ -42,10 +50,10 @@ module Resque
|
|
|
42
50
|
# If it raises Resque::Job::DontPerform, the job is aborted.
|
|
43
51
|
def before_perform_lock(*args)
|
|
44
52
|
if lock_workers(*args)
|
|
45
|
-
nx = Resque.redis.setnx(
|
|
53
|
+
nx = Resque.redis.setnx(get_lock_workers(*args), true)
|
|
46
54
|
if nx == false
|
|
47
55
|
sleep(requeue_perform_delay)
|
|
48
|
-
Resque.redis.del(
|
|
56
|
+
Resque.redis.del(get_lock_enqueue(*args))
|
|
49
57
|
Resque.enqueue(self, *args)
|
|
50
58
|
raise Resque::Job::DontPerform
|
|
51
59
|
end
|
|
@@ -54,7 +62,7 @@ module Resque
|
|
|
54
62
|
|
|
55
63
|
def after_dequeue_lock(*args)
|
|
56
64
|
# Clear the lock when dequeueed
|
|
57
|
-
Resque.redis.del(
|
|
65
|
+
Resque.redis.del(get_lock_enqueue(*args))
|
|
58
66
|
end
|
|
59
67
|
|
|
60
68
|
def around_perform_lock(*args)
|
|
@@ -62,15 +70,15 @@ module Resque
|
|
|
62
70
|
yield
|
|
63
71
|
ensure
|
|
64
72
|
# Clear the lock. (even with errors)
|
|
65
|
-
Resque.redis.del(
|
|
66
|
-
Resque.redis.del(
|
|
73
|
+
Resque.redis.del(get_lock_workers(*args))
|
|
74
|
+
Resque.redis.del(get_lock_enqueue(*args))
|
|
67
75
|
end
|
|
68
76
|
end
|
|
69
77
|
|
|
70
78
|
def on_failure_lock(exception, *args)
|
|
71
79
|
# Clear the lock on DirtyExit
|
|
72
|
-
Resque.redis.del(
|
|
73
|
-
Resque.redis.del(
|
|
80
|
+
Resque.redis.del(get_lock_workers(*args))
|
|
81
|
+
Resque.redis.del(get_lock_enqueue(*args))
|
|
74
82
|
end
|
|
75
83
|
|
|
76
84
|
end
|
data/test/lock_test.rb
CHANGED
|
@@ -18,12 +18,12 @@ class LockTest < Test::Unit::TestCase
|
|
|
18
18
|
extend Resque::Plugins::Workers::Lock
|
|
19
19
|
@queue = :lock_test
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
def self.lock_enqueue(id)
|
|
22
|
+
return id.to_s+"e"
|
|
23
|
+
end
|
|
24
24
|
|
|
25
25
|
def self.lock_workers(id)
|
|
26
|
-
return id.to_s
|
|
26
|
+
return id.to_s+"w"
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def self.perform(id)
|
|
@@ -53,14 +53,14 @@ class LockTest < Test::Unit::TestCase
|
|
|
53
53
|
def test_enqueue
|
|
54
54
|
3.times { Resque.enqueue(SimilarJob) }
|
|
55
55
|
|
|
56
|
-
assert_equal "
|
|
57
|
-
assert_equal "
|
|
56
|
+
assert_equal "LockTest::SimilarJob-[]", SimilarJob.lock_workers
|
|
57
|
+
assert_equal "LockTest::SimilarJob-[]", SimilarJob.lock_enqueue
|
|
58
58
|
assert_equal 1, Resque.redis.llen('queue:lock_test')
|
|
59
59
|
|
|
60
60
|
3.times do |i|
|
|
61
|
-
Resque.enqueue(UniqueJob,
|
|
62
|
-
|
|
63
|
-
assert_equal i.to_s, UniqueJob.lock_workers(i
|
|
61
|
+
Resque.enqueue(UniqueJob, i+100)
|
|
62
|
+
assert_equal i.to_s+"e", UniqueJob.lock_enqueue(i)
|
|
63
|
+
assert_equal i.to_s+"w", UniqueJob.lock_workers(i)
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
assert_equal 4, Resque.redis.llen('queue:lock_test')
|
|
@@ -73,13 +73,11 @@ class LockTest < Test::Unit::TestCase
|
|
|
73
73
|
end
|
|
74
74
|
|
|
75
75
|
def test_zcleanup
|
|
76
|
-
Resque.
|
|
77
|
-
|
|
76
|
+
Resque.remove_queue(:lock_test)
|
|
77
|
+
|
|
78
|
+
Resque.redis.keys('enqueuelock:*').collect { |x| Resque.redis.del(x) }.count
|
|
79
|
+
Resque.redis.keys('workerslock:*').collect { |x| Resque.redis.del(x) }.count
|
|
78
80
|
|
|
79
|
-
3.times do |i|
|
|
80
|
-
Resque.redis.del(UniqueJob.lock_enqueue((i+100).to_s))
|
|
81
|
-
end
|
|
82
|
-
Resque.redis.del('queue:lock_test')
|
|
83
81
|
assert_equal 0, Resque.redis.llen('queue:lock_test')
|
|
84
82
|
end
|
|
85
83
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: resque-workers-lock
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '1.
|
|
4
|
+
version: '1.3'
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-
|
|
12
|
+
date: 2012-08-21 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: resque
|