From 3af3bc1724ae45cc7cc0dbc5330aadc84f45f41d Mon Sep 17 00:00:00 2001 From: Aleksei Lipniagov <alipniagov@gitlab.com> Date: Mon, 5 Feb 2024 10:12:48 +0000 Subject: [PATCH] Move SyncServiceTokenWorker to CC namespace Move the worker from Ai:: to CloudConnector:: namespace. --- .../workers/ai/sync_service_token_worker.rb | 4 ++ ee/app/workers/all_queues.yml | 9 ++++ .../sync_service_token_worker.rb | 27 ++++++++++ .../sync_service_token_worker_spec.rb | 53 +++++++++++++++++++ spec/workers/every_sidekiq_worker_spec.rb | 1 + 5 files changed, 94 insertions(+) create mode 100644 ee/app/workers/cloud_connector/sync_service_token_worker.rb create mode 100644 ee/spec/workers/cloud_connector/sync_service_token_worker_spec.rb diff --git a/ee/app/workers/ai/sync_service_token_worker.rb b/ee/app/workers/ai/sync_service_token_worker.rb index 01204d51827bc..bff8e1a941e56 100644 --- a/ee/app/workers/ai/sync_service_token_worker.rb +++ b/ee/app/workers/ai/sync_service_token_worker.rb @@ -1,5 +1,9 @@ # frozen_string_literal: true +# !!! WARNING !!! +# We keep it for compatibility during 16.9. Planned for removal in future releases. +# Starting 16.10, apply all changes to Cloud::SyncServiceTokenWorker instead. +# Refer to https://gitlab.com/groups/gitlab-org/-/epics/12544. module Ai class SyncServiceTokenWorker include ApplicationWorker diff --git a/ee/app/workers/all_queues.yml b/ee/app/workers/all_queues.yml index 4dd90f8566fe1..18f6fff4d67a5 100644 --- a/ee/app/workers/all_queues.yml +++ b/ee/app/workers/all_queues.yml @@ -129,6 +129,15 @@ :weight: 1 :idempotent: true :tags: [] +- :name: cronjob:cloud_connector_sync_service_token + :worker_name: CloudConnector::SyncServiceTokenWorker + :feature_category: :cloud_connector + :has_external_dependencies: true + :urgency: :low + :resource_boundary: :unknown + :weight: 1 + :idempotent: true + :tags: [] - :name: cronjob:compliance_management_merge_requests_compliance_violations_consistency :worker_name: ComplianceManagement::MergeRequests::ComplianceViolationsConsistencyWorker :feature_category: :compliance_management diff --git a/ee/app/workers/cloud_connector/sync_service_token_worker.rb b/ee/app/workers/cloud_connector/sync_service_token_worker.rb new file mode 100644 index 0000000000000..806da20d54a51 --- /dev/null +++ b/ee/app/workers/cloud_connector/sync_service_token_worker.rb @@ -0,0 +1,27 @@ +# frozen_string_literal: true + +module CloudConnector + class SyncServiceTokenWorker + include ApplicationWorker + + data_consistency :sticky + + include CronjobQueue # rubocop:disable Scalability/CronWorkerContext -- Does not perform work scoped to a context + + idempotent! + + sidekiq_options retry: 3 + + worker_has_external_dependencies! + + feature_category :cloud_connector + + def perform + return unless ::Feature.enabled?(:use_sync_service_token_worker) + + result = ::CloudConnector::SyncCloudConnectorAccessService.new.execute + + log_extra_metadata_on_done(:error_message, result[:message]) unless result.success? + end + end +end diff --git a/ee/spec/workers/cloud_connector/sync_service_token_worker_spec.rb b/ee/spec/workers/cloud_connector/sync_service_token_worker_spec.rb new file mode 100644 index 0000000000000..a3c932fefc5bf --- /dev/null +++ b/ee/spec/workers/cloud_connector/sync_service_token_worker_spec.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe CloudConnector::SyncServiceTokenWorker, type: :worker, feature_category: :cloud_connector do + describe '#perform' do + let(:service_response) { ServiceResponse.success } + + before do + allow(CloudConnector::SyncCloudConnectorAccessService).to receive_message_chain(:new, + :execute).and_return(service_response) + end + + include_examples 'an idempotent worker' do + let(:worker) { described_class.new } + + subject(:sync_service_token) { perform_multiple(worker: worker) } + + it 'executes the SyncCloudConnectorAccessService with expected params' do + expect(CloudConnector::SyncCloudConnectorAccessService).to receive_message_chain(:new, :execute) + expect(worker).not_to receive(:log_extra_metadata_on_done) + + sync_service_token + end + + context 'when :use_sync_service_token_worker feature flag is disabled' do + before do + stub_feature_flags(use_sync_service_token_worker: false) + end + + it 'does not call CloudConnector::SyncCloudConnectorAccessService' do + expect(::CloudConnector::SyncCloudConnectorAccessService).not_to receive(:new) + expect(worker).not_to receive(:log_extra_metadata_on_done) + + sync_service_token + end + end + + context 'when SyncCloudConnectorAccessService fails' do + let(:service_response) { ServiceResponse.error(message: 'Error') } + + it { expect { sync_service_token }.not_to raise_error } + + it 'logs the error' do + expect(worker).to receive(:log_extra_metadata_on_done) + .with(:error_message, service_response[:message]).twice + + sync_service_token + end + end + end + end +end diff --git a/spec/workers/every_sidekiq_worker_spec.rb b/spec/workers/every_sidekiq_worker_spec.rb index 4918c4e00824b..75101c1a24e48 100644 --- a/spec/workers/every_sidekiq_worker_spec.rb +++ b/spec/workers/every_sidekiq_worker_spec.rb @@ -176,6 +176,7 @@ 'Ci::UnlockPipelinesInQueueWorker' => 0, 'Ci::SyncReportsToReportApprovalRulesWorker' => 3, 'CleanupContainerRepositoryWorker' => 3, + 'CloudConnector::SyncServiceTokenWorker' => 3, 'ClusterConfigureIstioWorker' => 3, 'ClusterInstallAppWorker' => 3, 'ClusterPatchAppWorker' => 3, -- GitLab