resque-workers-lock 1.0.6 → 1.0.7

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/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