Class: Gitlab::Database::Migrations::BaseBackgroundRunner
- Inherits:
-
Object
- Object
- Gitlab::Database::Migrations::BaseBackgroundRunner
- Defined in:
- lib/gitlab/database/migrations/base_background_runner.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
-
#result_dir ⇒ Object
readonly
Returns the value of attribute result_dir.
Instance Method Summary collapse
-
#initialize(result_dir:, connection:) ⇒ BaseBackgroundRunner
constructor
A new instance of BaseBackgroundRunner.
- #jobs_by_migration_name ⇒ Object
- #run_job(job) ⇒ Object
- #run_jobs(for_duration:) ⇒ Object
Constructor Details
#initialize(result_dir:, connection:) ⇒ BaseBackgroundRunner
Returns a new instance of BaseBackgroundRunner.
9 10 11 12 |
# File 'lib/gitlab/database/migrations/base_background_runner.rb', line 9 def initialize(result_dir:, connection:) @result_dir = result_dir @connection = connection end |
Instance Attribute Details
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
7 8 9 |
# File 'lib/gitlab/database/migrations/base_background_runner.rb', line 7 def connection @connection end |
#result_dir ⇒ Object (readonly)
Returns the value of attribute result_dir.
7 8 9 |
# File 'lib/gitlab/database/migrations/base_background_runner.rb', line 7 def result_dir @result_dir end |
Instance Method Details
#jobs_by_migration_name ⇒ Object
14 15 16 |
# File 'lib/gitlab/database/migrations/base_background_runner.rb', line 14 def jobs_by_migration_name raise NotImplementedError, 'subclass must implement' end |
#run_job(job) ⇒ Object
18 19 20 |
# File 'lib/gitlab/database/migrations/base_background_runner.rb', line 18 def run_job(job) raise NotImplementedError, 'subclass must implement' end |
#run_jobs(for_duration:) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/gitlab/database/migrations/base_background_runner.rb', line 22 def run_jobs(for_duration:) jobs_to_run = jobs_by_migration_name return if jobs_to_run.empty? # without .to_f, we do integer division # For example, 3.minutes / 2 == 1.minute whereas 3.minutes / 2.to_f == (1.minute + 30.seconds) duration_per_migration_type = for_duration / jobs_to_run.count.to_f jobs_to_run.each do |migration_name, jobs| run_until = duration_per_migration_type.from_now run_jobs_for_migration(migration_name: migration_name, jobs: jobs, run_until: run_until) end end |