Commit cb770872 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Merge branch 'optimise-runner-update-cached-info' into 'master'

Optimise runner update cached info

See merge request gitlab-org/gitlab-ce!19187
parents 064218b5 36fbe142
...@@ -219,10 +219,8 @@ module Ci ...@@ -219,10 +219,8 @@ module Ci
cache_attributes(values) cache_attributes(values)
if persist_cached_data? # We save data without validation, it will always change due to `contacted_at`
self.assign_attributes(values) self.update_columns(values) if persist_cached_data?
self.save if self.changed?
end
end end
def pick_build!(build) def pick_build!(build)
......
---
title: Update runner cached informations without performing validations
merge_request:
author:
type: performance
...@@ -549,7 +549,7 @@ describe Ci::Runner do ...@@ -549,7 +549,7 @@ describe Ci::Runner do
end end
describe '#update_cached_info' do describe '#update_cached_info' do
let(:runner) { create(:ci_runner) } let(:runner) { create(:ci_runner, :project) }
subject { runner.update_cached_info(architecture: '18-bit') } subject { runner.update_cached_info(architecture: '18-bit') }
...@@ -570,17 +570,22 @@ describe Ci::Runner do ...@@ -570,17 +570,22 @@ describe Ci::Runner do
runner.contacted_at = 2.hours.ago runner.contacted_at = 2.hours.ago
end end
it 'updates database' do context 'with invalid runner' do
expect_redis_update before do
runner.projects = []
end
it 'still updates redis cache and database' do
expect(runner).to be_invalid
expect { subject }.to change { runner.reload.read_attribute(:contacted_at) } expect_redis_update
.and change { runner.reload.read_attribute(:architecture) } does_db_update
end
end end
it 'updates cache' do it 'updates redis cache and database' do
expect_redis_update expect_redis_update
does_db_update
subject
end end
end end
...@@ -590,6 +595,11 @@ describe Ci::Runner do ...@@ -590,6 +595,11 @@ describe Ci::Runner do
expect(redis).to receive(:set).with(redis_key, anything, any_args) expect(redis).to receive(:set).with(redis_key, anything, any_args)
end end
end end
def does_db_update
expect { subject }.to change { runner.reload.read_attribute(:contacted_at) }
.and change { runner.reload.read_attribute(:architecture) }
end
end end
describe '#destroy' do describe '#destroy' do
......
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