resque_stuck_queue 0.0.7 → 0.0.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA512:
3
- metadata.gz: 9a0277c13278dc4044d3da46038e8abf0a1cb44d43ec4acc858e8b2c17519f215468f627a2025e7a680a3d97dc28938314babaf2ac4dc62170afaef0248e63b6
4
- data.tar.gz: b7864ee5d7d1e3e185f87f6dd016725016e8595b82c78d9d69a90a7eaf02b3b7a366002859a0c7b1f2d030ebdd5b0d4a4b7adbe7757efe950ff970f1ee48d750
5
2
  SHA1:
6
- metadata.gz: 65ce8ea2275ca9e9da2e22178e496b66bcdcc593
7
- data.tar.gz: c552ea4b8ae68c03387a62fe83e98b3f8545fcf1
3
+ data.tar.gz: 45a7b50263556a7d07eaaee7c006033479ba01f2
4
+ metadata.gz: 8b0c17d7a88388d815317a82502f37f6f57d3a8a
5
+ SHA512:
6
+ data.tar.gz: eb8d73f5882b34d63c5cee3cf4cb8bec0e66a2c9b3f30355772042284a93c98bf01357e936fab39904015c5f093588d471af1583daaf8cff6c856870b35fef48
7
+ metadata.gz: 714f459c5ae47a20353efc148050a2e7957557776110852266688e84d9c3ab36a908831b56a5fde7d18293181569722f925716c1ac7fbd3e0c9b0762bd59648b
data/Gemfile CHANGED
@@ -1,12 +1,17 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'resque'
3
+ if ENV['RESQUE_2']
4
+ # resque 2
5
+ gem 'resque', :git => "https://github.com/engineyard/resque.git"
6
+ else
7
+ gem 'resque'
8
+ end
9
+
4
10
  gem 'redis-mutex'
5
11
 
6
12
  # TEST
7
13
  gem 'minitest'
8
14
  gem 'mocha'
9
- gem 'resque-mock'
10
15
  gem 'pry'
11
16
  gem 'rake'
12
17
  gem 'm'
data/Gemfile.lock CHANGED
@@ -1,7 +1,18 @@
1
+ GIT
2
+ remote: https://github.com/engineyard/resque.git
3
+ revision: 2949f9f5b035c59a7c03999c00558544837324b5
4
+ specs:
5
+ resque (2.0.0.pre.1)
6
+ json
7
+ mono_logger (~> 1.0)
8
+ redis-namespace (>= 1.3.0)
9
+ thor (~> 0.17)
10
+
1
11
  GEM
2
12
  remote: https://rubygems.org/
3
13
  specs:
4
14
  coderay (1.1.0)
15
+ json (1.8.1)
5
16
  m (1.3.2)
6
17
  method_source (>= 0.6.7)
7
18
  rake (>= 0.9.2.2)
@@ -11,14 +22,10 @@ GEM
11
22
  mocha (0.14.0)
12
23
  metaclass (~> 0.0.1)
13
24
  mono_logger (1.1.0)
14
- multi_json (1.8.2)
15
25
  pry (0.9.12.4)
16
26
  coderay (~> 1.0)
17
27
  method_source (~> 0.8)
18
28
  slop (~> 3.4)
19
- rack (1.5.2)
20
- rack-protection (1.5.1)
21
- rack
22
29
  rake (10.1.0)
23
30
  redis (3.0.6)
24
31
  redis-classy (1.2.0)
@@ -27,29 +34,15 @@ GEM
27
34
  redis-classy (~> 1.2)
28
35
  redis-namespace (1.4.1)
29
36
  redis (~> 3.0.4)
30
- resque (1.25.1)
31
- mono_logger (~> 1.0)
32
- multi_json (~> 1.0)
33
- redis-namespace (~> 1.2)
34
- sinatra (>= 0.9.2)
35
- vegas (~> 0.1.2)
36
- resque-mock (0.1.1)
37
- resque
38
37
  resque-scheduler (2.0.1)
39
38
  redis (>= 2.0.1)
40
39
  resque (>= 1.20.0)
41
40
  rufus-scheduler
42
41
  rufus-scheduler (2.0.19)
43
42
  tzinfo (>= 0.3.23)
44
- sinatra (1.4.4)
45
- rack (~> 1.4)
46
- rack-protection (~> 1.4)
47
- tilt (~> 1.3, >= 1.3.4)
48
43
  slop (3.4.7)
