diff options
-rw-r--r-- | app/models/ci/pipeline.rb | 6 | ||||
-rw-r--r-- | spec/models/ci/pipeline_spec.rb | 24 |
2 files changed, 30 insertions, 0 deletions
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index e4de223e0f7..c9cab3d13f0 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -331,6 +331,12 @@ module Ci end end + def update_timing + Gitlab::OptimisticLocking.retry_lock(self) do + touch if updated_at < 5.minutes.ago + end + end + def update_duration return unless started_at diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index ea5602ca84f..ba40e28a6cb 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -982,6 +982,30 @@ describe Ci::Pipeline, :models do end end + describe '#update_timing' do + before do + pipeline.touch + end + + context 'pipeline updated less than 5 minutes ago' do + it 'does not update pipeline timing' do + travel_to(2.minutes.from_now) do + expect { pipeline.update_timing } + .not_to change { pipeline.updated_at } + end + end + end + + context 'pipeline not updated less than 5 minutes ago' do + it 'updates pipeline timing' do + travel_to(8.minutes.from_now) do + expect { pipeline.update_timing } + .to change { pipeline.updated_at } + end + end + end + end + describe 'scopes' do before do create(:ci_empty_pipeline, status: :created) |