delayed_job_mongoid 1.1.0 → 2.0.0
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/lib/delayed/backend/mongoid.rb +15 -36
- data/spec/delayed_job_mongoid_spec.rb +1 -25
- data/spec/spec_helper.rb +8 -6
- metadata +34 -18
@@ -1,6 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'delayed_job'
|
3
|
-
require 'mongo'
|
4
3
|
require 'mongoid'
|
5
4
|
|
6
5
|
module Delayed
|
@@ -10,6 +9,7 @@ module Delayed
|
|
10
9
|
include ::Mongoid::Document
|
11
10
|
include ::Mongoid::Timestamps
|
12
11
|
include Delayed::Backend::Base
|
12
|
+
|
13
13
|
field :priority, :type => Integer, :default => 0
|
14
14
|
field :attempts, :type => Integer, :default => 0
|
15
15
|
field :handler, :type => String
|
@@ -20,22 +20,10 @@ module Delayed
|
|
20
20
|
field :last_error, :type => String
|
21
21
|
field :queue, :type => String
|
22
22
|
|
23
|
-
|
24
|
-
index({:locked_by => -1, :priority => 1, :run_at => 1})
|
25
|
-
else
|
26
|
-
index([[:locked_by, -1], [:priority, 1], [:run_at, 1]])
|
27
|
-
end
|
23
|
+
index :locked_by => -1, :priority => 1, :run_at => 1
|
28
24
|
|
29
25
|
before_save :set_default_run_at
|
30
26
|
|
31
|
-
def self.before_fork
|
32
|
-
::Mongoid.master.connection.close
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.after_fork
|
36
|
-
::Mongoid.master.connection.connect
|
37
|
-
end
|
38
|
-
|
39
27
|
def self.db_time_now
|
40
28
|
Time.now.utc
|
41
29
|
end
|
@@ -43,40 +31,31 @@ module Delayed
|
|
43
31
|
# Reserves this job for the worker.
|
44
32
|
#
|
45
33
|
# Uses Mongo's findAndModify operation to atomically pick and lock one
|
46
|
-
# job from from the collection.
|
47
|
-
# directly thru Mongoid so go down to the Mongo Ruby driver instead.
|
34
|
+
# job from from the collection.
|
48
35
|
def self.reserve(worker, max_run_time = Worker.max_run_time)
|
49
36
|
right_now = db_time_now
|
50
37
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
conditions['$or'] = [
|
38
|
+
criteria = self.where(
|
39
|
+
:run_at => {"$lte" => right_now},
|
40
|
+
:failed_at => nil
|
41
|
+
).any_of(
|
57
42
|
{ :locked_by => worker.name },
|
58
43
|
{ :locked_at => nil },
|
59
44
|
{ :locked_at => { '$lt' => (right_now - max_run_time) }}
|
60
|
-
|
45
|
+
)
|
61
46
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
:sort => [['locked_by', -1], ['priority', 1], ['run_at', 1]],
|
66
|
-
:update => {"$set" => {:locked_at => right_now, :locked_by => worker.name}}
|
67
|
-
)
|
47
|
+
criteria = criteria.gte(:priority => Worker.min_priority.to_i) if Worker.min_priority
|
48
|
+
criteria = criteria.lte(:priority => Worker.max_priority.to_i) if Worker.max_priority
|
49
|
+
criteria = criteria.any_in(:queue => Worker.queues) if Worker.queues.any?
|
68
50
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
rescue Mongo::OperationFailure
|
73
|
-
nil # no jobs available
|
74
|
-
end
|
51
|
+
criteria.desc(:locked_by).asc(:priority).asc(:run_at).find_and_modify(
|
52
|
+
{"$set" => {:locked_at => right_now, :locked_by => worker.name}}, :new => true
|
53
|
+
)
|
75
54
|
end
|
76
55
|
|
77
56
|
# When a worker is exiting, make sure we don't have any locked jobs.
|
78
57
|
def self.clear_locks!(worker_name)
|
79
|
-
self.
|
58
|
+
self.where(:locked_by => worker_name).update_all({:locked_at => nil, :locked_by => nil})
|
80
59
|
end
|
81
60
|
|
82
61
|
def reload(*args)
|
@@ -2,28 +2,4 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Delayed::Backend::Mongoid::Job do
|
4
4
|
it_should_behave_like 'a delayed_job backend'
|
5
|
-
|
6
|
-
describe "before_fork" do
|
7
|
-
after do
|
8
|
-
::Mongoid.master.connection.close
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should disconnect" do
|
12
|
-
lambda do
|
13
|
-
Delayed::Backend::Mongoid::Job.before_fork
|
14
|
-
end.should change { !!Mongoid.master.connection.connected? }.from(true).to(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "after_fork" do
|
19
|
-
before do
|
20
|
-
::Mongoid.master.connection.close
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should call reconnect" do
|
24
|
-
lambda do
|
25
|
-
Delayed::Backend::Mongoid::Job.after_fork
|
26
|
-
end.should change { !!Mongoid.master.connection.connected? }.from(false).to(true)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
5
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
|
-
|
2
|
-
require '
|
3
|
-
|
4
|
-
|
1
|
+
unless ENV['CI']
|
2
|
+
require 'simplecov'
|
3
|
+
SimpleCov.start do
|
4
|
+
add_filter 'spec'
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
5
8
|
require 'rspec'
|
6
9
|
require 'delayed_job_mongoid'
|
7
10
|
require 'delayed/backend/shared_spec'
|
8
11
|
|
9
12
|
Mongoid.configure do |config|
|
10
|
-
config.
|
13
|
+
config.connect_to("dl_spec")
|
11
14
|
end
|
12
15
|
|
13
16
|
class Story
|
@@ -18,4 +21,3 @@ class Story
|
|
18
21
|
|
19
22
|
handle_asynchronously :whatever
|
20
23
|
end
|
21
|
-
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_job_mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,16 +10,16 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-08-02 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: mongoid
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '3.0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -27,16 +27,32 @@ dependencies:
|
|
27
27
|
requirements:
|
28
28
|
- - ~>
|
29
29
|
- !ruby/object:Gem::Version
|
30
|
-
version: '
|
30
|
+
version: '3.0'
|
31
31
|
- !ruby/object:Gem::Dependency
|
32
|
-
name:
|
32
|
+
name: delayed_job
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '3.0'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '3.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
33
49
|
requirement: !ruby/object:Gem::Requirement
|
34
50
|
none: false
|
35
51
|
requirements:
|
36
52
|
- - ! '>='
|
37
53
|
- !ruby/object:Gem::Version
|
38
54
|
version: '2.0'
|
39
|
-
type: :
|
55
|
+
type: :development
|
40
56
|
prerelease: false
|
41
57
|
version_requirements: !ruby/object:Gem::Requirement
|
42
58
|
none: false
|
@@ -45,29 +61,29 @@ dependencies:
|
|
45
61
|
- !ruby/object:Gem::Version
|
46
62
|
version: '2.0'
|
47
63
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
64
|
+
name: rake
|
49
65
|
requirement: !ruby/object:Gem::Requirement
|
50
66
|
none: false
|
51
67
|
requirements:
|
52
|
-
- -
|
68
|
+
- - ! '>='
|
53
69
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
55
|
-
type: :
|
70
|
+
version: '0.9'
|
71
|
+
type: :development
|
56
72
|
prerelease: false
|
57
73
|
version_requirements: !ruby/object:Gem::Requirement
|
58
74
|
none: false
|
59
75
|
requirements:
|
60
|
-
- -
|
76
|
+
- - ! '>='
|
61
77
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
78
|
+
version: '0.9'
|
63
79
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
80
|
+
name: simplecov
|
65
81
|
requirement: !ruby/object:Gem::Requirement
|
66
82
|
none: false
|
67
83
|
requirements:
|
68
84
|
- - ! '>='
|
69
85
|
- !ruby/object:Gem::Version
|
70
|
-
version: '
|
86
|
+
version: '0.6'
|
71
87
|
type: :development
|
72
88
|
prerelease: false
|
73
89
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -75,7 +91,7 @@ dependencies:
|
|
75
91
|
requirements:
|
76
92
|
- - ! '>='
|
77
93
|
- !ruby/object:Gem::Version
|
78
|
-
version: '
|
94
|
+
version: '0.6'
|
79
95
|
description:
|
80
96
|
email:
|
81
97
|
- chris@collectiveidea.com
|
@@ -108,7 +124,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
124
|
version: '0'
|
109
125
|
segments:
|
110
126
|
- 0
|
111
|
-
hash:
|
127
|
+
hash: -913743688657912921
|
112
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
129
|
none: false
|
114
130
|
requirements:
|
@@ -117,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
133
|
version: '0'
|
118
134
|
segments:
|
119
135
|
- 0
|
120
|
-
hash:
|
136
|
+
hash: -913743688657912921
|
121
137
|
requirements: []
|
122
138
|
rubyforge_project:
|
123
139
|
rubygems_version: 1.8.23
|