resque-uniq 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NjRmZjI0Zjc1ZDZhYTlmMzdkZmEwMzliZDI0ZDVmMjdiZmQ3MGU0Nw==
4
+ ZDc0ZDlmZTMyMzE4MWM5ODI5ZDFlNDEwNmQ4ZWRlYTFlYmYyM2JmMQ==
5
5
  data.tar.gz: !binary |-
6
- NGI1MzBmYTAxZmQyMmUzYzA3OWMxYmRhOWY3NjkyY2Y4MjYwNDgzYw==
6
+ OGEyYmYyZTA5Mjk4OWMzYjM3MmRlZDk3MDJmMjZkOWEwYjg1ZWY1ZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZGZlODU2YWZkZGM2MDRkMjEyOWU4MTdlZDg5YjA4M2MzZDM0YzU5M2UwMjdh
10
- YmY1NTBkYjE3ZmJmYzA4M2ZkNzM2OWYzNTcwMzRhZmM3YzRhYWVmMGJlMDEy
11
- YjljNzFjZTg2MzNhMWRhMjgyZGY1MzcyYmJhZDEyY2RjZWQ2MDA=
9
+ Y2QxNWQ2OTYwZTQzNTk3ODlmY2VkMjEwMWE5YWEzZGU0Y2NhZTI2YTMyODYw
10
+ YmJiNTk5M2Y1YjhjM2FkNzE3ZmUxYzQ1MGQ2MjE4MmUzYzkyOTI0NGUwZDk1
11
+ MDBmYzE4NjFlNzI0YjVhNWJiYzc1MmQ5ZDVkODc3YjE2MWY1NzM=
12
12
  data.tar.gz: !binary |-
13
- Y2VlY2MxYTczNjFjMGUwMGM2NTZiYjYyY2QzMjdiYTM4YTVhMzA1N2ZlY2Jm
14
- NDdkYjBiYjA5ZDgyMmJhYzMxYWU3NjA1NWE4YTM5MjJkZDc5NTczNjM0M2Rm
15
- ZTZmYWQ5MDJhMDFmYTRhNjI2N2M0Y2UxMTZlM2I2YTJiMDRkMDc=
13
+ MTIxMmNjYzc5MmJhYWM5NzZkMzRmMTJmZDkzMDQzYWFhNTQ5M2VlMjAzNzE0
14
+ YTRhMDA0OTM1MjNmMzZiYmQyMTZhYTg5ZjhjNmRjMTBjOTg3Y2MyMmI3Njg4
15
+ MjNiNWI2YTE3YjgyOGRjZWM3NTI1ZjU4NmNkMWMzMTNjOTAwZDg=
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
@@ -1,3 +1,3 @@
1
1
  module ResqueUniq
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -21,10 +21,10 @@ module Resque
21
21
  end
22
22
 
23
23
  def stale_lock?(lock)
24
- return false unless Resque.redis.get(lock)
24
+ return false unless get_lock(lock)
25
25
 
26
26
  rlock = run_lock_from_lock(lock)
27
- return false unless Resque.redis.get(rlock)
27
+ return false unless get_lock(rlock)
28
28
 
29
29
  Resque.working.map {|w| w.job }.map do |item|
30
30
  begin
@@ -39,15 +39,29 @@ module Resque
39
39
  true
40
40
  end
41
41
 
42
+ def ttl
43
+ instance_variable_get(:@unique_lock_autoexpire) || respond_to?(:unique_lock_autoexpire) && unique_lock_autoexpire
44
+ end
45
+
46
+ def get_lock(lock)
47
+ lock_value = Resque.redis.get(lock)
48
+ set_time = lock_value.to_i
49
+ if ttl && set_time && (set_time > Time.now.to_i - ttl)
50
+ Resque.redis.del(lock)
51
+ nil
52
+ else
53
+ lock_value
54
+ end
55
+ end
56
+
42
57
  def before_enqueue_lock(*args)
43
58
  lock_name = lock(*args)
44
59
  if stale_lock? lock_name
45
60
  Resque.redis.del lock_name
46
- Resque.redis.del "#{RUN_LOCK_NAME_PREFIX}#{lock_name}"
61
+ Resque.redis.del run_lock_from_lock(lock_name)
47
62
  end
48
63
  not_exist = Resque.redis.setnx(lock_name, Time.now.to_i)
49
64
  if not_exist
50
- ttl = instance_variable_get(:@unique_lock_autoexpire) || respond_to?(:unique_lock_autoexpire) && unique_lock_autoexpire
51
65
  if ttl && ttl > 0
52
66
  Resque.redis.expire(lock_name, ttl)
53
67
  end
@@ -27,6 +27,7 @@ class UniqueJobTest < Test::Unit::TestCase
27
27
 
28
28
  def setup
29
29
  Resque.remove_queue(Resque.queue_from_class(Job))
30
+ Resque.remove_queue(Resque.queue_from_class(AutoexpireLockJob))
30
31
  Resque.redis.keys('*:UniqueJobTest::*').each {|k| Resque.redis.del(k) }
31
32
  end
32
33
 
@@ -93,4 +94,9 @@ class UniqueJobTest < Test::Unit::TestCase
93
94
  assert_equal 2, Resque.size(Resque.queue_from_class(ExtendedAutoExpireLockJob))
94
95
  end
95
96
 
97
+ def test_cleans_up_old_lock_during_enqueue
98
+ Resque.redis.set(AutoexpireLockJob.lock(123), Time.now.to_i + 100)
99
+ Resque.enqueue(AutoexpireLockJob, 123)
100
+ assert_equal 1, Resque.size(Resque.queue_from_class(AutoexpireLockJob))
101
+ end
96
102
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-uniq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trung Duc Tran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-24 00:00:00.000000000 Z
11
+ date: 2014-01-28 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: