Commit 264394f6 authored by Gabriel Mazetto's avatar Gabriel Mazetto

Extract and simplify more code into BaseRepositoryService`

`try_to_set_repository_read_only!` is now on the Base class.
Simplified Exception classes from 2 to 1 with a more descriptive name.
parent 7c8920c9
...@@ -2,11 +2,8 @@ ...@@ -2,11 +2,8 @@
module Projects module Projects
module HashedStorage module HashedStorage
# Returned when there is an error with the Hashed Storage migration # Returned when repository can't be made read-only because there is already a git transfer in progress
RepositoryMigrationError = Class.new(StandardError) RepositoryInUseError = Class.new(StandardError)
# Returned when there is an error with the Hashed Storage rollback
RepositoryRollbackError = Class.new(StandardError)
class BaseRepositoryService < BaseService class BaseRepositoryService < BaseService
include Gitlab::ShellAdapter include Gitlab::ShellAdapter
...@@ -55,6 +52,16 @@ module Projects ...@@ -55,6 +52,16 @@ module Projects
move_repository(new_disk_path, old_disk_path) move_repository(new_disk_path, old_disk_path)
move_repository("#{new_disk_path}.wiki", old_wiki_disk_path) move_repository("#{new_disk_path}.wiki", old_wiki_disk_path)
end end
def try_to_set_repository_read_only!
# Mitigate any push operation to start during migration
unless project.set_repository_read_only!
migration_error = "Target repository '#{old_disk_path}' cannot be made read-only as there is a git transfer in progress"
logger.error migration_error
raise RepositoryInUseError, migration_error
end
end
end end
end end
end end
...@@ -35,18 +35,6 @@ module Projects ...@@ -35,18 +35,6 @@ module Projects
result result
end end
private
def try_to_set_repository_read_only!
# Mitigate any push operation to start during migration
unless project.set_repository_read_only!
migration_error = "Target repository '#{old_disk_path}' cannot be made read-only as there is a git transfer in progress"
logger.error migration_error
raise RepositoryMigrationError, migration_error
end
end
end end
end end
end end
...@@ -35,18 +35,6 @@ module Projects ...@@ -35,18 +35,6 @@ module Projects
result result
end end
private
def try_to_set_repository_read_only!
# Mitigate any push operation to start during migration
unless project.set_repository_read_only!
migration_error = "Target repository '#{old_disk_path}' cannot be made read-only as there is a git transfer in progress"
logger.error migration_error
raise RepositoryRollbackError, migration_error
end
end
end end
end end
end end
...@@ -28,7 +28,7 @@ describe Projects::HashedStorage::MigrateRepositoryService do ...@@ -28,7 +28,7 @@ describe Projects::HashedStorage::MigrateRepositoryService do
it 'fails when a git operation is in progress' do it 'fails when a git operation is in progress' do
allow(project).to receive(:repo_reference_count) { 1 } allow(project).to receive(:repo_reference_count) { 1 }
expect { service.execute }.to raise_error(Projects::HashedStorage::RepositoryMigrationError) expect { service.execute }.to raise_error(Projects::HashedStorage::RepositoryInUseError)
end end
end end
......
...@@ -30,7 +30,7 @@ describe Projects::HashedStorage::RollbackRepositoryService, :clean_gitlab_redis ...@@ -30,7 +30,7 @@ describe Projects::HashedStorage::RollbackRepositoryService, :clean_gitlab_redis
it 'fails when a git operation is in progress' do it 'fails when a git operation is in progress' do
allow(project).to receive(:repo_reference_count) { 1 } allow(project).to receive(:repo_reference_count) { 1 }
expect { service.execute }.to raise_error(Projects::HashedStorage::RepositoryRollbackError) expect { service.execute }.to raise_error(Projects::HashedStorage::RepositoryInUseError)
end 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