stormtroopers 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,12 +16,19 @@ module Stormtroopers
16
16
  end
17
17
 
18
18
  def manage
19
- cleanup
20
- if threads.count < max_threads
19
+ assigned = false
20
+ if need_more_troops?
21
21
  if trooper = factory.produce
22
22
  run_trooper(trooper)
23
+ assigned = true
23
24
  end
24
25
  end
26
+ assigned
27
+ end
28
+
29
+ def need_more_troops?
30
+ cleanup
31
+ threads.count < max_threads
25
32
  end
26
33
 
27
34
  def run_trooper(trooper)
@@ -5,6 +5,16 @@ require 'active_support/core_ext/hash'
5
5
  require 'active_support/hash_with_indifferent_access'
6
6
  require_relative "./already_running"
7
7
 
8
+
9
+ if ENV["DJ_SPEED"] == "ludicrous"
10
+ # Go to ludicrous speed (http://www.youtube.com/watch?v=mk7VWcuVOf0) by
11
+ # overriding Delayed::Job#reserve to do the bare minimum to return a job.
12
+ # This will cause all of our workers to pick up jobs from ANY queue, so use
13
+ # with caution!
14
+
15
+ end
16
+
17
+
8
18
  module Stormtroopers
9
19
  class Manager
10
20
  include Singleton
@@ -19,9 +29,22 @@ module Stormtroopers
19
29
  end
20
30
 
21
31
  logger.info "Starting"
32
+
33
+ if config[:speed] == "ludicrous"
34
+ logger.info "Ludicrous speed? Sir! we have never gone that fast before, I dont know if the ship can take it! Whats the matter Colonel Sanders? CHICKEN?!"
35
+ puts "Ludicrous speed? Sir! we have never gone that fast before, I dont know if the ship can take it! Whats the matter Colonel Sanders? CHICKEN?!"
36
+ Delayed::Backend::Mongoid::Job.class_eval do
37
+ def self.reserve(worker, max_run_time = Worker.max_run_time)
38
+ where(failed_at: nil, locked_at: nil).find_and_modify({"$set" => {locked_at: db_time_now, locked_by: worker.name}}, new: true)
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+
22
45
  while managing? do
23
- armies.each(&:manage)
24
- sleep 0.1
46
+ assigned = armies.map(&:manage)
47
+ sleep timeout(assigned.include?(true))
25
48
  end
26
49
 
27
50
  armies.each(&:finish)
@@ -62,6 +85,12 @@ module Stormtroopers
62
85
 
63
86
  private
64
87
 
88
+ def timeout(busy)
89
+ @timeout = 0 if @timeout.nil? || busy
90
+ @timeout += 0.1 if @timeout < 2
91
+ @timeout
92
+ end
93
+
65
94
  class << self
66
95
  def logger(*args)
67
96
  instance.logger(*args)
@@ -1,3 +1,3 @@
1
1
  module Stormtroopers
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stormtroopers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-13 00:00:00.000000000 Z
13
+ date: 2012-11-20 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -117,4 +117,3 @@ test_files:
117
117
  - spec/stormtroopers/manager_spec.rb
118
118
  - spec/stormtroopers/trooper/delayed_job_spec.rb
119
119
  - spec/stormtroopers/trooper_spec.rb
120
- has_rdoc: