Wipe any existing repositories checksums

The algorithm to calculate the checksum has changed.
We need to wipe any existing checksums in the database,
as any checksums generated with the old algorithm will
become invalid.
parent e88ab02e
# frozen_string_literal: true
class ScheduleRepositoryChecksumCleanup < ActiveRecord::Migration
include Gitlab::Database::MigrationHelpers
DOWNTIME = false
MIGRATION = 'ResetChecksumFromProjectRepositoryStates'.freeze
BATCH_SIZE = 10_000
DELAY_INTERVAL = 5.minutes.to_i
class Project < ActiveRecord::Base
self.table_name = 'projects'
include ::EachBatch
end
class ProjectRepositoryState < ActiveRecord::Base
self.table_name = 'project_repository_states'
end
disable_ddl_transaction!
def up
# This background migration should only affect EE installations,
# which has entries in the project_repository_states table.
return unless ProjectRepositoryState.exists?
now = Time.now
projects_to_cleanup =
Project
.where(Project.arel_table[:last_repository_updated_at].lteq(now))
projects_to_cleanup.each_batch(of: BATCH_SIZE) do |relation, index|
range = relation.pluck('MIN(id)', 'MAX(id)').first
delay = index * DELAY_INTERVAL
BackgroundMigrationWorker.perform_in(delay, MIGRATION, range)
end
end
def down
# no-op
end
end
# frozen_string_literal: true
module Gitlab
module BackgroundMigration
class ResetChecksumFromProjectRepositoryStates
def perform(start_id, stop_id)
ProjectRepositoryState
.where(project_id: start_id..stop_id)
.update_all(
repository_verification_checksum: nil,
wiki_verification_checksum: nil,
last_repository_verification_failure: nil,
last_wiki_verification_failure: nil,
repository_retry_at: nil,
wiki_retry_at: nil,
repository_retry_count: nil,
wiki_retry_count: nil
)
end
end
end
end
......@@ -5,6 +5,8 @@ FactoryBot.define do
trait :repository_failed do
repository_verification_checksum nil
last_repository_verification_failure 'Could not calculate the checksum'
repository_retry_count 1
repository_retry_at { Time.now + 5.minutes }
end
trait :repository_outdated do
......@@ -15,11 +17,15 @@ FactoryBot.define do
trait :repository_verified do
repository_verification_checksum 'f079a831cab27bcda7d81cd9b48296d0c3dd92ee'
last_repository_verification_failure nil
repository_retry_count nil
repository_retry_at nil
end
trait :wiki_failed do
wiki_verification_checksum nil
last_wiki_verification_failure 'Could not calculate the checksum'
wiki_retry_count 1
wiki_retry_at { Time.now + 5.minutes }
end
trait :wiki_outdated do
......@@ -30,6 +36,8 @@ FactoryBot.define do
trait :wiki_verified do
wiki_verification_checksum 'e079a831cab27bcda7d81cd9b48296d0c3dd92ef'
last_wiki_verification_failure nil
wiki_retry_count nil
wiki_retry_at nil
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe Gitlab::BackgroundMigration::ResetChecksumFromProjectRepositoryStates, :migration, schema: 20180914195058 do
describe '#perform' do
it 'processes all repository states in batch' do
repository_state_1 = create(:repository_state, :repository_verified, :wiki_verified)
repository_state_2 = create(:repository_state, :repository_failed, :wiki_failed)
repository_state_3 = create(:repository_state, :repository_verified, :wiki_verified)
subject.perform(repository_state_1.project_id, repository_state_2.project_id)
expect(repository_state_1.reload).to have_attributes(
repository_verification_checksum: be_nil,
wiki_verification_checksum: be_nil,
last_repository_verification_failure: be_nil,
last_wiki_verification_failure: be_nil,
repository_retry_at: be_nil,
wiki_retry_at: be_nil,
repository_retry_count: be_nil,
wiki_retry_count: be_nil
)
expect(repository_state_2.reload).to have_attributes(
repository_verification_checksum: be_nil,
wiki_verification_checksum: be_nil,
last_repository_verification_failure: be_nil,
last_wiki_verification_failure: be_nil,
repository_retry_at: be_nil,
wiki_retry_at: be_nil,
repository_retry_count: be_nil,
wiki_retry_count: be_nil
)
expect(repository_state_3.reload).to have_attributes(
repository_verification_checksum: be_present,
wiki_verification_checksum: be_present
)
end
end
end
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