delayed_job_mongoid 1.1.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- if ::Mongoid::VERSION.to_f >= 3
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. findAndModify is not yet available
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
- conditions = {:run_at => {"$lte" => right_now}, :failed_at => nil}
52
- (conditions[:priority] ||= {})['$gte'] = Worker.min_priority.to_i if Worker.min_priority
53
- (conditions[:priority] ||= {})['$lte'] = Worker.max_priority.to_i if Worker.max_priority
54
- (conditions[:queue] ||= {})['$in'] = Worker.queues if Worker.queues.any?
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
- begin
63
- result = self.db.collection(self.collection.name).find_and_modify(
64
- :query => conditions,
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
- # Return result as a Mongoid document.
70
- # When Mongoid starts supporting findAndModify, this extra step should no longer be necessary.
71
- self.find(:first, :conditions => {:_id => result["_id"]}) unless result.nil?
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.collection.update({:locked_by => worker_name}, {"$set" => {:locked_at => nil, :locked_by => nil}}, :multi => true)
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
@@ -1,13 +1,16 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
3
- $LOAD_PATH.unshift(File.dirname(__FILE__))
4
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
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.master = config.master = Mongo::Connection.new.db('dl_spec')
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: 1.1.0
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-07-26 00:00:00.000000000 Z
13
+ date: 2012-08-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: mongo
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: '1.6'
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: '1.6'
30
+ version: '3.0'
31
31
  - !ruby/object:Gem::Dependency
32
- name: mongoid
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: :runtime
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: delayed_job
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: '3.0'
55
- type: :runtime
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: '3.0'
78
+ version: '0.9'
63
79
  - !ruby/object:Gem::Dependency
64
- name: rspec
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: '2.0'
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: '2.0'
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: 4375365577565581306
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: 4375365577565581306
136
+ hash: -913743688657912921
121
137
  requirements: []
122
138
  rubyforge_project:
123
139
  rubygems_version: 1.8.23