Class: MergeRequests::CloseIssueWorker

Inherits:
Object
  • Object
show all
Includes:
ApplicationWorker
Defined in:
app/workers/merge_requests/close_issue_worker.rb

Constant Summary

Constants included from ApplicationWorker

ApplicationWorker::LOGGING_EXTRA_KEY, ApplicationWorker::SAFE_PUSH_BULK_LIMIT

Constants included from Gitlab::Loggable

Gitlab::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::Loggable

#build_structured_payload

Methods included from Gitlab::SidekiqVersioning::Worker

#job_version

Methods included from WorkerContext

#with_context

Instance Method Details

#perform(project_id, user_id, issue_id, merge_request_id) ⇒ Object

This worker only accepts ID of an Issue. We are intentionally using this worker to close Issues asynchronously as we only experience SQL timeouts when closing an Issue.



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
49
50
# File 'app/workers/merge_requests/close_issue_worker.rb', line 18

def perform(project_id, user_id, issue_id, merge_request_id)
  project = Project.find_by_id(project_id)

  unless project
    logger.info(structured_payload(message: 'Project not found.', project_id: project_id))
    return
  end

  user = User.find_by_id(user_id)

  unless user
    logger.info(structured_payload(message: 'User not found.', user_id: user_id))
    return
  end

  issue = Issue.find_by_id(issue_id)

  unless issue
    logger.info(structured_payload(message: 'Issue not found.', issue_id: issue_id))
    return
  end

  merge_request = MergeRequest.find_by_id(merge_request_id)

  unless merge_request
    logger.info(structured_payload(message: 'Merge request not found.', merge_request_id: merge_request_id))
    return
  end

  Issues::CloseService
    .new(container: project, current_user: user)
    .execute(issue, commit: merge_request)
end