2021-03-11 19:13:27 +05:30
# frozen_string_literal: true
module Gitlab
module BackgroundMigration
# Update existent project update_at column after their repository storage was moved
class BackfillProjectUpdatedAtAfterRepositoryStorageMove
def perform ( * project_ids )
2021-04-17 20:07:23 +05:30
updated_repository_storages = Projects :: RepositoryStorageMove . select ( " project_id, MAX(updated_at) as updated_at " ) . where ( project_id : project_ids ) . group ( :project_id )
2021-03-11 19:13:27 +05:30
Project . connection . execute <<-SQL
2021-04-29 21:17:54 +05:30
WITH repository_storage_cte as #{Gitlab::Database::AsWithMaterialized.materialized_if_supported} (
2021-03-11 19:13:27 +05:30
#{updated_repository_storages.to_sql}
)
UPDATE projects
SET updated_at = ( repository_storage_cte . updated_at + interval '1 second' )
FROM repository_storage_cte
WHERE projects . id = repository_storage_cte . project_id AND projects . updated_at < = repository_storage_cte . updated_at
SQL
end
end
end
end