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

Optimise runner update cached info

See merge request gitlab-org/gitlab-ce!19187
This commit is contained in:
Grzegorz Bizon 2018-06-05 14:50:07 +00:00
commit cb77087246
3 changed files with 25 additions and 12 deletions

View file

@ -219,10 +219,8 @@ module Ci
cache_attributes(values)
if persist_cached_data?
self.assign_attributes(values)
self.save if self.changed?
end
# We save data without validation, it will always change due to `contacted_at`
self.update_columns(values) if persist_cached_data?
end
def pick_build!(build)

View file

@ -0,0 +1,5 @@
---
title: Update runner cached informations without performing validations
merge_request:
author:
type: performance

View file

@ -549,7 +549,7 @@ describe Ci::Runner do
end
describe '#update_cached_info' do
let(:runner) { create(:ci_runner) }
let(:runner) { create(:ci_runner, :project) }
subject { runner.update_cached_info(architecture: '18-bit') }
@ -570,17 +570,22 @@ describe Ci::Runner do
runner.contacted_at = 2.hours.ago
end
it 'updates database' do
expect_redis_update
expect { subject }.to change { runner.reload.read_attribute(:contacted_at) }
.and change { runner.reload.read_attribute(:architecture) }
context 'with invalid runner' do
before do
runner.projects = []
end
it 'updates cache' do
expect_redis_update
it 'still updates redis cache and database' do
expect(runner).to be_invalid
subject
expect_redis_update
does_db_update
end
end
it 'updates redis cache and database' do
expect_redis_update
does_db_update
end
end
@ -590,6 +595,11 @@ describe Ci::Runner do
expect(redis).to receive(:set).with(redis_key, anything, any_args)
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
describe '#destroy' do