2021-12-10 15:10:24 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Projects
|
|
|
|
# This worker can be called multiple times at the same time but only one of them can
|
|
|
|
# process events at a time. This is ensured by `try_obtain_lease` in `Ci::ProcessSyncEventsService`.
|
|
|
|
# `until_executing` here is to reduce redundant worker enqueuing.
|
|
|
|
class ProcessSyncEventsWorker
|
|
|
|
include ApplicationWorker
|
|
|
|
|
|
|
|
data_consistency :always
|
|
|
|
|
2022-06-17 09:08:50 +00:00
|
|
|
feature_category :pods
|
2021-12-10 15:10:24 +00:00
|
|
|
urgency :high
|
|
|
|
|
|
|
|
idempotent!
|
2022-09-19 12:13:05 +00:00
|
|
|
deduplicate :until_executed, if_deduplicated: :reschedule_once
|
2021-12-10 15:10:24 +00:00
|
|
|
|
|
|
|
def perform
|
2022-02-04 12:17:40 +00:00
|
|
|
results = ::Ci::ProcessSyncEventsService.new(
|
|
|
|
::Projects::SyncEvent, ::Ci::ProjectMirror
|
|
|
|
).execute
|
|
|
|
|
|
|
|
results.each do |key, value|
|
|
|
|
log_extra_metadata_on_done(key, value)
|
|
|
|
end
|
2021-12-10 15:10:24 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|