49
- tilt (1.4.1)
44
+ thor (0.18.1)
50
45
  tzinfo (0.3.38)
51
- vegas (0.1.11)
52
- rack (>= 1.0.0)
53
46
 
54
47
  PLATFORMS
55
48
  ruby
@@ -61,6 +54,5 @@ DEPENDENCIES
61
54
  pry
62
55
  rake
63
56
  redis-mutex
64
- resque
65
- resque-mock
57
+ resque!
66
58
  resque-scheduler
data/README.md CHANGED
@@ -47,6 +47,8 @@ Resque::StuckQueue.config[:abort_on_exception] = true
47
47
  # optional, pass a logger. Default a ruby logger will be instantiated. Needs to respond to that interface.
48
48
  Resque::StuckQueue.config[:logger] = Logger.new($stdout)
49
49
 
50
+ # optional, pass a redis.
51
+ Resque::StuckQueue.config[:redis] = Redis.new
50
52
  </pre>
51
53
 
52
54
  Then start it:
@@ -5,7 +5,6 @@ require 'resque'
5
5
 
6
6
  # TODO rm redis-mutex dep and just do the setnx locking here
7
7
  require 'redis-mutex'
8
- Redis::Classy.db = Resque.redis
9
8
 
10
9
  require 'logger'
11
10
 
@@ -36,6 +35,9 @@ module Resque
36
35
  #
37
36
  # # default handler
38
37
  # config[:handler] = proc { send_mail }
38
+ #
39
+ # # explicit redis
40
+ # config[:redis] = Redis.new
39
41
  def config
40
42
  @config ||= {}
41
43
  end
@@ -44,6 +46,10 @@ module Resque
44
46
  @logger ||= (config[:logger] || Logger.new($stdout))
45
47
  end
46
48
 
49
+ def redis
50
+ @redis ||= (config[:redis] || Resque.redis)
51
+ end
52
+
47
53
  def start_in_background
48
54
  Thread.new do
49
55
  Thread.current.abort_on_exception = config[:abort_on_exception]
@@ -58,6 +64,7 @@ module Resque
58
64
  @threads = []
59
65
  config.freeze
60
66
 
67
+ Redis::Classy.db = redis if Redis::Classy.db.nil?
61
68
 
62
69
  enqueue_repeating_refresh_job
63
70
  setup_checker_thread
@@ -109,8 +116,6 @@ module Resque
109
116
  while @running
110
117
  # we want to go through resque jobs, because that's what we're trying to test here:
111
118
  # ensure that jobs get executed and the time is updated!
112
- #
113
- # TODO REDIS 2.0 compat
114
119
  logger.info("Sending refresh job")
115
120
  enqueue_job
116
121
  wait_for_it
@@ -122,7 +127,7 @@ module Resque
122
127
  if config[:refresh_job]
123
128
  config[:refresh_job].call
124
129
  else
125
- Resque.enqueue(RefreshLatestTimestamp, global_key)
130
+ Resque.enqueue(RefreshLatestTimestamp, [global_key, redis.client.host, redis.client.port])
126
131
  end
127
132
  end
128
133
 
@@ -158,7 +163,7 @@ module Resque
158
163
 
159
164
  def manual_refresh
160
165
  time = Time.now.to_i
161
- Resque.redis.set(global_key, time)
166
+ redis.set(global_key, time)
162
167
  time
163
168
  end
164
169
 
@@ -171,7 +176,7 @@ module Resque
171
176
  end
172
177
 
173
178
  def read_from_redis
174
- Resque.redis.get(global_key)
179
+ redis.get(global_key)
175
180
  end
176
181
 
177
182
  def wait_for_it
@@ -187,7 +192,11 @@ end
187
192
 
188
193
  class RefreshLatestTimestamp
189
194
  @queue = :app
190
- def self.perform(timestamp_key)
191
- Resque.redis.set(timestamp_key, Time.now.to_i)
195
+ def self.perform(args)
196
+ timestamp_key = args[0]
197
+ host = args[1] || "localhost"
198
+ port = args[2] || "6379"
199
+ r = Redis.new(:host => host, :port => port)
200
+ r.set(timestamp_key, Time.now.to_i)
192
201
  end
193
202
  end
@@ -1,5 +1,5 @@
1
1
  module Resque
2
2
  module StuckQueue
