Reset the retry columns the when repository/wiki is updated

parent 09546808
...@@ -36,18 +36,35 @@ module Geo ...@@ -36,18 +36,35 @@ module Geo
def reset_repository_checksum! def reset_repository_checksum!
return if repository_state.nil? return if repository_state.nil?
repository_state.update!("#{repository_checksum_column}" => nil, "#{repository_failure_column}" => nil) repository_state.update!(
"#{repository_checksum_column}" => nil,
"#{repository_failure_column}" => nil,
"#{repository_retry_at_column}" => nil,
"#{repository_retry_count_column}" => nil
)
rescue => e rescue => e
log_error('Cannot reset repository checksum', e) log_error('Cannot reset repository checksum', e)
raise RepositoryUpdateError, "Cannot reset repository checksum: #{e}" raise RepositoryUpdateError, "Cannot reset repository checksum: #{e}"
end end
def repository_checksum_column def repository_checksum_column
"#{Geo::RepositoryUpdatedEvent.sources.key(source)}_verification_checksum" "#{repository_type}_verification_checksum"
end end
def repository_failure_column def repository_failure_column
"last_#{Geo::RepositoryUpdatedEvent.sources.key(source)}_verification_failure" "last_#{repository_type}_verification_failure"
end
def repository_retry_at_column
"#{repository_type}_retry_at"
end
def repository_retry_count_column
"#{repository_type}_retry_count"
end
def repository_type
@repository_type ||= Geo::RepositoryUpdatedEvent.sources.key(source)
end end
end end
end end
...@@ -48,13 +48,23 @@ describe Geo::RepositoryUpdatedService do ...@@ -48,13 +48,23 @@ describe Geo::RepositoryUpdatedService do
expect { subject.execute }.to change { repository_state.reload.public_send("last_#{method_prefix}_verification_failure") }.to(nil) expect { subject.execute }.to change { repository_state.reload.public_send("last_#{method_prefix}_verification_failure") }.to(nil)
end end
it 'resets the retry_at column' do
repository_state.update!("#{method_prefix}_retry_at" => 1.hour.from_now)
expect { subject.execute }.to change { repository_state.reload.public_send("#{method_prefix}_retry_at") }.to(nil)
end
it 'resets the retry_count column' do
repository_state.update!("#{method_prefix}_retry_count" => 1)
expect { subject.execute }.to change { repository_state.reload.public_send("#{method_prefix}_retry_count") }.to(nil)
end
it 'does not raise an error when project have never been verified' do it 'does not raise an error when project have never been verified' do
expect { described_class.new(create(:project)) }.not_to raise_error expect { described_class.new(create(:project)) }.not_to raise_error
end end
it 'raises a Geo::RepositoryUpdatedService::RepositoryUpdateError when an error occurs' do it 'raises a Geo::RepositoryUpdatedService::RepositoryUpdateError when an error occurs' do
allow(subject.repository_state).to receive(:update!) allow(subject.repository_state).to receive(:update!)
.with("#{method_prefix}_verification_checksum" => nil, "last_#{method_prefix}_verification_failure" => nil) .with("#{method_prefix}_verification_checksum" => nil, "last_#{method_prefix}_verification_failure" => nil, "#{method_prefix}_retry_at" => nil, "#{method_prefix}_retry_count" => nil)
.and_raise(ActiveRecord::RecordInvalid.new(repository_state)) .and_raise(ActiveRecord::RecordInvalid.new(repository_state))
expect { subject.execute }.to raise_error Geo::RepositoryUpdatedService::RepositoryUpdateError, /Cannot reset repository checksum/ expect { subject.execute }.to raise_error Geo::RepositoryUpdatedService::RepositoryUpdateError, /Cannot reset repository checksum/
......
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