Commit e7c6d09d authored by Alexandru Croitor's avatar Alexandru Croitor

Extract NotifyUponDeath module to be reused in other importers

Extract NotifyUponDeath module out of GithubImporter
to be reused in other importers.
parent b841f858
# frozen_string_literal: true
module Gitlab
module GithubImport
# NotifyUponDeath can be included into a GitHub worker class if it should
# notify any JobWaiter instances upon being moved to the Sidekiq dead queue.
#
# Note that this will only notify the waiter upon graceful termination, a
# SIGKILL will still result in the waiter _not_ being notified.
#
# Workers including this module must have jobs passed where the last
# argument is the key to notify, as a String.
module NotifyUponDeath
extend ActiveSupport::Concern
included do
# If a job is being exhausted we still want to notify the
# AdvanceStageWorker. This prevents the entire import from getting stuck
# just because 1 job threw too many errors.
sidekiq_retries_exhausted do |job|
args = job['args']
jid = job['jid']
if args.length == 3 && (key = args.last) && key.is_a?(String)
JobWaiter.notify(key, jid)
end
end
end
end
end
end
......@@ -11,7 +11,7 @@ module Gitlab
include ApplicationWorker
include GithubImport::Queue
include ReschedulingMethods
include NotifyUponDeath
include Gitlab::NotifyUponDeath
feature_category :importers
worker_has_external_dependencies!
......
# frozen_string_literal: true
module Gitlab
# NotifyUponDeath can be included into a worker class if it should
# notify any JobWaiter instances upon being moved to the Sidekiq dead queue.
#
# Note that this will only notify the waiter upon graceful termination, a
# SIGKILL will still result in the waiter _not_ being notified.
#
# Workers including this module must have jobs passed where the last
# argument is the key to notify, as a String.
module NotifyUponDeath
extend ActiveSupport::Concern
included do
# If a job is being exhausted we still want to notify the
# Gitlab::Import::AdvanceStageWorker. This prevents the entire import from getting stuck
# just because 1 job threw too many errors.
sidekiq_retries_exhausted do |job|
args = job['args']
jid = job['jid']
if args.length == 3 && (key = args.last) && key.is_a?(String)
JobWaiter.notify(key, jid)
end
end
end
end
end
......@@ -2,11 +2,11 @@
require 'spec_helper'
describe Gitlab::GithubImport::NotifyUponDeath do
describe Gitlab::NotifyUponDeath do
let(:worker_class) do
Class.new do
include Sidekiq::Worker
include Gitlab::GithubImport::NotifyUponDeath
include Gitlab::NotifyUponDeath
end
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment