diff --git a/ee/app/services/projects/update_mirror_service.rb b/ee/app/services/projects/update_mirror_service.rb index 049e831b1e9c147697b12b6c17190c015c13faa8..e0d5e62d3b0effb57872ac27a8adb0b0e20ba1c0 100644 --- a/ee/app/services/projects/update_mirror_service.rb +++ b/ee/app/services/projects/update_mirror_service.rb @@ -98,7 +98,11 @@ def update_tags(&block) def update_lfs_objects result = Projects::LfsPointers::LfsImportService.new(project).execute - raise UpdateError, result[:message] if result[:status] == :error + if result[:status] == :error + log_error(result[:message]) + # Uncomment once https://gitlab.com/gitlab-org/gitlab-ce/issues/61834 is closed + # raise UpdateError, result[:message] + end end def handle_diverged_branch(upstream, local, branch_name, errors) @@ -127,5 +131,21 @@ def repository_tags_with_target def skip_branch?(name) project.only_mirror_protected_branches && !ProtectedBranch.protected?(project, name) end + + def service_logger + @service_logger ||= Gitlab::UpdateMirrorServiceJsonLogger.build + end + + def base_payload + { + user_id: current_user.id, + project_id: project.id, + import_url: project.safe_import_url + } + end + + def log_error(error_message) + service_logger.error(base_payload.merge(error_message: error_message)) + end end end diff --git a/ee/changelogs/unreleased/fj-61834-log-lfs-error-pull-mirror.yml b/ee/changelogs/unreleased/fj-61834-log-lfs-error-pull-mirror.yml new file mode 100644 index 0000000000000000000000000000000000000000..1ecb7e36df8093df8581cdfc604ce0f0c88f02b6 --- /dev/null +++ b/ee/changelogs/unreleased/fj-61834-log-lfs-error-pull-mirror.yml @@ -0,0 +1,5 @@ +--- +title: Avoid failing pull mirroring if LFS import fails +merge_request: 13133 +author: +type: changed diff --git a/ee/lib/gitlab/update_mirror_service_json_logger.rb b/ee/lib/gitlab/update_mirror_service_json_logger.rb new file mode 100644 index 0000000000000000000000000000000000000000..c48eee5401182dc503fa0771256e6927702b221e --- /dev/null +++ b/ee/lib/gitlab/update_mirror_service_json_logger.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module Gitlab + class UpdateMirrorServiceJsonLogger < Gitlab::JsonLogger + def self.file_name_noext + 'update_mirror_service_json' + end + end +end diff --git a/ee/spec/services/projects/update_mirror_service_spec.rb b/ee/spec/services/projects/update_mirror_service_spec.rb index c24c3bff0bffec3530a35938427468068bceb03a..32d4274da5db5e0a015ee4a03eae59cbd4343a56 100644 --- a/ee/spec/services/projects/update_mirror_service_spec.rb +++ b/ee/spec/services/projects/update_mirror_service_spec.rb @@ -295,13 +295,33 @@ def create_file(repository) end context 'when Lfs import fails' do - it 'the mirror operation fails' do - expect_any_instance_of(Projects::LfsPointers::LfsImportService).to receive(:execute).and_return(status: :error, message: 'error message') + let(:error_message) { 'error_message' } + before do + expect_any_instance_of(Projects::LfsPointers::LfsImportService).to receive(:execute).and_return(status: :error, message: error_message) + end + + # Uncomment once https://gitlab.com/gitlab-org/gitlab-ce/issues/61834 is closed + # it 'fails mirror operation' do + # expect_any_instance_of(Projects::LfsPointers::LfsImportService).to receive(:execute).and_return(status: :error, message: 'error message') + + # result = subject.execute + + # expect(result[:status]).to eq :error + # expect(result[:message]).to eq 'error message' + # end + + # Remove once https://gitlab.com/gitlab-org/gitlab-ce/issues/61834 is closed + it 'does not fail mirror operation' do result = subject.execute - expect(result[:status]).to eq :error - expect(result[:message]).to eq 'error message' + expect(result[:status]).to eq :success + end + + it 'logs the error' do + expect_any_instance_of(Gitlab::UpdateMirrorServiceJsonLogger).to receive(:error).with(hash_including(error_message: error_message)) + + subject.execute end end end