Does not refresh project statistics on read-only instance

ProjectStatistics#refresh! may be run on a Geo secondary
parent 152b0cd9
...@@ -37,6 +37,8 @@ class ProjectStatistics < ApplicationRecord ...@@ -37,6 +37,8 @@ class ProjectStatistics < ApplicationRecord
end end
def refresh!(only: []) def refresh!(only: [])
return if Gitlab::Database.read_only?
COLUMNS_TO_REFRESH.each do |column, generator| COLUMNS_TO_REFRESH.each do |column, generator|
if only.empty? || only.include?(column) if only.empty? || only.include?(column)
public_send("update_#{column}") # rubocop:disable GitlabSecurity/PublicSend public_send("update_#{column}") # rubocop:disable GitlabSecurity/PublicSend
......
...@@ -201,6 +201,23 @@ RSpec.describe ProjectStatistics do ...@@ -201,6 +201,23 @@ RSpec.describe ProjectStatistics do
statistics.refresh!(only: [:commit_count]) statistics.refresh!(only: [:commit_count])
end end
end end
context 'when the database is read-only' do
it 'does nothing' do
allow(Gitlab::Database).to receive(:read_only?) { true }
expect(statistics).not_to receive(:update_commit_count)
expect(statistics).not_to receive(:update_repository_size)
expect(statistics).not_to receive(:update_wiki_size)
expect(statistics).not_to receive(:update_lfs_objects_size)
expect(statistics).not_to receive(:update_snippets_size)
expect(statistics).not_to receive(:save!)
expect(Namespaces::ScheduleAggregationWorker)
.not_to receive(:perform_async)
statistics.refresh!
end
end
end end
describe '#update_commit_count' do describe '#update_commit_count' 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