diff --git a/app/services/ci/pipeline_processing/atomic_processing_service.rb b/app/services/ci/pipeline_processing/atomic_processing_service.rb
index 8211507fb9560369d7a2d325e4131519f561776d..750272c3ecb0984e8c542a43d8215dbe2b10d634 100644
--- a/app/services/ci/pipeline_processing/atomic_processing_service.rb
+++ b/app/services/ci/pipeline_processing/atomic_processing_service.rb
@@ -144,6 +144,10 @@ def lease_timeout
         DEFAULT_LEASE_TIMEOUT
       end
 
+      def lease_taken_log_level
+        :info
+      end
+
       def log_running_reset_skipped_jobs_service(jobs)
         Gitlab::AppJsonLogger.info(
           class: self.class.name.to_s,
diff --git a/spec/services/ci/pipeline_processing/atomic_processing_service_spec.rb b/spec/services/ci/pipeline_processing/atomic_processing_service_spec.rb
index 15f2cc0990c6f5c5bf1b861ae9a2c4379a54a791..93dc9481bf0b22e53ddd70c3cfc315332cdc1cdd 100644
--- a/spec/services/ci/pipeline_processing/atomic_processing_service_spec.rb
+++ b/spec/services/ci/pipeline_processing/atomic_processing_service_spec.rb
@@ -4,6 +4,7 @@
 
 RSpec.describe Ci::PipelineProcessing::AtomicProcessingService, feature_category: :continuous_integration do
   include RepoHelpers
+  include ExclusiveLeaseHelpers
 
   describe 'Pipeline Processing Service Tests With Yaml' do
     let_it_be(:project) { create(:project, :repository) }
@@ -1233,6 +1234,19 @@ def event_on_pipeline(event)
       end
     end
 
+    context 'when the exclusive lease is taken' do
+      let(:lease_key) { "ci/pipeline_processing/atomic_processing_service::pipeline_id:#{pipeline.id}" }
+
+      it 'skips pipeline processing' do
+        create_build('linux', stage_idx: 0)
+
+        stub_exclusive_lease_taken(lease_key)
+
+        expect(Gitlab::AppJsonLogger).to receive(:info).with(a_hash_including(message: /^Cannot obtain an exclusive lease/))
+        expect(process_pipeline).to be_falsy
+      end
+    end
+
     private
 
     def all_builds