middle_management 1.0.2 → 1.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.
@@ -4,14 +4,15 @@ require 'delayed/backend/active_record'
4
4
 
5
5
  module MiddleManagement
6
6
  class Manager
7
- def self.enforce_number_of_current_jobs(_num_workers_last_set_at = nil, _current_worker_count = nil, _last_enforcement_job_set_for = nil)
7
+ # ToDo: Figure out what to do about caching worker counts
8
+ def self.enforce_number_of_current_jobs(_num_workers_last_set_at = nil, _last_enforcement_job_set_for = nil)
9
+ self.current_worker_count = self.get_heroku_client.info[:workers]
8
10
  # Do nothing if our worker figures are up-to-date
9
11
  return if !self.num_jobs_changes_worker_count?(self.current_jobs_count)
10
12
 
11
13
  # Load cached values if they're supplied. This is to prevent different instances
12
14
  # from re-querying the heroku API.
13
15
  self.num_workers_last_set_at = _num_workers_last_set_at unless _num_workers_last_set_at.nil?
14
- self.current_worker_count = _current_worker_count unless _current_worker_count.nil?
15
16
  self.last_enforcement_job_set_for = _last_enforcement_job_set_for unless _last_enforcement_job_set_for.nil?
16
17
 
17
18
  # Set number of workers if we haven't set it recently
@@ -22,7 +23,7 @@ module MiddleManagement
22
23
  # Schedule job with cached data if we don't have one scheduled
23
24
  if self.last_enforcement_job_set_for.nil? || Time.now > self.last_enforcement_job_set_for # Prevent multiple jobs within our window
24
25
  self.last_enforcement_job_set_for = Time.now + 10.seconds
25
- self.delay(:run_at => self.last_enforcement_job_set_for).enforce_number_of_current_jobs(self.num_workers_last_set_at, self.current_worker_count, self.last_enforcement_job_set_for)
26
+ self.delay(:run_at => self.last_enforcement_job_set_for).enforce_number_of_current_jobs(self.num_workers_last_set_at, self.last_enforcement_job_set_for)
26
27
  # Make sure we have at least one worker running to cover the job.
27
28
  self.set_num_workers(1) if self.current_worker_count == 0
28
29
  end
@@ -73,8 +74,8 @@ module MiddleManagement
73
74
  end
74
75
 
75
76
  def self.set_num_workers(num_workers)
76
- self.get_heroku_client.set_workers(MiddleManagement::Config::HEROKU_APP, num_workers)
77
77
  self.current_worker_count = num_workers
78
+ self.get_heroku_client.set_workers(MiddleManagement::Config::HEROKU_APP, num_workers)
78
79
  end
79
80
  end
80
81
  end
@@ -1,3 +1,3 @@
1
1
  module MiddleManagement
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -24,7 +24,9 @@ describe MiddleManagement::Manager do
24
24
  stub_config(:HEROKU_APP, "test_app")
25
25
  stub_config(:MIN_WORKERS, 1)
26
26
  stub_config(:MAX_WORKERS, 10)
27
+ stub_config(:JOBS_PER_WORKER, 1)
27
28
  @client_mock = mock("Heroku Client")
29
+ @client_mock.should_receive(:info).any_number_of_times.and_return({:workers => 5})
28
30
  MiddleManagement::Manager.should_receive(:get_heroku_client).any_number_of_times.and_return(@client_mock)
29
31
  end
30
32
  describe "second call within 10 seconds" do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middle_management
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
- - 2
10
- version: 1.0.2
9
+ - 3
10
+ version: 1.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Robby Grossman