diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-13 22:27:03 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-13 22:27:03 +0300 |
commit | 7f5f940041c8d1ee074be96cc64bdccdd95649b1 (patch) | |
tree | 334342b5d7c1898efcbe345c51838b63aa5106bc /app/services/projects | |
parent | b16db1458f5e0f6b0427cf3e2471302657297427 (diff) |
Add latest changes from gitlab-org/gitlab@13-5-stable-eev13.5.4
Diffstat (limited to 'app/services/projects')
-rw-r--r-- | app/services/projects/hashed_storage/migrate_repository_service.rb | 28 | ||||
-rw-r--r-- | app/services/projects/hashed_storage/rollback_repository_service.rb | 28 |
2 files changed, 46 insertions, 10 deletions
diff --git a/app/services/projects/hashed_storage/migrate_repository_service.rb b/app/services/projects/hashed_storage/migrate_repository_service.rb index fd62ac37d27..adc7e38e4d5 100644 --- a/app/services/projects/hashed_storage/migrate_repository_service.rb +++ b/app/services/projects/hashed_storage/migrate_repository_service.rb @@ -21,14 +21,32 @@ module Projects project.storage_version = nil end - project.repository_read_only = false - project.save!(validate: false) - - if result && block_given? - yield + project.transaction do + project.save!(validate: false) + project.set_repository_writable! end result + rescue Gitlab::Git::CommandError => e + logger.error("Repository #{project.full_path} failed to upgrade (PROJECT_ID=#{project.id}). Git operation failed: #{e.inspect}") + + rollback_migration! + + false + rescue OpenSSL::Cipher::CipherError => e + logger.error("Repository #{project.full_path} failed to upgrade (PROJECT_ID=#{project.id}). There is a problem with encrypted attributes: #{e.inspect}") + + rollback_migration! + + false + end + + private + + def rollback_migration! + rollback_folder_move + project.storage_version = nil + project.set_repository_writable! end end end diff --git a/app/services/projects/hashed_storage/rollback_repository_service.rb b/app/services/projects/hashed_storage/rollback_repository_service.rb index d6646e3765e..6ab49630603 100644 --- a/app/services/projects/hashed_storage/rollback_repository_service.rb +++ b/app/services/projects/hashed_storage/rollback_repository_service.rb @@ -21,14 +21,32 @@ module Projects project.storage_version = ::Project::HASHED_STORAGE_FEATURES[:repository] end - project.repository_read_only = false - project.save!(validate: false) - - if result && block_given? - yield + project.transaction do + project.save!(validate: false) + project.set_repository_writable! end result + rescue Gitlab::Git::CommandError => e + logger.error("Repository #{project.full_path} failed to rollback (PROJECT_ID=#{project.id}). Git operation failed: #{e.inspect}") + + rollback_migration! + + false + rescue OpenSSL::Cipher::CipherError => e + logger.error("Repository #{project.full_path} failed to rollback (PROJECT_ID=#{project.id}). There is a problem with encrypted attributes: #{e.inspect}") + + rollback_migration! + + false + end + + private + + def rollback_migration! + rollback_folder_move + project.storage_version = ::Project::HASHED_STORAGE_FEATURES[:repository] + project.set_repository_writable! end end end |