blaxter-delayed_job 2.1.6 → 2.1.8

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.6
1
+ 2.1.8
@@ -34,21 +34,25 @@ module Delayed
34
34
  def initialize_launcher(max_active_jobs=MAX_ACTIVE_JOBS)
35
35
  @max_active_jobs = max_active_jobs
36
36
  @jobs = {}
37
- @sem = Mutex.new
37
+ @mutex = Mutex.new
38
38
  end
39
39
 
40
40
  # Launch the job in a thread and register it. Returns whether the job
41
41
  # has been launched or not.
42
42
  def launch(job)
43
43
  return false unless can_execute job
44
+ s = Semaphore.new
44
45
  t = Thread.new do
46
+ s.wait
45
47
  begin
46
48
  job.run_with_lock Job::MAX_RUN_TIME, name
47
49
  ensure
48
50
  unregister_job job
51
+ job.connection.release_connection rescue nil
49
52
  end
50
53
  end
51
54
  register_job job, t
55
+ s.signal
52
56
  return true
53
57
  end
54
58
 
@@ -126,13 +130,14 @@ module Delayed
126
130
  end
127
131
 
128
132
  def unregister_job(job)
129
- @sem.synchronize do
133
+ @mutex.synchronize do
130
134
  @jobs.delete get_object(job)
135
+ log "No jobs right now!" if @jobs.size == 0
131
136
  end
132
137
  end
133
138
 
134
139
  def register_job(job, thread)
135
- @sem.synchronize do
140
+ @mutex.synchronize do
136
141
  @jobs[get_object(job)] = {
137
142
  :thread => thread,
138
143
  :job => job,
data/lib/delayed_job.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  autoload :ActiveRecord, 'activerecord'
2
2
 
3
+ require File.dirname(__FILE__) + '/semaphore'
3
4
  require File.dirname(__FILE__) + '/delayed/message_sending'
4
5
  require File.dirname(__FILE__) + '/delayed/performable_method'
5
6
  require File.dirname(__FILE__) + '/delayed/yaml_ext'
data/lib/semaphore.rb ADDED
@@ -0,0 +1,54 @@
1
+ #
2
+ # $Id: semaphore.rb,v 1.2 2003/03/15 20:10:10 fukumoto Exp $
3
+ #
4
+
5
+ class CountingSemaphore
6
+
7
+ def initialize(initvalue = 0)
8
+ @counter = initvalue
9
+ @waiting_list = []
10
+ end
11
+
12
+ def wait
13
+ Thread.critical = true
14
+ if (@counter -= 1) < 0
15
+ @waiting_list.push(Thread.current)
16
+ Thread.stop
17
+ end
18
+ self
19
+ ensure
20
+ Thread.critical = false
21
+ end
22
+
23
+ def signal
24
+ Thread.critical = true
25
+ begin
26
+ if (@counter += 1) <= 0
27
+ t = @waiting_list.shift
28
+ t.wakeup if t
29
+ end
30
+ rescue ThreadError
31
+ retry
32
+ end
33
+ self
34
+ ensure
35
+ Thread.critical = false
36
+ end
37
+
38
+ alias down wait
39
+ alias up signal
40
+ alias P wait
41
+ alias V signal
42
+
43
+ def exclusive
44
+ wait
45
+ yield
46
+ ensure
47
+ signal
48
+ end
49
+
50
+ alias synchronize exclusive
51
+
52
+ end
53
+
54
+ Semaphore = CountingSemaphore
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blaxter-delayed_job
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
5
- prerelease: false
4
+ hash: 27
5
+ prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 1
9
- - 6
10
- version: 2.1.6
9
+ - 8
10
+ version: 2.1.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - "Tobias L\xC3\xBCtke"
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-01-25 00:00:00 +01:00
19
+ date: 2011-04-14 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies: []
22
22
 
@@ -41,6 +41,7 @@ files:
41
41
  - lib/delayed/worker.rb
42
42
  - lib/delayed/yaml_ext.rb
43
43
  - lib/delayed_job.rb
44
+ - lib/semaphore.rb
44
45
  - spec/database.rb
45
46
  - spec/delayed_method_spec.rb
46
47
  - spec/job_spec.rb
@@ -78,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
79
  requirements: []
79
80
 
80
81
  rubyforge_project:
81
- rubygems_version: 1.3.7
82
+ rubygems_version: 1.4.2
82
83
  signing_key:
83
84
  specification_version: 3
84
85
  summary: Database-backed asynchronous priority queue system -- Extracted from Shopify