Class: Gitlab::Database::Migrations::BaseBackgroundRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/database/migrations/base_background_runner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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

#connectionObject (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_dirObject (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_nameObject

Raises:

  • (NotImplementedError)


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

Raises:

  • (NotImplementedError)


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