1# frozen_string_literal: true 2 3module Projects 4 module HashedStorage 5 class MigrateRepositoryService < BaseRepositoryService 6 def execute 7 try_to_set_repository_read_only! 8 9 @old_storage_version = project.storage_version 10 project.storage_version = ::Project::HASHED_STORAGE_FEATURES[:repository] 11 12 @new_disk_path = project.disk_path 13 14 result = move_repositories 15 16 if result 17 project.set_full_path 18 project.track_project_repository 19 else 20 rollback_folder_move 21 project.storage_version = nil 22 end 23 24 project.transaction do 25 project.save!(validate: false) 26 project.set_repository_writable! 27 end 28 29 result 30 rescue Gitlab::Git::CommandError => e 31 logger.error("Repository #{project.full_path} failed to upgrade (PROJECT_ID=#{project.id}). Git operation failed: #{e.inspect}") 32 33 rollback_migration! 34 35 false 36 rescue OpenSSL::Cipher::CipherError => e 37 logger.error("Repository #{project.full_path} failed to upgrade (PROJECT_ID=#{project.id}). There is a problem with encrypted attributes: #{e.inspect}") 38 39 rollback_migration! 40 41 false 42 end 43 44 private 45 46 def rollback_migration! 47 rollback_folder_move 48 project.storage_version = nil 49 project.set_repository_writable! 50 end 51 end 52 end 53end 54 55Projects::HashedStorage::MigrateRepositoryService.prepend_mod_with('Projects::HashedStorage::MigrateRepositoryService') 56