resque-workers-lock 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -23,12 +23,12 @@ class Parser
23
23
  extend Resque::Plugins::Workers::Lock
24
24
 
25
25
  # Lock method has the same arguments as the self.perform
26
- def self.workers_lock(domain, arg2, arg3)
26
+ def self.lock_workers(domain, arg2, arg3)
27
27
  return domain
28
28
  end
29
29
 
30
30
  # Turn off standard resque-lock functionality
31
- def self.enqueue_lock(domain, arg2, arg3)
31
+ def self.lock_enqueue(domain, arg2, arg3)
32
32
  false
33
33
  end
34
34
 
@@ -4,12 +4,12 @@ module Resque
4
4
  module Lock
5
5
 
6
6
  # Override in your job to control the queue lock key
7
- def enqueue_lock(*args)
7
+ def lock_enqueue(*args)
8
8
  "enqueuelock:#{name}-#{args.to_s}"
9
9
  end
10
10
 
11
11
  # Override in your job to control the workers lock key.
12
- def workers_lock(*args)
12
+ def lock_workers(*args)
13
13
  "workerslock:#{name}-#{args.to_s}"
14
14
  end
15
15
 
@@ -18,20 +18,25 @@ module Resque
18
18
  1.0
19
19
  end
20
20
 
21
+
22
+ # Called with the job args before a job is placed on the queue.
23
+ # If the hook returns false, the job will not be placed on the queue.
21
24
  def before_enqueue_lock(*args)
22
- if enqueue_lock(*args)
23
- return Resque.redis.setnx(enqueue_lock(*args), true)
24
- else
25
+ if lock_enqueue(*args) == false
25
26
  return true
27
+ else
28
+ return Resque.redis.setnx(lock_enqueue(*args).to_s, true)
26
29
  end
27
30
  end
28
31
 
32
+ # Called with the job args before perform.
33
+ # If it raises Resque::Job::DontPerform, the job is aborted.
29
34
  def before_perform_lock(*args)
30
- if workers_lock(*args)
31
- nx = Resque.redis.setnx(workers_lock(*args), true)
35
+ if lock_workers(*args)
36
+ nx = Resque.redis.setnx(lock_workers(*args).to_s, true)
32
37
  if nx == false
33
38
  sleep(requeue_perform_delay)
34
- Resque.redis.del(enqueue_lock(*args))
39
+ Resque.redis.del(lock_enqueue(*args).to_s)
35
40
  Resque.enqueue(self, *args)
36
41
  raise Resque::Job::DontPerform
37
42
  end
@@ -43,15 +48,15 @@ module Resque
43
48
  yield
44
49
  ensure
45
50
  # Clear the lock. (even with errors)
46
- Resque.redis.del(workers_lock(*args))
47
- Resque.redis.del(enqueue_lock(*args))
51
+ Resque.redis.del(lock_workers(*args).to_s)
52
+ Resque.redis.del(lock_enqueue(*args).to_s)
48
53
  end
49
54
  end
50
55
 
51
56
  def on_failure_lock(exception, *args)
52
57
  # Clear the lock on DirtyExit
53
- Resque.redis.del(workers_lock(*args))
54
- Resque.redis.del(enqueue_lock(*args))
58
+ Resque.redis.del(lock_workers(*args).to_s)
59
+ Resque.redis.del(lock_enqueue(*args).to_s)
55
60
  end
56
61
 
57
62
  end
data/test/lock_test.rb CHANGED
@@ -5,19 +5,36 @@ require 'resque/plugins/workers/lock'
5
5
  $counter = 0
6
6
 
7
7
  class LockTest < Test::Unit::TestCase
8
- class Job
8
+ class SimilarJob
9
9
  extend Resque::Plugins::Workers::Lock
10
10
  @queue = :lock_test
11
11
 
12
12
  def self.perform
13
- raise "This should not have not happened"
13
+ raise "Woah woah! How did this happen?"
14
+ end
15
+ end
16
+
17
+ class UniqueJob
18
+ extend Resque::Plugins::Workers::Lock
19
+ @queue = :lock_test
20
+
21
+ #def self.lock_enqueue(id)
22
+ # return id.to_s
23
+ #end
24
+
25
+ def self.lock_workers(id)
26
+ return id.to_s
27
+ end
28
+
29
+ def self.perform(id)
30
+ raise "Woah woah! How did this happen?"
14
31
  end
15
32
  end
16
33
 
17
34
  def setup
18
35
  Resque.redis.del('queue:lock_test')
19
- Resque.redis.del(Job.workers_lock)
20
- Resque.redis.del(Job.enqueue_lock)
36
+ Resque.redis.del(SimilarJob.lock_workers)
37
+ Resque.redis.del(SimilarJob.lock_enqueue)
21
38
  end
22
39
 
23
40
  def test_lint
@@ -34,9 +51,30 @@ class LockTest < Test::Unit::TestCase
34
51
  end
35
52
 
36
53
  def test_enqueue
37
- 3.times { Resque.enqueue(Job) }
54
+ 3.times { Resque.enqueue(SimilarJob) }
38
55
 
56
+ assert_equal "workerslock:LockTest::SimilarJob-[]", SimilarJob.lock_workers
57
+ assert_equal "enqueuelock:LockTest::SimilarJob-[]", SimilarJob.lock_enqueue
39
58
  assert_equal 1, Resque.redis.llen('queue:lock_test')
59
+
60
+ 3.times do |i|
61
+ Resque.enqueue(UniqueJob, (i+100).to_s)
62
+ #assert_equal i.to_s, UniqueJob.lock_enqueue(i.to_s)
63
+ assert_equal i.to_s, UniqueJob.lock_workers(i.to_s)
64
+ end
65
+
66
+ assert_equal 4, Resque.redis.llen('queue:lock_test')
67
+ end
68
+
69
+ def test_zcleanup
70
+ Resque.redis.del(SimilarJob.lock_workers)
71
+ Resque.redis.del(SimilarJob.lock_enqueue)
72
+
73
+ 3.times do |i|
74
+ Resque.redis.del(UniqueJob.lock_enqueue((i+100).to_s))
75
+ end
76
+ Resque.redis.del('queue:lock_test')
77
+ assert_equal 0, Resque.redis.llen('queue:lock_test')
40
78
  end
41
79
 
42
80
  def test_lock
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.0.6
4
+ version: 1.0.7
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-07-25 00:00:00.000000000 Z
12
+ date: 2012-07-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: resque