47 lines
1.6 KiB
Ruby
47 lines
1.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module BackgroundMigration
|
|
# This class creates/updates those namespace statistics
|
|
# that haven't been created nor initialized.
|
|
# It also updates the related namespace statistics
|
|
class PopulateNamespaceStatistics
|
|
def perform(group_ids, statistics)
|
|
# Updating group statistics might involve calling Gitaly.
|
|
# For example, when calculating `wiki_size`, we will need
|
|
# to perform the request to check if the repo exists and
|
|
# also the repository size.
|
|
#
|
|
# The `allow_n_plus_1_calls` method is only intended for
|
|
# dev and test. It won't be raised in prod.
|
|
::Gitlab::GitalyClient.allow_n_plus_1_calls do
|
|
relation(group_ids).each do |group|
|
|
upsert_namespace_statistics(group, statistics)
|
|
end
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def upsert_namespace_statistics(group, statistics)
|
|
response = ::Groups::UpdateStatisticsService.new(group, statistics: statistics).execute
|
|
|
|
error_message("#{response.message} group: #{group.id}") if response.error?
|
|
end
|
|
|
|
def logger
|
|
@logger ||= ::Gitlab::BackgroundMigration::Logger.build
|
|
end
|
|
|
|
def error_message(message)
|
|
logger.error(message: "Namespace Statistics Migration: #{message}")
|
|
end
|
|
|
|
def relation(group_ids)
|
|
Group.includes(:namespace_statistics).where(id: group_ids)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Gitlab::BackgroundMigration::PopulateNamespaceStatistics.prepend_mod_with('Gitlab::BackgroundMigration::PopulateNamespaceStatistics')
|