summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2016-11-25 13:07:19 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-01-02 13:49:09 +0100
commitb2d3a653350704c9c851c575c241f3bc20d07071 (patch)
tree4c2bdf4854113b1449139fab910959d11fad204d
parent190d73c3c942ba5614d60bba4e47ffd9634cedd3 (diff)
downloadgitlab-ce-b2d3a653350704c9c851c575c241f3bc20d07071.tar.gz
Add timing synchronization method to ci pipeline
-rw-r--r--app/models/ci/pipeline.rb6
-rw-r--r--spec/models/ci/pipeline_spec.rb24
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)