Commit cdd761eb authored by rpereira2's avatar rpereira2

Make delete worker similar to create worker

The self_monitoring create and delete workers have common specs. Pull
them into shared_examples.
parent df64d5d2
......@@ -12,8 +12,6 @@ class SelfMonitoringProjectCreateWorker
LEASE_TIMEOUT = 15.minutes.to_i
EXCLUSIVE_LEASE_KEY = 'self_monitoring_service_creation_deletion'
def perform
try_obtain_lease do
Gitlab::DatabaseImporters::SelfMonitoring::Project::CreateService.new.execute
......@@ -31,7 +29,7 @@ class SelfMonitoringProjectCreateWorker
private
def lease_key
EXCLUSIVE_LEASE_KEY
Gitlab::SelfMonitoring::PROJECT_CREATION_DELETION_WORKER_EXCLUSIVE_LEASE_KEY
end
def lease_timeout
......
# frozen_string_literal: true
class SelfMonitoringProjectDeleteWorker
include ApplicationWorker
include ExclusiveLeaseGuard
# This worker falls under Self-monitoring with Monitor::APM group. However,
# self-monitoring is not classified as a feature category but rather as
# Other Functionality. Metrics seems to be the closest feature_category for
# this worker.
feature_category :metrics
LEASE_TIMEOUT = 15.minutes.to_i
def perform
try_obtain_lease do
Gitlab::DatabaseImporters::SelfMonitoring::Project::DeleteService.new.execute
end
end
# @param job_id [String]
# Job ID that is used to construct the cache keys.
# @return [Hash]
# Returns true if the job is enqueued or in progress and false otherwise.
def self.in_progress?(job_id)
Gitlab::SidekiqStatus.job_status(Array.wrap(job_id)).first
end
private
def lease_key
Gitlab::SelfMonitoring::PROJECT_CREATION_DELETION_WORKER_EXCLUSIVE_LEASE_KEY
end
def lease_timeout
LEASE_TIMEOUT
end
end
# frozen_string_literal: true
module Gitlab
module SelfMonitoring
PROJECT_CREATION_DELETION_WORKER_EXCLUSIVE_LEASE_KEY = 'self_monitoring_service_creation_deletion'
end
end
......@@ -5145,6 +5145,9 @@ msgstr ""
msgid "Could not find design"
msgstr ""
msgid "Could not find job to delete self monitoring project"
msgstr ""
msgid "Could not remove the trigger."
msgstr ""
......
# frozen_string_literal: true
# All examples require the following variables defined:
# let_it_be(:jid) { 'b5b28910d97563e58c2fe55f' }
# let_it_be(:data_key) { "self_monitoring_delete_result:#{jid}" }
# This shared_example requires the following variables:
# let(:service_class) { Gitlab::DatabaseImporters::SelfMonitoring::Project::DeleteService }
# let(:service) { instance_double(service_class) }
RSpec.shared_examples 'executes service' do
before do
allow(service_class).to receive(:new) { service }
end
it 'runs the SelfMonitoring::Project::CreateService' do
expect(service).to receive(:execute)
subject.perform
end
end
RSpec.shared_examples 'returns in_progress based on Sidekiq::Status' do
it 'returns true when job is enqueued' do
jid = described_class.perform_async
expect(described_class.in_progress?(jid)).to eq(true)
end
it 'returns false when job does not exist' do
expect(described_class.in_progress?('fake_jid')).to eq(false)
end
end
......@@ -7,22 +7,10 @@ describe SelfMonitoringProjectCreateWorker do
let(:service_class) { Gitlab::DatabaseImporters::SelfMonitoring::Project::CreateService }
let(:service) { instance_double(service_class) }
before do
allow(service_class).to receive(:new) { service }
end
it 'runs the SelfMonitoring::Project::CreateService' do
expect(service).to receive(:execute)
subject.perform
end
it_behaves_like 'executes service'
end
describe '.in_progress?', :clean_gitlab_redis_shared_state do
it 'returns in_progress when job is enqueued' do
jid = described_class.perform_async
expect(described_class.in_progress?(jid)).to eq(true)
end
it_behaves_like 'returns in_progress based on Sidekiq::Status'
end
end
# frozen_string_literal: true
require 'spec_helper'
describe SelfMonitoringProjectDeleteWorker do
let_it_be(:jid) { 'b5b28910d97563e58c2fe55f' }
let_it_be(:data_key) { "self_monitoring_delete_result:#{jid}" }
describe '#perform' do
let(:service_class) { Gitlab::DatabaseImporters::SelfMonitoring::Project::DeleteService }
let(:service) { instance_double(service_class) }
it_behaves_like 'executes service'
end
describe '.status', :clean_gitlab_redis_shared_state do
it_behaves_like 'returns in_progress based on Sidekiq::Status'
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