3
- VERSION = "0.0.7"
3
+ VERSION = "0.0.8"
4
4
  end
5
5
  end
@@ -1,6 +1,8 @@
1
1
  class RefreshLatestTimestamp
2
2
  @queue = :app
3
- def self.perform(timestamp_key)
4
- Resque.redis.set(timestamp_key, Time.now.to_i)
3
+ def self.perform(args)
4
+ timestamp_key, host, port = args[0], args[1], args[2]
5
+ r = Redis.new(:host => host, :port => port)
6
+ r.set(timestamp_key, Time.now.to_i)
5
7
  end
6
8
  end
data/test/test_helper.rb CHANGED
@@ -2,7 +2,6 @@ require 'minitest'
2
2
  require "minitest/autorun"
3
3
  require 'pry'
4
4
  require 'mocha'
5
- require 'resque/mock'
6
5
  $:.unshift(".")
7
6
  require 'resque_stuck_queue'
8
7
  require File.join(File.expand_path(File.dirname(__FILE__)), "resque", "set_redis_key")
@@ -0,0 +1,49 @@
1
+ # run with
2
+ # $ RESQUE_2=1 bi; RESQUE_2=1 be ruby -I. -Ilib/ test/test_resque_2.rb
3
+ if !ENV['RESQUE_2'].nil?
4
+
5
+ require 'minitest'
6
+ require "minitest/autorun"
7
+ require "pry"
8
+ require "logger"
9
+
10
+ $:.unshift(".")
11
+ require "resque_stuck_queue"
12
+ require File.join(File.expand_path(File.dirname(__FILE__)), "resque", "set_redis_key")
13
+ require File.join(File.expand_path(File.dirname(__FILE__)), "resque", "refresh_latest_timestamp")
14
+
15
+ class TestResque2 < Minitest::Test
16
+
17
+ def setup
18
+ assert (Resque::VERSION.match /^2\./), "must run in 2.0"
19
+ Redis.new.flushall
20
+ end
21
+
22
+ def test_works_with_2_point_oh_do_not_trigger_because_key_is_updated
23
+
24
+ Resque.redis = Redis.new
25
+
26
+ Resque::StuckQueue.config[:heartbeat] = 1
27
+ Resque::StuckQueue.config[:abort_on_exception] = true
28
+ Resque::StuckQueue.config[:trigger_timeout] = 5
29
+ Resque::StuckQueue.config[:logger] = Logger.new($stdout)
30
+ Resque::StuckQueue.config[:handler] = proc { Redis.new.incr("test-incr-key") }
31
+ Resque::StuckQueue.config[:redis] = Redis.new
32
+
33
+ #binding.pry
34
+ Resque::StuckQueue.start_in_background
35
+
36
+ @r2_pid = fork { Resque.redis = Redis.new ; Resque::Worker.new("*", :graceful_term => true).work ; Process.waitall }
37
+ sleep 10
38
+
39
+ # did not trigger, resque picked up refresh jobs
40
+ assert_equal Redis.new.get("test-incr-key").to_i, 0
41
+
42
+ `kill #{@r2_pid}`
43
+ Process.waitall
44
+ Resque::StuckQueue.force_stop!
45
+ end
46
+
47
+ end
48
+
49
+ end
@@ -13,7 +13,6 @@ class TestResqueStuckQueue < Minitest::Test
13
13
  puts "#{__method__}"
14
14
  # clean previous test runs
15
15
  Resque.redis.flushall
16
- Resque.mock!
17
16
  Resque::StuckQueue.config[:heartbeat] = 1 # seconds
18
17
  Resque::StuckQueue.config[:abort_on_exception] = true
19
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque_stuck_queue
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shai Rosenfeld
@@ -67,6 +67,7 @@ files:
67
67
  - test/test_helper.rb
68
68
  - test/test_integration.rb
69
69
  - test/test_logger.rb
70
+ - test/test_resque_2.rb
70
71
  - test/test_resque_stuck_queue.rb
71
72
  - test/test_set_custom_refresh_job.rb
72
73
  homepage: https://github.com/shaiguitar/resque_stuck_queue/
@@ -99,5 +100,6 @@ test_files:
99
100
  - test/test_helper.rb
100
101
  - test/test_integration.rb
101
102
  - test/test_logger.rb
103
+ - test/test_resque_2.rb
102
104
  - test/test_resque_stuck_queue.rb
103
105
  - test/test_set_custom_refresh_job.rb