resque_empty_queue 0.0.2 → 0.0.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/VERSION +1 -1
- data/lib/resque/plugins/empty_queue_job.rb +54 -0
- data/lib/resque_empty_queue.rb +4 -5
- data/resque_empty_queue.gemspec +2 -5
- metadata +4 -7
- data/lib/resque/empty_queue.rb +0 -5
- data/lib/resque/empty_queue_job.rb +0 -11
- data/lib/resque/empty_queue_retry_job.rb +0 -19
- data/lib/resque/resque.rb +0 -36
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Resque
|
2
|
+
module Plugins
|
3
|
+
class EmptyQueueFailureDetectedError < RuntimeError;
|
4
|
+
end
|
5
|
+
|
6
|
+
module EmptyQueueJob
|
7
|
+
def queue
|
8
|
+
:empty_queue
|
9
|
+
end
|
10
|
+
|
11
|
+
def wait_for_empty_queue(queue_name)
|
12
|
+
@queue_name = queue_name
|
13
|
+
end
|
14
|
+
|
15
|
+
def queue_name
|
16
|
+
return @queue_name
|
17
|
+
end
|
18
|
+
|
19
|
+
def before_perform_empty_queue_job(*args)
|
20
|
+
if !failure_queue_empty?
|
21
|
+
# should this re-enqueue itself or simply continue to retry
|
22
|
+
raise EmptyQueueFailureDetectedError.new("Failure detected in queue: #{queue_name}. Retry after jobs placed in queue.")
|
23
|
+
end
|
24
|
+
|
25
|
+
if !job_queue_empty? || !working_queue_empty?
|
26
|
+
# try again later
|
27
|
+
Resque.enqueue_in(5, self, *args)
|
28
|
+
raise Resque::Job::DontPerform
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def job_queue_empty?
|
35
|
+
return Resque.size(queue_name) == 0
|
36
|
+
end
|
37
|
+
|
38
|
+
def working_queue_empty?
|
39
|
+
return Resque::Worker.all.all? { |worker| worker.job['queue'] != queue_name.to_s }
|
40
|
+
end
|
41
|
+
|
42
|
+
def failure_queue_empty?
|
43
|
+
i = 0
|
44
|
+
page_size = 100
|
45
|
+
while !(failures = Resque::Failure.all(i, i + page_size)).empty?
|
46
|
+
return false unless failures.all? { |failure| failure.nil? || failure['retried_at'] || failure['queue'] != queue_name.to_s }
|
47
|
+
i = i + page_size
|
48
|
+
end
|
49
|
+
|
50
|
+
return true
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/resque_empty_queue.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
require '
|
1
|
+
require 'resque'
|
2
|
+
# Causes problems when included with Sinatra?? when loading workers rake task
|
3
|
+
# require 'resque_scheduler'
|
2
4
|
|
3
|
-
require "resque/
|
4
|
-
require "resque/empty_queue"
|
5
|
-
require "resque/empty_queue_job"
|
6
|
-
require "resque/empty_queue_retry_job"
|
5
|
+
require "resque/plugins/empty_queue_job"
|
data/resque_empty_queue.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'resque_empty_queue'
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ['Michael G. Pearce', 'J. A. Wheeler']
|
@@ -24,10 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"lib/resque_empty_queue.rb",
|
27
|
-
"lib/resque/
|
28
|
-
"lib/resque/empty_queue.rb",
|
29
|
-
"lib/resque/empty_queue_job.rb",
|
30
|
-
"lib/resque/empty_queue_retry_job.rb",
|
27
|
+
"lib/resque/plugins/empty_queue_job.rb",
|
31
28
|
"resque_empty_queue.gemspec",
|
32
29
|
"test/resque/resque_test.rb",
|
33
30
|
"test/test_helper.rb"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque_empty_queue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael G. Pearce
|
@@ -96,10 +96,7 @@ files:
|
|
96
96
|
- Rakefile
|
97
97
|
- VERSION
|
98
98
|
- lib/resque_empty_queue.rb
|
99
|
-
- lib/resque/
|
100
|
-
- lib/resque/empty_queue.rb
|
101
|
-
- lib/resque/empty_queue_job.rb
|
102
|
-
- lib/resque/empty_queue_retry_job.rb
|
99
|
+
- lib/resque/plugins/empty_queue_job.rb
|
103
100
|
- resque_empty_queue.gemspec
|
104
101
|
- test/resque/resque_test.rb
|
105
102
|
- test/test_helper.rb
|
data/lib/resque/empty_queue.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
module Resque
|
2
|
-
class EmptyQueueRetryJob
|
3
|
-
@queue = :resque_empty_queue
|
4
|
-
|
5
|
-
def self.perform(empty_queue_job_class_name, *args)
|
6
|
-
klass = eval(empty_queue_job_class_name)
|
7
|
-
if queue_is_empty?(klass)
|
8
|
-
Resque.enqueue(klass, *args)
|
9
|
-
else
|
10
|
-
# TODO: use resque-scheduler to enqueue in the future
|
11
|
-
Resque.enqueue_in(5, self, klass.name, *args)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.queue_is_empty?(klass)
|
16
|
-
return Resque.size(klass.queue_name) == 0
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/lib/resque/resque.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
require "resque/empty_queue"
|
2
|
-
|
3
|
-
module Resque
|
4
|
-
extend self
|
5
|
-
|
6
|
-
# Raised when trying to create a job that does not yet have an empty associated job queue
|
7
|
-
class EmptyQueueError < RuntimeError;
|
8
|
-
end
|
9
|
-
|
10
|
-
def enqueue_with_empty_queue(klass, *args)
|
11
|
-
if !empty_queue_job?(klass) || should_execute_empty_queue_job?(klass, *args)
|
12
|
-
enqueue_without_empty_queue(klass, *args)
|
13
|
-
else
|
14
|
-
# queue not empty
|
15
|
-
enqueue_without_empty_queue(EmptyQueueRetryJob, klass.name, *args)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
alias_method :enqueue_without_empty_queue, :enqueue
|
20
|
-
alias_method :enqueue, :enqueue_with_empty_queue
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def should_execute_empty_queue_job?(klass, *args)
|
25
|
-
return true if queue_is_empty?(klass)
|
26
|
-
return false
|
27
|
-
end
|
28
|
-
|
29
|
-
def queue_is_empty?(klass)
|
30
|
-
return Resque.size(klass.queue_name) == 0
|
31
|
-
end
|
32
|
-
|
33
|
-
def empty_queue_job?(klass)
|
34
|
-
klass.ancestors.include?(Resque::EmptyQueueJob)
|
35
|
-
end
|
36
|
-
end
|