Class: Gitlab::GithubImport::Stage::ImportRepositoryWorker

Inherits:
Object
  • Object
show all
Includes:
ApplicationWorker, Queue, Gitlab::GithubImport::StageMethods
Defined in:
app/workers/gitlab/github_import/stage/import_repository_worker.rb

Overview

rubocop:disable Scalability/IdempotentWorker

Constant Summary

Constants included from ApplicationWorker

ApplicationWorker::LOGGING_EXTRA_KEY, ApplicationWorker::SAFE_PUSH_BULK_LIMIT

Constants included from Loggable

Loggable::ANONYMOUS

Constants included from WorkerAttributes

WorkerAttributes::DEFAULT_DATA_CONSISTENCY, WorkerAttributes::DEFAULT_DEFER_DELAY, WorkerAttributes::NAMESPACE_WEIGHTS, WorkerAttributes::VALID_DATA_CONSISTENCIES, WorkerAttributes::VALID_RESOURCE_BOUNDARIES, WorkerAttributes::VALID_URGENCIES

Instance Method Summary collapse

Methods included from Gitlab::GithubImport::StageMethods

#find_project, #perform, #try_import

Methods included from Loggable

#build_structured_payload

Methods included from SidekiqVersioning::Worker

#job_version

Methods included from WorkerContext

#with_context

Instance Method Details

#abort_on_failureObject



57
58
59
# File 'app/workers/gitlab/github_import/stage/import_repository_worker.rb', line 57

def abort_on_failure
  true
end

#counterObject



50
51
52
53
54
55
# File 'app/workers/gitlab/github_import/stage/import_repository_worker.rb', line 50

def counter
  Gitlab::Metrics.counter(
    :github_importer_imported_repositories,
    'The number of imported GitHub repositories'
  )
end

#import(client, project) ⇒ Object

client - An instance of Gitlab::GithubImport::Client. project - An instance of Project.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/workers/gitlab/github_import/stage/import_repository_worker.rb', line 17

def import(client, project)
  # In extreme cases it's possible for a clone to take more than the
  # import job expiration time. To work around this we schedule a
  # separate job that will periodically run and refresh the import
  # expiration time.
  RefreshImportJidWorker.perform_in_the_future(project.id, jid)

  info(project.id, message: "starting importer", importer: 'Importer::RepositoryImporter')

  # If a user creates an issue while the import is in progress, this can lead to an import failure.
  # The workaround is to allocate IIDs before starting the importer.
  allocate_issues_internal_id!(project, client)

  importer = Importer::RepositoryImporter.new(project, client)

  importer.execute

  counter.increment

  ImportBaseDataWorker.perform_async(project.id)

rescue StandardError => e
  Gitlab::Import::ImportFailureService.track(
    project_id: project.id,
    error_source: self.class.name,
    exception: e,
    fail_import: abort_on_failure,
    metrics: true
  )

  raise(e)
end