diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-08-18 13:50:51 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-08-18 13:50:51 +0300 |
commit | db384e6b19af03b4c3c82a5760d83a3fd79f7982 (patch) | |
tree | 34beaef37df5f47ccbcf5729d7583aae093cffa0 /app/workers/concerns | |
parent | 54fd7b1bad233e3944434da91d257fa7f63c3996 (diff) |
Add latest changes from gitlab-org/gitlab@16-3-stable-eev16.3.0-rc42
Diffstat (limited to 'app/workers/concerns')
-rw-r--r-- | app/workers/concerns/gitlab/github_import/rescheduling_methods.rb | 5 | ||||
-rw-r--r-- | app/workers/concerns/packages/error_handling.rb | 48 | ||||
-rw-r--r-- | app/workers/concerns/worker_attributes.rb | 8 |
3 files changed, 59 insertions, 2 deletions
diff --git a/app/workers/concerns/gitlab/github_import/rescheduling_methods.rb b/app/workers/concerns/gitlab/github_import/rescheduling_methods.rb index 772388ffc9e..b40914770b5 100644 --- a/app/workers/concerns/gitlab/github_import/rescheduling_methods.rb +++ b/app/workers/concerns/gitlab/github_import/rescheduling_methods.rb @@ -5,10 +5,15 @@ module Gitlab # Module that provides methods shared by the various workers used for # importing GitHub projects. module ReschedulingMethods + extend ActiveSupport::Concern include JobDelayCalculator ENQUEUED_JOB_COUNT = 'github-importer/enqueued_job_count/%{project}/%{collection}' + included do + loggable_arguments 2 + end + # project_id - The ID of the GitLab project to import the note into. # hash - A Hash containing the details of the GitHub object to import. # notify_key - The Redis key to notify upon completion, if any. diff --git a/app/workers/concerns/packages/error_handling.rb b/app/workers/concerns/packages/error_handling.rb new file mode 100644 index 00000000000..26948d39912 --- /dev/null +++ b/app/workers/concerns/packages/error_handling.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +module Packages + module ErrorHandling + extend ActiveSupport::Concern + + DEFAULT_STATUS_MESSAGE = 'Unexpected error' + + CONTROLLED_ERRORS = [ + ArgumentError, + ActiveRecord::RecordInvalid, + ::Packages::Helm::ExtractFileMetadataService::ExtractionError, + ::Packages::Nuget::ExtractMetadataFileService::ExtractionError, + ::Packages::Nuget::UpdatePackageFromMetadataService::InvalidMetadataError, + ::Packages::Nuget::UpdatePackageFromMetadataService::ZipError, + ::Packages::Rubygems::ProcessGemService::ExtractionError, + ::Packages::Rubygems::ProcessGemService::InvalidMetadataError + ].freeze + + def process_package_file_error(package_file:, exception:, extra_log_payload: {}) + log_payload = { + project_id: package_file.project_id, + package_file_id: package_file.id + }.merge(extra_log_payload) + Gitlab::ErrorTracking.log_exception(exception, **log_payload) + + package_file.package.update_columns( + status: :error, + status_message: truncated_status_message(exception) + ) + end + + private + + def controlled_error?(exception) + CONTROLLED_ERRORS.include?(exception.class) + end + + def truncated_status_message(exception) + status_message = exception.message if controlled_error?(exception) + + # Do not save the exception message in case it contains confidential data + status_message ||= "#{DEFAULT_STATUS_MESSAGE}: #{exception.class}" + + status_message.truncate(::Packages::Package::STATUS_MESSAGE_MAX_LENGTH) + end + end +end diff --git a/app/workers/concerns/worker_attributes.rb b/app/workers/concerns/worker_attributes.rb index c260e06607c..02eda924b71 100644 --- a/app/workers/concerns/worker_attributes.rb +++ b/app/workers/concerns/worker_attributes.rb @@ -151,6 +151,10 @@ module WorkerAttributes set_class_attribute(:weight, value) end + def pause_control(value) + ::Gitlab::SidekiqMiddleware::PauseControl::WorkersMap.set_strategy_for(strategy: value, worker: self) + end + def get_weight get_class_attribute(:weight) || NAMESPACE_WEIGHTS[queue_namespace] || @@ -193,10 +197,10 @@ module WorkerAttributes !!get_class_attribute(:big_payload) end - def defer_on_database_health_signal(gitlab_schema, delay_by = DEFAULT_DEFER_DELAY, tables = []) + def defer_on_database_health_signal(gitlab_schema, tables = [], delay_by = DEFAULT_DEFER_DELAY) set_class_attribute( :database_health_check_attrs, - { gitlab_schema: gitlab_schema, delay_by: delay_by, tables: tables } + { gitlab_schema: gitlab_schema, tables: tables, delay_by: delay_by } ) end |