summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--app/helpers/application_settings_helper.rb1
-rw-r--r--app/models/application_setting.rb9
-rw-r--r--app/models/application_setting_implementation.rb2
-rw-r--r--app/models/ci/pipeline.rb15
-rw-r--r--app/services/ci/after_requeue_job_service.rb6
-rw-r--r--app/services/ci/retry_pipeline_service.rb2
-rw-r--r--app/views/admin/application_settings/_spam.html.haml4
-rw-r--r--app/workers/admin_email_worker.rb2
-rw-r--r--app/workers/analytics/instance_statistics/count_job_trigger_worker.rb2
-rw-r--r--app/workers/analytics/instance_statistics/counter_job_worker.rb2
-rw-r--r--app/workers/analytics/usage_trends/count_job_trigger_worker.rb2
-rw-r--r--app/workers/analytics/usage_trends/counter_job_worker.rb2
-rw-r--r--app/workers/approve_blocked_pending_approval_users_worker.rb2
-rw-r--r--app/workers/archive_trace_worker.rb2
-rw-r--r--app/workers/authorized_keys_worker.rb2
-rw-r--r--app/workers/authorized_project_update/periodic_recalculate_worker.rb2
-rw-r--r--app/workers/authorized_project_update/project_create_worker.rb2
-rw-r--r--app/workers/authorized_project_update/project_group_link_create_worker.rb2
-rw-r--r--app/workers/authorized_project_update/user_refresh_over_user_range_worker.rb2
-rw-r--r--app/workers/authorized_projects_worker.rb2
-rw-r--r--app/workers/auto_devops/disable_worker.rb2
-rw-r--r--app/workers/auto_merge_process_worker.rb2
-rw-r--r--app/workers/background_migration_worker.rb2
-rw-r--r--app/workers/build_finished_worker.rb2
-rw-r--r--app/workers/build_hooks_worker.rb2
-rw-r--r--app/workers/build_queue_worker.rb2
-rw-r--r--app/workers/build_success_worker.rb2
-rw-r--r--app/workers/chaos/cpu_spin_worker.rb2
-rw-r--r--app/workers/chaos/db_spin_worker.rb2
-rw-r--r--app/workers/chaos/leak_mem_worker.rb2
-rw-r--r--app/workers/chaos/sleep_worker.rb2
-rw-r--r--app/workers/ci/archive_traces_cron_worker.rb2
-rw-r--r--app/workers/ci/build_prepare_worker.rb2
-rw-r--r--app/workers/ci/build_schedule_worker.rb2
-rw-r--r--app/workers/ci/build_trace_chunk_flush_worker.rb2
-rw-r--r--app/workers/ci/create_cross_project_pipeline_worker.rb1
-rw-r--r--app/workers/ci/daily_build_group_report_results_worker.rb2
-rw-r--r--app/workers/ci/delete_objects_worker.rb2
-rw-r--r--app/workers/ci/drop_pipeline_worker.rb2
-rw-r--r--app/workers/ci/initial_pipeline_process_worker.rb2
-rw-r--r--app/workers/ci/merge_requests/add_todo_when_build_fails_worker.rb2
-rw-r--r--app/workers/ci/pipeline_artifacts/coverage_report_worker.rb2
-rw-r--r--app/workers/ci/pipeline_artifacts/create_quality_report_worker.rb2
-rw-r--r--app/workers/ci/pipeline_artifacts/expire_artifacts_worker.rb2
-rw-r--r--app/workers/ci/pipeline_bridge_status_worker.rb1
-rw-r--r--app/workers/ci/pipeline_success_unlock_artifacts_worker.rb2
-rw-r--r--app/workers/ci/ref_delete_unlock_artifacts_worker.rb2
-rw-r--r--app/workers/ci/resource_groups/assign_resource_from_resource_group_worker.rb2
-rw-r--r--app/workers/ci/schedule_delete_objects_cron_worker.rb2
-rw-r--r--app/workers/ci/test_failure_history_worker.rb2
-rw-r--r--app/workers/ci_platform_metrics_update_cron_worker.rb2
-rw-r--r--app/workers/cleanup_container_repository_worker.rb2
-rw-r--r--app/workers/cluster_configure_istio_worker.rb2
-rw-r--r--app/workers/cluster_install_app_worker.rb2
-rw-r--r--app/workers/cluster_patch_app_worker.rb2
-rw-r--r--app/workers/cluster_provision_worker.rb2
-rw-r--r--app/workers/cluster_upgrade_app_worker.rb2
-rw-r--r--app/workers/cluster_wait_for_app_installation_worker.rb2
-rw-r--r--app/workers/cluster_wait_for_app_update_worker.rb2
-rw-r--r--app/workers/cluster_wait_for_ingress_ip_address_worker.rb2
-rw-r--r--app/workers/clusters/applications/activate_service_worker.rb2
-rw-r--r--app/workers/clusters/applications/check_prometheus_health_worker.rb2
-rw-r--r--app/workers/clusters/applications/deactivate_service_worker.rb2
-rw-r--r--app/workers/clusters/applications/uninstall_worker.rb2
-rw-r--r--app/workers/clusters/applications/wait_for_uninstall_app_worker.rb2
-rw-r--r--app/workers/concerns/gitlab/github_import/object_importer.rb2
-rw-r--r--app/workers/concerns/gitlab/jira_import/import_worker.rb2
-rw-r--r--app/workers/concerns/reactive_cacheable_worker.rb2
-rw-r--r--app/workers/container_expiration_policies/cleanup_container_repository_worker.rb2
-rw-r--r--app/workers/container_expiration_policy_worker.rb2
-rw-r--r--app/workers/create_commit_signature_worker.rb2
-rw-r--r--app/workers/create_note_diff_file_worker.rb2
-rw-r--r--app/workers/create_pipeline_worker.rb2
-rw-r--r--app/workers/database/batched_background_migration_worker.rb2
-rw-r--r--app/workers/delete_container_repository_worker.rb2
-rw-r--r--app/workers/delete_diff_files_worker.rb2
-rw-r--r--app/workers/delete_merged_branches_worker.rb2
-rw-r--r--app/workers/delete_stored_files_worker.rb2
-rw-r--r--app/workers/delete_user_worker.rb2
-rw-r--r--app/workers/deployments/drop_older_deployments_worker.rb2
-rw-r--r--app/workers/deployments/execute_hooks_worker.rb2
-rw-r--r--app/workers/deployments/finished_worker.rb2
-rw-r--r--app/workers/deployments/forward_deployment_worker.rb2
-rw-r--r--app/workers/deployments/link_merge_request_worker.rb2
-rw-r--r--app/workers/deployments/success_worker.rb2
-rw-r--r--app/workers/deployments/update_environment_worker.rb2
-rw-r--r--app/workers/design_management/copy_design_collection_worker.rb2
-rw-r--r--app/workers/design_management/new_version_worker.rb2
-rw-r--r--app/workers/disallow_two_factor_for_group_worker.rb2
-rw-r--r--app/workers/disallow_two_factor_for_subgroups_worker.rb2
-rw-r--r--app/workers/email_receiver_worker.rb2
-rw-r--r--app/workers/emails_on_push_worker.rb2
-rw-r--r--app/workers/environments/auto_stop_cron_worker.rb2
-rw-r--r--app/workers/error_tracking_issue_link_worker.rb2
-rw-r--r--app/workers/experiments/record_conversion_event_worker.rb2
-rw-r--r--app/workers/expire_build_artifacts_worker.rb2
-rw-r--r--app/workers/expire_build_instance_artifacts_worker.rb2
-rw-r--r--app/workers/expire_job_cache_worker.rb2
-rw-r--r--app/workers/expire_pipeline_cache_worker.rb2
-rw-r--r--app/workers/export_csv_worker.rb2
-rw-r--r--app/workers/flush_counter_increments_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/advance_stage_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/refresh_import_jid_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/finish_import_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/import_base_data_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/import_lfs_objects_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/import_notes_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/import_pull_requests_merged_by_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/import_pull_requests_reviews_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/import_pull_requests_worker.rb2
-rw-r--r--app/workers/gitlab/github_import/stage/import_repository_worker.rb2
-rw-r--r--app/workers/gitlab/import/stuck_import_job.rb2
-rw-r--r--app/workers/gitlab/jira_import/advance_stage_worker.rb2
-rw-r--r--app/workers/gitlab/jira_import/import_issue_worker.rb2
-rw-r--r--app/workers/gitlab/jira_import/stage/start_import_worker.rb2
-rw-r--r--app/workers/gitlab/phabricator_import/import_tasks_worker.rb2
-rw-r--r--app/workers/gitlab_performance_bar_stats_worker.rb2
-rw-r--r--app/workers/gitlab_shell_worker.rb2
-rw-r--r--app/workers/group_destroy_worker.rb2
-rw-r--r--app/workers/hashed_storage/migrator_worker.rb2
-rw-r--r--app/workers/hashed_storage/project_migrate_worker.rb2
-rw-r--r--app/workers/hashed_storage/project_rollback_worker.rb2
-rw-r--r--app/workers/hashed_storage/rollbacker_worker.rb2
-rw-r--r--app/workers/import_export_project_cleanup_worker.rb2
-rw-r--r--app/workers/import_issues_csv_worker.rb2
-rw-r--r--app/workers/incident_management/add_severity_system_note_worker.rb2
-rw-r--r--app/workers/incident_management/pager_duty/process_incident_worker.rb2
-rw-r--r--app/workers/incident_management/process_alert_worker.rb2
-rw-r--r--app/workers/incident_management/process_prometheus_alert_worker.rb2
-rw-r--r--app/workers/invalid_gpg_signature_update_worker.rb2
-rw-r--r--app/workers/irker_worker.rb2
-rw-r--r--app/workers/issuable_export_csv_worker.rb2
-rw-r--r--app/workers/issue_due_scheduler_worker.rb2
-rw-r--r--app/workers/issue_placement_worker.rb2
-rw-r--r--app/workers/issue_rebalancing_worker.rb2
-rw-r--r--app/workers/jira_connect/sync_branch_worker.rb2
-rw-r--r--app/workers/jira_connect/sync_builds_worker.rb2
-rw-r--r--app/workers/jira_connect/sync_deployments_worker.rb2
-rw-r--r--app/workers/jira_connect/sync_feature_flags_worker.rb2
-rw-r--r--app/workers/jira_connect/sync_merge_request_worker.rb2
-rw-r--r--app/workers/jira_connect/sync_project_worker.rb2
-rw-r--r--app/workers/mail_scheduler/issue_due_worker.rb2
-rw-r--r--app/workers/mail_scheduler/notification_service_worker.rb2
-rw-r--r--app/workers/member_invitation_reminder_emails_worker.rb2
-rw-r--r--app/workers/members_destroyer/unassign_issuables_worker.rb2
-rw-r--r--app/workers/merge_request_cleanup_refs_worker.rb2
-rw-r--r--app/workers/merge_request_mergeability_check_worker.rb2
-rw-r--r--app/workers/merge_requests/assignees_change_worker.rb2
-rw-r--r--app/workers/merge_requests/create_pipeline_worker.rb2
-rw-r--r--app/workers/merge_requests/delete_source_branch_worker.rb2
-rw-r--r--app/workers/merge_requests/handle_assignees_change_worker.rb2
-rw-r--r--app/workers/merge_requests/resolve_todos_worker.rb2
-rw-r--r--app/workers/merge_worker.rb2
-rw-r--r--app/workers/metrics/dashboard/prune_old_annotations_worker.rb2
-rw-r--r--app/workers/metrics/dashboard/schedule_annotations_prune_worker.rb2
-rw-r--r--app/workers/metrics/dashboard/sync_dashboards_worker.rb2
-rw-r--r--app/workers/migrate_external_diffs_worker.rb2
-rw-r--r--app/workers/namespaceless_project_destroy_worker.rb2
-rw-r--r--app/workers/namespaces/in_product_marketing_emails_worker.rb2
-rw-r--r--app/workers/namespaces/onboarding_issue_created_worker.rb2
-rw-r--r--app/workers/namespaces/onboarding_pipeline_created_worker.rb2
-rw-r--r--app/workers/namespaces/onboarding_progress_worker.rb2
-rw-r--r--app/workers/namespaces/onboarding_user_added_worker.rb2
-rw-r--r--app/workers/namespaces/prune_aggregation_schedules_worker.rb2
-rw-r--r--app/workers/namespaces/root_statistics_worker.rb2
-rw-r--r--app/workers/namespaces/schedule_aggregation_worker.rb2
-rw-r--r--app/workers/new_issue_worker.rb2
-rw-r--r--app/workers/new_merge_request_worker.rb2
-rw-r--r--app/workers/new_note_worker.rb2
-rw-r--r--app/workers/object_pool/create_worker.rb2
-rw-r--r--app/workers/object_pool/destroy_worker.rb2
-rw-r--r--app/workers/object_pool/join_worker.rb2
-rw-r--r--app/workers/object_pool/schedule_join_worker.rb2
-rw-r--r--app/workers/object_storage/migrate_uploads_worker.rb2
-rw-r--r--app/workers/packages/composer/cache_cleanup_worker.rb2
-rw-r--r--app/workers/packages/composer/cache_update_worker.rb2
-rw-r--r--app/workers/packages/go/sync_packages_worker.rb2
-rw-r--r--app/workers/packages/maven/metadata/sync_worker.rb2
-rw-r--r--app/workers/packages/nuget/extraction_worker.rb2
-rw-r--r--app/workers/packages/rubygems/extraction_worker.rb2
-rw-r--r--app/workers/pages_domain_removal_cron_worker.rb2
-rw-r--r--app/workers/pages_domain_ssl_renewal_cron_worker.rb2
-rw-r--r--app/workers/pages_domain_ssl_renewal_worker.rb2
-rw-r--r--app/workers/pages_domain_verification_cron_worker.rb2
-rw-r--r--app/workers/pages_domain_verification_worker.rb2
-rw-r--r--app/workers/pages_transfer_worker.rb2
-rw-r--r--app/workers/pages_update_configuration_worker.rb2
-rw-r--r--app/workers/partition_creation_worker.rb2
-rw-r--r--app/workers/personal_access_tokens/expired_notification_worker.rb2
-rw-r--r--app/workers/personal_access_tokens/expiring_worker.rb2
-rw-r--r--app/workers/pipeline_hooks_worker.rb2
-rw-r--r--app/workers/pipeline_metrics_worker.rb2
-rw-r--r--app/workers/pipeline_notification_worker.rb2
-rw-r--r--app/workers/pipeline_process_worker.rb2
-rw-r--r--app/workers/pipeline_schedule_worker.rb2
-rw-r--r--app/workers/pipeline_update_worker.rb2
-rw-r--r--app/workers/post_receive.rb2
-rw-r--r--app/workers/process_commit_worker.rb2
-rw-r--r--app/workers/project_cache_worker.rb2
-rw-r--r--app/workers/project_daily_statistics_worker.rb2
-rw-r--r--app/workers/project_destroy_worker.rb2
-rw-r--r--app/workers/project_service_worker.rb2
-rw-r--r--app/workers/projects/post_creation_worker.rb2
-rw-r--r--app/workers/projects/schedule_bulk_repository_shard_moves_worker.rb2
-rw-r--r--app/workers/projects/update_repository_storage_worker.rb2
-rw-r--r--app/workers/prometheus/create_default_alerts_worker.rb2
-rw-r--r--app/workers/propagate_integration_group_worker.rb2
-rw-r--r--app/workers/propagate_integration_inherit_descendant_worker.rb2
-rw-r--r--app/workers/propagate_integration_inherit_worker.rb2
-rw-r--r--app/workers/propagate_integration_project_worker.rb2
-rw-r--r--app/workers/propagate_integration_worker.rb2
-rw-r--r--app/workers/propagate_service_template_worker.rb2
-rw-r--r--app/workers/prune_old_events_worker.rb2
-rw-r--r--app/workers/prune_web_hook_logs_worker.rb2
-rw-r--r--app/workers/purge_dependency_proxy_cache_worker.rb2
-rw-r--r--app/workers/rebase_worker.rb2
-rw-r--r--app/workers/releases/create_evidence_worker.rb2
-rw-r--r--app/workers/releases/manage_evidence_worker.rb2
-rw-r--r--app/workers/remote_mirror_notification_worker.rb2
-rw-r--r--app/workers/remove_expired_group_links_worker.rb2
-rw-r--r--app/workers/remove_expired_members_worker.rb2
-rw-r--r--app/workers/remove_unaccepted_member_invites_worker.rb2
-rw-r--r--app/workers/remove_unreferenced_lfs_objects_worker.rb2
-rw-r--r--app/workers/repository_archive_cache_worker.rb2
-rw-r--r--app/workers/repository_check/batch_worker.rb2
-rw-r--r--app/workers/repository_check/clear_worker.rb2
-rw-r--r--app/workers/repository_check/dispatch_worker.rb2
-rw-r--r--app/workers/repository_check/single_repository_worker.rb2
-rw-r--r--app/workers/repository_fork_worker.rb2
-rw-r--r--app/workers/repository_remove_remote_worker.rb2
-rw-r--r--app/workers/requests_profiles_worker.rb2
-rw-r--r--app/workers/run_pipeline_schedule_worker.rb2
-rw-r--r--app/workers/schedule_merge_request_cleanup_refs_worker.rb2
-rw-r--r--app/workers/schedule_migrate_external_diffs_worker.rb2
-rw-r--r--app/workers/self_monitoring_project_create_worker.rb2
-rw-r--r--app/workers/self_monitoring_project_delete_worker.rb2
-rw-r--r--app/workers/service_desk_email_receiver_worker.rb2
-rw-r--r--app/workers/snippets/schedule_bulk_repository_shard_moves_worker.rb2
-rw-r--r--app/workers/snippets/update_repository_storage_worker.rb2
-rw-r--r--app/workers/ssh_keys/expired_notification_worker.rb2
-rw-r--r--app/workers/ssh_keys/expiring_soon_notification_worker.rb2
-rw-r--r--app/workers/stage_update_worker.rb2
-rw-r--r--app/workers/stuck_ci_jobs_worker.rb2
-rw-r--r--app/workers/stuck_export_jobs_worker.rb2
-rw-r--r--app/workers/stuck_merge_jobs_worker.rb2
-rw-r--r--app/workers/system_hook_push_worker.rb2
-rw-r--r--app/workers/todos_destroyer/confidential_issue_worker.rb2
-rw-r--r--app/workers/todos_destroyer/destroyed_issuable_worker.rb2
-rw-r--r--app/workers/todos_destroyer/entity_leave_worker.rb2
-rw-r--r--app/workers/todos_destroyer/group_private_worker.rb2
-rw-r--r--app/workers/todos_destroyer/private_features_worker.rb2
-rw-r--r--app/workers/todos_destroyer/project_private_worker.rb2
-rw-r--r--app/workers/trending_projects_worker.rb2
-rw-r--r--app/workers/update_container_registry_info_worker.rb2
-rw-r--r--app/workers/update_external_pull_requests_worker.rb2
-rw-r--r--app/workers/update_head_pipeline_for_merge_request_worker.rb2
-rw-r--r--app/workers/update_highest_role_worker.rb2
-rw-r--r--app/workers/update_merge_requests_worker.rb2
-rw-r--r--app/workers/update_project_statistics_worker.rb2
-rw-r--r--app/workers/upload_checksum_worker.rb2
-rw-r--r--app/workers/user_status_cleanup/batch_worker.rb2
-rw-r--r--app/workers/users/create_statistics_worker.rb2
-rw-r--r--app/workers/users/deactivate_dormant_users_worker.rb1
-rw-r--r--app/workers/wait_for_cluster_creation_worker.rb2
-rw-r--r--app/workers/web_hooks/destroy_worker.rb2
-rw-r--r--app/workers/x509_certificate_revoke_worker.rb2
-rw-r--r--app/workers/x509_issuer_crl_check_worker.rb2
-rw-r--r--changelogs/unreleased/294210-gitlab-s-automatic-elasticsearch-reindexing-should-support-retries.yml5
-rw-r--r--changelogs/unreleased/328538-default-on.yml5
-rw-r--r--changelogs/unreleased/jdsalaro-spam-check-apikey-setting-and-textbox.yml5
-rw-r--r--config/feature_flags/development/ci_reset_bridge_with_subsequent_jobs.yml8
-rw-r--r--config/feature_flags/development/pipeline_graph_layers_view.yml2
-rw-r--r--config/initializers_before_autoloader/002_sidekiq.rb3
-rw-r--r--db/migrate/20210421190157_remove_elastic_task_null_constraint_from_elastic_reindexing_subtasks.rb19
-rw-r--r--db/migrate/20210422195929_create_elastic_reindexing_slices.rb44
-rw-r--r--db/migrate/20210427125400_add_spamcheck_api_key_to_application_setting.rb13
-rw-r--r--db/schema_migrations/202104211901571
-rw-r--r--db/schema_migrations/202104221959291
-rw-r--r--db/schema_migrations/202104271254001
-rw-r--r--db/structure.sql35
-rw-r--r--doc/.vale/gitlab/SubstitutionSuggestions.yml1
-rw-r--r--doc/api/jobs.md2
-rw-r--r--doc/api/settings.md1
-rw-r--r--doc/ci/pipelines/index.md12
-rw-r--r--doc/ci/variables/README.md11
-rw-r--r--doc/development/api_graphql_styleguide.md8
-rw-r--r--doc/development/sidekiq_style_guide.md47
-rw-r--r--doc/user/analytics/index.md66
-rw-r--r--doc/user/group/settings/import_export.md2
-rw-r--r--lib/api/settings.rb1
-rw-r--r--lib/gitlab/sidekiq_config/worker.rb11
-rw-r--r--locale/gitlab.pot54
-rw-r--r--spec/features/admin/admin_settings_spec.rb1
-rw-r--r--spec/features/issues/spam_issues_spec.rb1
-rw-r--r--spec/features/snippets/spam_snippets_spec.rb1
-rw-r--r--spec/models/ci/pipeline_spec.rb66
-rw-r--r--spec/requests/api/settings_spec.rb24
-rw-r--r--spec/workers/every_sidekiq_worker_spec.rb370
300 files changed, 1325 insertions, 56 deletions
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index 2566b978bc5..940e6a6f99d 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-76c3ec82133c6c2faea451440f2bd491dda4e94f
+516e2a4a71a41e48465de590d9eaea2f8085e088
diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb
index d643223255f..051f7cf5bb8 100644
--- a/app/helpers/application_settings_helper.rb
+++ b/app/helpers/application_settings_helper.rb
@@ -302,6 +302,7 @@ module ApplicationSettingsHelper
:sourcegraph_public_only,
:spam_check_endpoint_enabled,
:spam_check_endpoint_url,
+ :spam_check_api_key,
:terminal_max_session_time,
:terms,
:throttle_authenticated_api_enabled,
diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb
index 0be511e5f6e..00b4363faa0 100644
--- a/app/models/application_setting.rb
+++ b/app/models/application_setting.rb
@@ -134,6 +134,14 @@ class ApplicationSetting < ApplicationRecord
presence: true,
if: :akismet_enabled
+ validates :spam_check_api_key,
+ length: { maximum: 2000, message: _('is too long (maximum is %{count} characters)') },
+ allow_blank: true
+
+ validates :spam_check_api_key,
+ presence: true,
+ if: :spam_check_endpoint_enabled
+
validates :unique_ips_limit_per_user,
numericality: { greater_than_or_equal_to: 1 },
presence: true,
@@ -516,6 +524,7 @@ class ApplicationSetting < ApplicationRecord
attr_encrypted :lets_encrypt_private_key, encryption_options_base_32_aes_256_gcm
attr_encrypted :eks_secret_access_key, encryption_options_base_32_aes_256_gcm
attr_encrypted :akismet_api_key, encryption_options_base_32_aes_256_gcm
+ attr_encrypted :spam_check_api_key, encryption_options_base_32_aes_256_gcm
attr_encrypted :elasticsearch_aws_secret_access_key, encryption_options_base_32_aes_256_gcm
attr_encrypted :recaptcha_private_key, encryption_options_base_32_aes_256_gcm
attr_encrypted :recaptcha_site_key, encryption_options_base_32_aes_256_gcm
diff --git a/app/models/application_setting_implementation.rb b/app/models/application_setting_implementation.rb
index 140669c0695..a38804c7367 100644
--- a/app/models/application_setting_implementation.rb
+++ b/app/models/application_setting_implementation.rb
@@ -38,6 +38,7 @@ module ApplicationSettingImplementation
admin_mode: false,
after_sign_up_text: nil,
akismet_enabled: false,
+ akismet_api_key: nil,
allow_local_requests_from_system_hooks: true,
allow_local_requests_from_web_hooks_and_services: false,
asset_proxy_enabled: false,
@@ -149,6 +150,7 @@ module ApplicationSettingImplementation
sourcegraph_url: nil,
spam_check_endpoint_enabled: false,
spam_check_endpoint_url: nil,
+ spam_check_api_key: nil,
terminal_max_session_time: 0,
throttle_authenticated_api_enabled: false,
throttle_authenticated_api_period_in_seconds: 3600,
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index c2dc9c5d859..a03bd1f1818 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -1218,11 +1218,18 @@ module Ci
# We need `base_and_ancestors` in a specific order to "break" when needed.
# If we use `find_each`, then the order is broken.
# rubocop:disable Rails/FindEach
- def reset_ancestor_bridges!
- base_and_ancestors.includes(:source_bridge).each do |pipeline|
- break unless pipeline.bridge_waiting?
+ def reset_source_bridge!(current_user)
+ if ::Feature.enabled?(:ci_reset_bridge_with_subsequent_jobs, project, default_enabled: :yaml)
+ return unless bridge_waiting?
- pipeline.source_bridge.pending!
+ source_bridge.pending!
+ Ci::AfterRequeueJobService.new(project, current_user).execute(source_bridge) # rubocop:disable CodeReuse/ServiceClass
+ else
+ base_and_ancestors.includes(:source_bridge).each do |pipeline|
+ break unless pipeline.bridge_waiting?
+
+ pipeline.source_bridge.pending!
+ end
end
end
# rubocop:enable Rails/FindEach
diff --git a/app/services/ci/after_requeue_job_service.rb b/app/services/ci/after_requeue_job_service.rb
index 3858ee9d550..2b611c857c7 100644
--- a/app/services/ci/after_requeue_job_service.rb
+++ b/app/services/ci/after_requeue_job_service.rb
@@ -4,7 +4,7 @@ module Ci
class AfterRequeueJobService < ::BaseService
def execute(processable)
process_subsequent_jobs(processable)
- reset_ancestor_bridges(processable)
+ reset_source_bridge(processable)
end
private
@@ -15,8 +15,8 @@ module Ci
end
end
- def reset_ancestor_bridges(processable)
- processable.pipeline.reset_ancestor_bridges!
+ def reset_source_bridge(processable)
+ processable.pipeline.reset_source_bridge!(current_user)
end
def process(processable)
diff --git a/app/services/ci/retry_pipeline_service.rb b/app/services/ci/retry_pipeline_service.rb
index bb8590a769c..e1b27c6f7fd 100644
--- a/app/services/ci/retry_pipeline_service.rb
+++ b/app/services/ci/retry_pipeline_service.rb
@@ -26,7 +26,7 @@ module Ci
retry_optimistic_lock(skipped, name: 'ci_retry_pipeline') { |build| build.process(current_user) }
end
- pipeline.reset_ancestor_bridges!
+ pipeline.reset_source_bridge!(current_user)
::MergeRequests::AddTodoWhenBuildFailsService
.new(project, current_user)
diff --git a/app/views/admin/application_settings/_spam.html.haml b/app/views/admin/application_settings/_spam.html.haml
index 6d8f96c505f..011bce3ca99 100644
--- a/app/views/admin/application_settings/_spam.html.haml
+++ b/app/views/admin/application_settings/_spam.html.haml
@@ -78,5 +78,9 @@
.form-group
= f.label :spam_check_endpoint_url, _('URL of the external Spam Check endpoint'), class: 'label-bold'
= f.text_field :spam_check_endpoint_url, class: 'form-control gl-form-input'
+ .form-group
+ = f.label :spam_check_api_key, _('Spam Check API Key'), class: 'gl-font-weight-bold'
+ = f.text_field :spam_check_api_key, class: 'form-control gl-form-input'
+ .form-text.text-muted= _('The API key used by GitLab for accessing the Spam Check service endpoint')
= f.submit _('Save changes'), class: "gl-button btn btn-confirm"
diff --git a/app/workers/admin_email_worker.rb b/app/workers/admin_email_worker.rb
index 8d589c03259..ea7709c649f 100644
--- a/app/workers/admin_email_worker.rb
+++ b/app/workers/admin_email_worker.rb
@@ -2,6 +2,8 @@
class AdminEmailWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/analytics/instance_statistics/count_job_trigger_worker.rb b/app/workers/analytics/instance_statistics/count_job_trigger_worker.rb
index 3ec92bc7635..7a05bb6dd26 100644
--- a/app/workers/analytics/instance_statistics/count_job_trigger_worker.rb
+++ b/app/workers/analytics/instance_statistics/count_job_trigger_worker.rb
@@ -5,6 +5,8 @@ module Analytics
# This worker will be removed in 14.0
class CountJobTriggerWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :devops_reports
diff --git a/app/workers/analytics/instance_statistics/counter_job_worker.rb b/app/workers/analytics/instance_statistics/counter_job_worker.rb
index 4beed8a3e2f..41f36291347 100644
--- a/app/workers/analytics/instance_statistics/counter_job_worker.rb
+++ b/app/workers/analytics/instance_statistics/counter_job_worker.rb
@@ -6,6 +6,8 @@ module Analytics
class CounterJobWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :devops_reports
urgency :low
diff --git a/app/workers/analytics/usage_trends/count_job_trigger_worker.rb b/app/workers/analytics/usage_trends/count_job_trigger_worker.rb
index 37f5c19d64c..8ac92a20cc8 100644
--- a/app/workers/analytics/usage_trends/count_job_trigger_worker.rb
+++ b/app/workers/analytics/usage_trends/count_job_trigger_worker.rb
@@ -5,6 +5,8 @@ module Analytics
class CountJobTriggerWorker
extend ::Gitlab::Utils::Override
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
DEFAULT_DELAY = 3.minutes.freeze
diff --git a/app/workers/analytics/usage_trends/counter_job_worker.rb b/app/workers/analytics/usage_trends/counter_job_worker.rb
index 275c6ac2de2..41f197afbb9 100644
--- a/app/workers/analytics/usage_trends/counter_job_worker.rb
+++ b/app/workers/analytics/usage_trends/counter_job_worker.rb
@@ -6,6 +6,8 @@ module Analytics
extend ::Gitlab::Utils::Override
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :devops_reports
urgency :low
diff --git a/app/workers/approve_blocked_pending_approval_users_worker.rb b/app/workers/approve_blocked_pending_approval_users_worker.rb
index 8ca61d68bfd..03bdd236cac 100644
--- a/app/workers/approve_blocked_pending_approval_users_worker.rb
+++ b/app/workers/approve_blocked_pending_approval_users_worker.rb
@@ -3,6 +3,8 @@
class ApproveBlockedPendingApprovalUsersWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
feature_category :users
diff --git a/app/workers/archive_trace_worker.rb b/app/workers/archive_trace_worker.rb
index 3ddb5686bf2..629526ec17c 100644
--- a/app/workers/archive_trace_worker.rb
+++ b/app/workers/archive_trace_worker.rb
@@ -2,6 +2,8 @@
class ArchiveTraceWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineBackgroundQueue
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/workers/authorized_keys_worker.rb b/app/workers/authorized_keys_worker.rb
index ab0e7fc4921..953f493ea2c 100644
--- a/app/workers/authorized_keys_worker.rb
+++ b/app/workers/authorized_keys_worker.rb
@@ -3,6 +3,8 @@
class AuthorizedKeysWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
PERMITTED_ACTIONS = %w[add_key remove_key].freeze
feature_category :source_code_management
diff --git a/app/workers/authorized_project_update/periodic_recalculate_worker.rb b/app/workers/authorized_project_update/periodic_recalculate_worker.rb
index 78ffdbca4d6..2f6a9c42c0c 100644
--- a/app/workers/authorized_project_update/periodic_recalculate_worker.rb
+++ b/app/workers/authorized_project_update/periodic_recalculate_worker.rb
@@ -3,6 +3,8 @@
module AuthorizedProjectUpdate
class PeriodicRecalculateWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# This worker does not perform work scoped to a context
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
diff --git a/app/workers/authorized_project_update/project_create_worker.rb b/app/workers/authorized_project_update/project_create_worker.rb
index 651849b57ec..52b740b4efe 100644
--- a/app/workers/authorized_project_update/project_create_worker.rb
+++ b/app/workers/authorized_project_update/project_create_worker.rb
@@ -4,6 +4,8 @@ module AuthorizedProjectUpdate
class ProjectCreateWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :authentication_and_authorization
urgency :low
queue_namespace :authorized_project_update
diff --git a/app/workers/authorized_project_update/project_group_link_create_worker.rb b/app/workers/authorized_project_update/project_group_link_create_worker.rb
index dd24a9602bb..d887a2ce25f 100644
--- a/app/workers/authorized_project_update/project_group_link_create_worker.rb
+++ b/app/workers/authorized_project_update/project_group_link_create_worker.rb
@@ -4,6 +4,8 @@ module AuthorizedProjectUpdate
class ProjectGroupLinkCreateWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :authentication_and_authorization
urgency :low
queue_namespace :authorized_project_update
diff --git a/app/workers/authorized_project_update/user_refresh_over_user_range_worker.rb b/app/workers/authorized_project_update/user_refresh_over_user_range_worker.rb
index 6635c322ab8..00c579784a1 100644
--- a/app/workers/authorized_project_update/user_refresh_over_user_range_worker.rb
+++ b/app/workers/authorized_project_update/user_refresh_over_user_range_worker.rb
@@ -15,6 +15,8 @@ module AuthorizedProjectUpdate
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :authentication_and_authorization
urgency :low
queue_namespace :authorized_project_update
diff --git a/app/workers/authorized_projects_worker.rb b/app/workers/authorized_projects_worker.rb
index 6e07d6d0f71..a1068117e59 100644
--- a/app/workers/authorized_projects_worker.rb
+++ b/app/workers/authorized_projects_worker.rb
@@ -2,6 +2,8 @@
class AuthorizedProjectsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
prepend WaitableWorker
feature_category :authentication_and_authorization
diff --git a/app/workers/auto_devops/disable_worker.rb b/app/workers/auto_devops/disable_worker.rb
index bae08cf9e18..43377382e82 100644
--- a/app/workers/auto_devops/disable_worker.rb
+++ b/app/workers/auto_devops/disable_worker.rb
@@ -3,6 +3,8 @@
module AutoDevops
class DisableWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include AutoDevopsQueue
def perform(pipeline_id)
diff --git a/app/workers/auto_merge_process_worker.rb b/app/workers/auto_merge_process_worker.rb
index 2599c76c900..dda0e970834 100644
--- a/app/workers/auto_merge_process_worker.rb
+++ b/app/workers/auto_merge_process_worker.rb
@@ -3,6 +3,8 @@
class AutoMergeProcessWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :auto_merge
feature_category :continuous_delivery
worker_resource_boundary :cpu
diff --git a/app/workers/background_migration_worker.rb b/app/workers/background_migration_worker.rb
index 70c4ad53726..6b1f10f75b8 100644
--- a/app/workers/background_migration_worker.rb
+++ b/app/workers/background_migration_worker.rb
@@ -3,6 +3,8 @@
class BackgroundMigrationWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :database
urgency :throttled
loggable_arguments 0, 1
diff --git a/app/workers/build_finished_worker.rb b/app/workers/build_finished_worker.rb
index b5071d93adc..6cab70405d2 100644
--- a/app/workers/build_finished_worker.rb
+++ b/app/workers/build_finished_worker.rb
@@ -2,6 +2,8 @@
class BuildFinishedWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/build_hooks_worker.rb b/app/workers/build_hooks_worker.rb
index 5e05063f058..c30771c03f1 100644
--- a/app/workers/build_hooks_worker.rb
+++ b/app/workers/build_hooks_worker.rb
@@ -2,6 +2,8 @@
class BuildHooksWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_hooks
diff --git a/app/workers/build_queue_worker.rb b/app/workers/build_queue_worker.rb
index b71afbbeb8f..e9bb2d88a81 100644
--- a/app/workers/build_queue_worker.rb
+++ b/app/workers/build_queue_worker.rb
@@ -2,6 +2,8 @@
class BuildQueueWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/build_success_worker.rb b/app/workers/build_success_worker.rb
index e4a2dd500cc..531e7e5a5fe 100644
--- a/app/workers/build_success_worker.rb
+++ b/app/workers/build_success_worker.rb
@@ -2,6 +2,8 @@
class BuildSuccessWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/chaos/cpu_spin_worker.rb b/app/workers/chaos/cpu_spin_worker.rb
index 0b565e0d49c..f8900abc764 100644
--- a/app/workers/chaos/cpu_spin_worker.rb
+++ b/app/workers/chaos/cpu_spin_worker.rb
@@ -3,6 +3,8 @@
module Chaos
class CpuSpinWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ChaosQueue
def perform(duration_s)
diff --git a/app/workers/chaos/db_spin_worker.rb b/app/workers/chaos/db_spin_worker.rb
index 099660d440c..9b5d06414a9 100644
--- a/app/workers/chaos/db_spin_worker.rb
+++ b/app/workers/chaos/db_spin_worker.rb
@@ -3,6 +3,8 @@
module Chaos
class DbSpinWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ChaosQueue
def perform(duration_s, interval_s)
diff --git a/app/workers/chaos/leak_mem_worker.rb b/app/workers/chaos/leak_mem_worker.rb
index b77d1a20541..788009962db 100644
--- a/app/workers/chaos/leak_mem_worker.rb
+++ b/app/workers/chaos/leak_mem_worker.rb
@@ -3,6 +3,8 @@
module Chaos
class LeakMemWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ChaosQueue
def perform(memory_mb, duration_s)
diff --git a/app/workers/chaos/sleep_worker.rb b/app/workers/chaos/sleep_worker.rb
index 6887258e961..b9ff5546384 100644
--- a/app/workers/chaos/sleep_worker.rb
+++ b/app/workers/chaos/sleep_worker.rb
@@ -3,6 +3,8 @@
module Chaos
class SleepWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ChaosQueue
def perform(duration_s)
diff --git a/app/workers/ci/archive_traces_cron_worker.rb b/app/workers/ci/archive_traces_cron_worker.rb
index 0171c1d482d..c748bc33ada 100644
--- a/app/workers/ci/archive_traces_cron_worker.rb
+++ b/app/workers/ci/archive_traces_cron_worker.rb
@@ -3,6 +3,8 @@
module Ci
class ArchiveTracesCronWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :continuous_integration
diff --git a/app/workers/ci/build_prepare_worker.rb b/app/workers/ci/build_prepare_worker.rb
index 7f640633070..f30e9d3b885 100644
--- a/app/workers/ci/build_prepare_worker.rb
+++ b/app/workers/ci/build_prepare_worker.rb
@@ -3,6 +3,8 @@
module Ci
class BuildPrepareWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/ci/build_schedule_worker.rb b/app/workers/ci/build_schedule_worker.rb
index 9231b40978d..570f5f28c3d 100644
--- a/app/workers/ci/build_schedule_worker.rb
+++ b/app/workers/ci/build_schedule_worker.rb
@@ -3,6 +3,8 @@
module Ci
class BuildScheduleWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/ci/build_trace_chunk_flush_worker.rb b/app/workers/ci/build_trace_chunk_flush_worker.rb
index a63b12c0d03..1e0da73e08d 100644
--- a/app/workers/ci/build_trace_chunk_flush_worker.rb
+++ b/app/workers/ci/build_trace_chunk_flush_worker.rb
@@ -3,6 +3,8 @@
module Ci
class BuildTraceChunkFlushWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineBackgroundQueue
deduplicate :until_executed
diff --git a/app/workers/ci/create_cross_project_pipeline_worker.rb b/app/workers/ci/create_cross_project_pipeline_worker.rb
index 679574d9f60..4881ee12e5c 100644
--- a/app/workers/ci/create_cross_project_pipeline_worker.rb
+++ b/app/workers/ci/create_cross_project_pipeline_worker.rb
@@ -5,6 +5,7 @@ module Ci
include ::ApplicationWorker
include ::PipelineQueue
+ sidekiq_options retry: 3
worker_resource_boundary :cpu
def perform(bridge_id)
diff --git a/app/workers/ci/daily_build_group_report_results_worker.rb b/app/workers/ci/daily_build_group_report_results_worker.rb
index 687cadc6366..b38bef3bcf8 100644
--- a/app/workers/ci/daily_build_group_report_results_worker.rb
+++ b/app/workers/ci/daily_build_group_report_results_worker.rb
@@ -3,6 +3,8 @@
module Ci
class DailyBuildGroupReportResultsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineBackgroundQueue
feature_category :code_testing
diff --git a/app/workers/ci/delete_objects_worker.rb b/app/workers/ci/delete_objects_worker.rb
index d845ad61358..1d6c6820ab7 100644
--- a/app/workers/ci/delete_objects_worker.rb
+++ b/app/workers/ci/delete_objects_worker.rb
@@ -3,6 +3,8 @@
module Ci
class DeleteObjectsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include LimitedCapacity::Worker
feature_category :continuous_integration
diff --git a/app/workers/ci/drop_pipeline_worker.rb b/app/workers/ci/drop_pipeline_worker.rb
index d19157a47e8..818e954818e 100644
--- a/app/workers/ci/drop_pipeline_worker.rb
+++ b/app/workers/ci/drop_pipeline_worker.rb
@@ -3,6 +3,8 @@
module Ci
class DropPipelineWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
idempotent!
diff --git a/app/workers/ci/initial_pipeline_process_worker.rb b/app/workers/ci/initial_pipeline_process_worker.rb
index f59726c87fb..4dace43298d 100644
--- a/app/workers/ci/initial_pipeline_process_worker.rb
+++ b/app/workers/ci/initial_pipeline_process_worker.rb
@@ -3,6 +3,8 @@
module Ci
class InitialPipelineProcessWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/ci/merge_requests/add_todo_when_build_fails_worker.rb b/app/workers/ci/merge_requests/add_todo_when_build_fails_worker.rb
index d5e097dc2b5..a088fc5cbf9 100644
--- a/app/workers/ci/merge_requests/add_todo_when_build_fails_worker.rb
+++ b/app/workers/ci/merge_requests/add_todo_when_build_fails_worker.rb
@@ -3,6 +3,8 @@ module Ci
module MergeRequests
class AddTodoWhenBuildFailsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
urgency :low
diff --git a/app/workers/ci/pipeline_artifacts/coverage_report_worker.rb b/app/workers/ci/pipeline_artifacts/coverage_report_worker.rb
index 4de56f54f44..ec0cb69d0c7 100644
--- a/app/workers/ci/pipeline_artifacts/coverage_report_worker.rb
+++ b/app/workers/ci/pipeline_artifacts/coverage_report_worker.rb
@@ -4,6 +4,8 @@ module Ci
module PipelineArtifacts
class CoverageReportWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineBackgroundQueue
feature_category :code_testing
diff --git a/app/workers/ci/pipeline_artifacts/create_quality_report_worker.rb b/app/workers/ci/pipeline_artifacts/create_quality_report_worker.rb
index 810106e8d9c..7b99faa1ccb 100644
--- a/app/workers/ci/pipeline_artifacts/create_quality_report_worker.rb
+++ b/app/workers/ci/pipeline_artifacts/create_quality_report_worker.rb
@@ -5,6 +5,8 @@ module Ci
class CreateQualityReportWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :pipeline_background
feature_category :code_testing
diff --git a/app/workers/ci/pipeline_artifacts/expire_artifacts_worker.rb b/app/workers/ci/pipeline_artifacts/expire_artifacts_worker.rb
index fff979d95a9..12d69c44413 100644
--- a/app/workers/ci/pipeline_artifacts/expire_artifacts_worker.rb
+++ b/app/workers/ci/pipeline_artifacts/expire_artifacts_worker.rb
@@ -4,6 +4,8 @@ module Ci
module PipelineArtifacts
class ExpireArtifactsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/ci/pipeline_bridge_status_worker.rb b/app/workers/ci/pipeline_bridge_status_worker.rb
index 3f92f4561e0..3630331b41d 100644
--- a/app/workers/ci/pipeline_bridge_status_worker.rb
+++ b/app/workers/ci/pipeline_bridge_status_worker.rb
@@ -5,6 +5,7 @@ module Ci
include ::ApplicationWorker
include ::PipelineQueue
+ sidekiq_options retry: 3
urgency :high
worker_resource_boundary :cpu
diff --git a/app/workers/ci/pipeline_success_unlock_artifacts_worker.rb b/app/workers/ci/pipeline_success_unlock_artifacts_worker.rb
index bc31876aa1d..b0921f6e10b 100644
--- a/app/workers/ci/pipeline_success_unlock_artifacts_worker.rb
+++ b/app/workers/ci/pipeline_success_unlock_artifacts_worker.rb
@@ -3,6 +3,8 @@
module Ci
class PipelineSuccessUnlockArtifactsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineBackgroundQueue
idempotent!
diff --git a/app/workers/ci/ref_delete_unlock_artifacts_worker.rb b/app/workers/ci/ref_delete_unlock_artifacts_worker.rb
index aaa77efbb74..d20c501100e 100644
--- a/app/workers/ci/ref_delete_unlock_artifacts_worker.rb
+++ b/app/workers/ci/ref_delete_unlock_artifacts_worker.rb
@@ -3,6 +3,8 @@
module Ci
class RefDeleteUnlockArtifactsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineBackgroundQueue
idempotent!
diff --git a/app/workers/ci/resource_groups/assign_resource_from_resource_group_worker.rb b/app/workers/ci/resource_groups/assign_resource_from_resource_group_worker.rb
index 8063e34a1b8..15ed89fd00e 100644
--- a/app/workers/ci/resource_groups/assign_resource_from_resource_group_worker.rb
+++ b/app/workers/ci/resource_groups/assign_resource_from_resource_group_worker.rb
@@ -4,6 +4,8 @@ module Ci
module ResourceGroups
class AssignResourceFromResourceGroupWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/ci/schedule_delete_objects_cron_worker.rb b/app/workers/ci/schedule_delete_objects_cron_worker.rb
index fa0b15deb56..9fb46820073 100644
--- a/app/workers/ci/schedule_delete_objects_cron_worker.rb
+++ b/app/workers/ci/schedule_delete_objects_cron_worker.rb
@@ -3,6 +3,8 @@
module Ci
class ScheduleDeleteObjectsCronWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/ci/test_failure_history_worker.rb b/app/workers/ci/test_failure_history_worker.rb
index e1562cb3836..987eb2a177b 100644
--- a/app/workers/ci/test_failure_history_worker.rb
+++ b/app/workers/ci/test_failure_history_worker.rb
@@ -3,6 +3,8 @@
module Ci
class TestFailureHistoryWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineBackgroundQueue
idempotent!
diff --git a/app/workers/ci_platform_metrics_update_cron_worker.rb b/app/workers/ci_platform_metrics_update_cron_worker.rb
index ec1fc26fad3..05af0a0a73b 100644
--- a/app/workers/ci_platform_metrics_update_cron_worker.rb
+++ b/app/workers/ci_platform_metrics_update_cron_worker.rb
@@ -3,6 +3,8 @@
class CiPlatformMetricsUpdateCronWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
# This worker does not perform work scoped to a context
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
diff --git a/app/workers/cleanup_container_repository_worker.rb b/app/workers/cleanup_container_repository_worker.rb
index 1cac2858156..a8de8efbce6 100644
--- a/app/workers/cleanup_container_repository_worker.rb
+++ b/app/workers/cleanup_container_repository_worker.rb
@@ -3,6 +3,8 @@
class CleanupContainerRepositoryWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :container_repository
feature_category :container_registry
urgency :low
diff --git a/app/workers/cluster_configure_istio_worker.rb b/app/workers/cluster_configure_istio_worker.rb
index ec6bdfbd6b6..07c032da838 100644
--- a/app/workers/cluster_configure_istio_worker.rb
+++ b/app/workers/cluster_configure_istio_worker.rb
@@ -2,6 +2,8 @@
class ClusterConfigureIstioWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
worker_has_external_dependencies!
diff --git a/app/workers/cluster_install_app_worker.rb b/app/workers/cluster_install_app_worker.rb
index f3da4d5c4bb..71374de19f5 100644
--- a/app/workers/cluster_install_app_worker.rb
+++ b/app/workers/cluster_install_app_worker.rb
@@ -2,6 +2,8 @@
class ClusterInstallAppWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
include ClusterApplications
diff --git a/app/workers/cluster_patch_app_worker.rb b/app/workers/cluster_patch_app_worker.rb
index b0393809802..674a565f7f7 100644
--- a/app/workers/cluster_patch_app_worker.rb
+++ b/app/workers/cluster_patch_app_worker.rb
@@ -2,6 +2,8 @@
class ClusterPatchAppWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
include ClusterApplications
diff --git a/app/workers/cluster_provision_worker.rb b/app/workers/cluster_provision_worker.rb
index cb750f3021e..142ad84f746 100644
--- a/app/workers/cluster_provision_worker.rb
+++ b/app/workers/cluster_provision_worker.rb
@@ -2,6 +2,8 @@
class ClusterProvisionWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
worker_has_external_dependencies!
diff --git a/app/workers/cluster_upgrade_app_worker.rb b/app/workers/cluster_upgrade_app_worker.rb
index d4650ab3a85..909ada2044f 100644
--- a/app/workers/cluster_upgrade_app_worker.rb
+++ b/app/workers/cluster_upgrade_app_worker.rb
@@ -2,6 +2,8 @@
class ClusterUpgradeAppWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
include ClusterApplications
diff --git a/app/workers/cluster_wait_for_app_installation_worker.rb b/app/workers/cluster_wait_for_app_installation_worker.rb
index 4bc29807ea4..19e33cd17b0 100644
--- a/app/workers/cluster_wait_for_app_installation_worker.rb
+++ b/app/workers/cluster_wait_for_app_installation_worker.rb
@@ -2,6 +2,8 @@
class ClusterWaitForAppInstallationWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
include ClusterApplications
diff --git a/app/workers/cluster_wait_for_app_update_worker.rb b/app/workers/cluster_wait_for_app_update_worker.rb
index c0a11eb93a7..185959884a1 100644
--- a/app/workers/cluster_wait_for_app_update_worker.rb
+++ b/app/workers/cluster_wait_for_app_update_worker.rb
@@ -2,6 +2,8 @@
class ClusterWaitForAppUpdateWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
include ClusterApplications
diff --git a/app/workers/cluster_wait_for_ingress_ip_address_worker.rb b/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
index fa46135d279..4a010c749a2 100644
--- a/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
+++ b/app/workers/cluster_wait_for_ingress_ip_address_worker.rb
@@ -2,6 +2,8 @@
class ClusterWaitForIngressIpAddressWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
include ClusterApplications
diff --git a/app/workers/clusters/applications/activate_service_worker.rb b/app/workers/clusters/applications/activate_service_worker.rb
index c92f978a7d2..d4d0ae96e03 100644
--- a/app/workers/clusters/applications/activate_service_worker.rb
+++ b/app/workers/clusters/applications/activate_service_worker.rb
@@ -4,6 +4,8 @@ module Clusters
module Applications
class ActivateServiceWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
loggable_arguments 1
diff --git a/app/workers/clusters/applications/check_prometheus_health_worker.rb b/app/workers/clusters/applications/check_prometheus_health_worker.rb
index cf9534c9a78..4db7314cbc0 100644
--- a/app/workers/clusters/applications/check_prometheus_health_worker.rb
+++ b/app/workers/clusters/applications/check_prometheus_health_worker.rb
@@ -4,6 +4,8 @@ module Clusters
module Applications
class CheckPrometheusHealthWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/clusters/applications/deactivate_service_worker.rb b/app/workers/clusters/applications/deactivate_service_worker.rb
index 4d103bb0edc..935b455a4fc 100644
--- a/app/workers/clusters/applications/deactivate_service_worker.rb
+++ b/app/workers/clusters/applications/deactivate_service_worker.rb
@@ -4,6 +4,8 @@ module Clusters
module Applications
class DeactivateServiceWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
loggable_arguments 1
diff --git a/app/workers/clusters/applications/uninstall_worker.rb b/app/workers/clusters/applications/uninstall_worker.rb
index a9307931b59..3a4564ca7ab 100644
--- a/app/workers/clusters/applications/uninstall_worker.rb
+++ b/app/workers/clusters/applications/uninstall_worker.rb
@@ -4,6 +4,8 @@ module Clusters
module Applications
class UninstallWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
include ClusterApplications
diff --git a/app/workers/clusters/applications/wait_for_uninstall_app_worker.rb b/app/workers/clusters/applications/wait_for_uninstall_app_worker.rb
index dc842788374..18801ad7e64 100644
--- a/app/workers/clusters/applications/wait_for_uninstall_app_worker.rb
+++ b/app/workers/clusters/applications/wait_for_uninstall_app_worker.rb
@@ -4,6 +4,8 @@ module Clusters
module Applications
class WaitForUninstallAppWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
include ClusterApplications
diff --git a/app/workers/concerns/gitlab/github_import/object_importer.rb b/app/workers/concerns/gitlab/github_import/object_importer.rb
index 1845d004728..7af2ed3fa14 100644
--- a/app/workers/concerns/gitlab/github_import/object_importer.rb
+++ b/app/workers/concerns/gitlab/github_import/object_importer.rb
@@ -9,6 +9,8 @@ module Gitlab
included do
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include ReschedulingMethods
include Gitlab::NotifyUponDeath
diff --git a/app/workers/concerns/gitlab/jira_import/import_worker.rb b/app/workers/concerns/gitlab/jira_import/import_worker.rb
index fdc6e64bbaa..107b6e2e9be 100644
--- a/app/workers/concerns/gitlab/jira_import/import_worker.rb
+++ b/app/workers/concerns/gitlab/jira_import/import_worker.rb
@@ -7,6 +7,8 @@ module Gitlab
included do
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ProjectImportOptions
include Gitlab::JiraImport::QueueOptions
end
diff --git a/app/workers/concerns/reactive_cacheable_worker.rb b/app/workers/concerns/reactive_cacheable_worker.rb
index 9e882c8ac7a..78fcf8087c2 100644
--- a/app/workers/concerns/reactive_cacheable_worker.rb
+++ b/app/workers/concerns/reactive_cacheable_worker.rb
@@ -6,6 +6,8 @@ module ReactiveCacheableWorker
included do
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category_not_owned!
loggable_arguments 0
diff --git a/app/workers/container_expiration_policies/cleanup_container_repository_worker.rb b/app/workers/container_expiration_policies/cleanup_container_repository_worker.rb
index 1868fe607c4..31251b6dbec 100644
--- a/app/workers/container_expiration_policies/cleanup_container_repository_worker.rb
+++ b/app/workers/container_expiration_policies/cleanup_container_repository_worker.rb
@@ -3,6 +3,8 @@
module ContainerExpirationPolicies
class CleanupContainerRepositoryWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include LimitedCapacity::Worker
include Gitlab::Utils::StrongMemoize
diff --git a/app/workers/container_expiration_policy_worker.rb b/app/workers/container_expiration_policy_worker.rb
index 5ca89179099..dec13485d13 100644
--- a/app/workers/container_expiration_policy_worker.rb
+++ b/app/workers/container_expiration_policy_worker.rb
@@ -2,6 +2,8 @@
class ContainerExpirationPolicyWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
include ExclusiveLeaseGuard
diff --git a/app/workers/create_commit_signature_worker.rb b/app/workers/create_commit_signature_worker.rb
index 8999e1acf4f..0ba2cc41e99 100644
--- a/app/workers/create_commit_signature_worker.rb
+++ b/app/workers/create_commit_signature_worker.rb
@@ -3,6 +3,8 @@
class CreateCommitSignatureWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
weight 2
idempotent!
diff --git a/app/workers/create_note_diff_file_worker.rb b/app/workers/create_note_diff_file_worker.rb
index 06790cc89d9..0af203fc3bd 100644
--- a/app/workers/create_note_diff_file_worker.rb
+++ b/app/workers/create_note_diff_file_worker.rb
@@ -3,6 +3,8 @@
class CreateNoteDiffFileWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :code_review
def perform(diff_note_id)
diff --git a/app/workers/create_pipeline_worker.rb b/app/workers/create_pipeline_worker.rb
index 68fe44d01ce..a9072e1661f 100644
--- a/app/workers/create_pipeline_worker.rb
+++ b/app/workers/create_pipeline_worker.rb
@@ -2,6 +2,8 @@
class CreatePipelineWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_creation
diff --git a/app/workers/database/batched_background_migration_worker.rb b/app/workers/database/batched_background_migration_worker.rb
index 039b45a497f..a2cf69d0e75 100644
--- a/app/workers/database/batched_background_migration_worker.rb
+++ b/app/workers/database/batched_background_migration_worker.rb
@@ -3,6 +3,8 @@
module Database
class BatchedBackgroundMigrationWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :database
diff --git a/app/workers/delete_container_repository_worker.rb b/app/workers/delete_container_repository_worker.rb
index dbfc273a5ce..f39f8bf44a4 100644
--- a/app/workers/delete_container_repository_worker.rb
+++ b/app/workers/delete_container_repository_worker.rb
@@ -2,6 +2,8 @@
class DeleteContainerRepositoryWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExclusiveLeaseGuard
queue_namespace :container_repository
diff --git a/app/workers/delete_diff_files_worker.rb b/app/workers/delete_diff_files_worker.rb
index 289df8873ec..46dac5d8d39 100644
--- a/app/workers/delete_diff_files_worker.rb
+++ b/app/workers/delete_diff_files_worker.rb
@@ -3,6 +3,8 @@
class DeleteDiffFilesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :code_review
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/workers/delete_merged_branches_worker.rb b/app/workers/delete_merged_branches_worker.rb
index 8d7026e2d1e..c7e1a4da965 100644
--- a/app/workers/delete_merged_branches_worker.rb
+++ b/app/workers/delete_merged_branches_worker.rb
@@ -3,6 +3,8 @@
class DeleteMergedBranchesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
def perform(project_id, user_id)
diff --git a/app/workers/delete_stored_files_worker.rb b/app/workers/delete_stored_files_worker.rb
index 9cf5631b7d8..75113b4787c 100644
--- a/app/workers/delete_stored_files_worker.rb
+++ b/app/workers/delete_stored_files_worker.rb
@@ -3,6 +3,8 @@
class DeleteStoredFilesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category_not_owned!
loggable_arguments 0
diff --git a/app/workers/delete_user_worker.rb b/app/workers/delete_user_worker.rb
index ed2e00f1241..f1b9f859ce6 100644
--- a/app/workers/delete_user_worker.rb
+++ b/app/workers/delete_user_worker.rb
@@ -3,6 +3,8 @@
class DeleteUserWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :authentication_and_authorization
loggable_arguments 2
diff --git a/app/workers/deployments/drop_older_deployments_worker.rb b/app/workers/deployments/drop_older_deployments_worker.rb
index d6cd92c1da4..d1c5a35dcf8 100644
--- a/app/workers/deployments/drop_older_deployments_worker.rb
+++ b/app/workers/deployments/drop_older_deployments_worker.rb
@@ -4,6 +4,8 @@ module Deployments
class DropOlderDeploymentsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :deployment
feature_category :continuous_delivery
diff --git a/app/workers/deployments/execute_hooks_worker.rb b/app/workers/deployments/execute_hooks_worker.rb
index ac1d661a855..3046aa28e20 100644
--- a/app/workers/deployments/execute_hooks_worker.rb
+++ b/app/workers/deployments/execute_hooks_worker.rb
@@ -5,6 +5,8 @@ module Deployments
class ExecuteHooksWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :deployment
feature_category :continuous_delivery
worker_resource_boundary :cpu
diff --git a/app/workers/deployments/finished_worker.rb b/app/workers/deployments/finished_worker.rb
index 0252c7ff8f7..3de06c381cd 100644
--- a/app/workers/deployments/finished_worker.rb
+++ b/app/workers/deployments/finished_worker.rb
@@ -6,6 +6,8 @@ module Deployments
class FinishedWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :deployment
feature_category :continuous_delivery
worker_resource_boundary :cpu
diff --git a/app/workers/deployments/forward_deployment_worker.rb b/app/workers/deployments/forward_deployment_worker.rb
index dd01fcbbafe..946945051ba 100644
--- a/app/workers/deployments/forward_deployment_worker.rb
+++ b/app/workers/deployments/forward_deployment_worker.rb
@@ -6,6 +6,8 @@ module Deployments
class ForwardDeploymentWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :deployment
feature_category :continuous_delivery
diff --git a/app/workers/deployments/link_merge_request_worker.rb b/app/workers/deployments/link_merge_request_worker.rb
index 4723691a0bb..70947b3f731 100644
--- a/app/workers/deployments/link_merge_request_worker.rb
+++ b/app/workers/deployments/link_merge_request_worker.rb
@@ -4,6 +4,8 @@ module Deployments
class LinkMergeRequestWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :deployment
idempotent!
feature_category :continuous_delivery
diff --git a/app/workers/deployments/success_worker.rb b/app/workers/deployments/success_worker.rb
index b72b107985b..eab331433e8 100644
--- a/app/workers/deployments/success_worker.rb
+++ b/app/workers/deployments/success_worker.rb
@@ -6,6 +6,8 @@ module Deployments
class SuccessWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :deployment
feature_category :continuous_delivery
worker_resource_boundary :cpu
diff --git a/app/workers/deployments/update_environment_worker.rb b/app/workers/deployments/update_environment_worker.rb
index 2381f9926bc..5c71a13064e 100644
--- a/app/workers/deployments/update_environment_worker.rb
+++ b/app/workers/deployments/update_environment_worker.rb
@@ -4,6 +4,8 @@ module Deployments
class UpdateEnvironmentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :deployment
idempotent!
feature_category :continuous_delivery
diff --git a/app/workers/design_management/copy_design_collection_worker.rb b/app/workers/design_management/copy_design_collection_worker.rb
index 0a6e23fe9da..b282f3a89b5 100644
--- a/app/workers/design_management/copy_design_collection_worker.rb
+++ b/app/workers/design_management/copy_design_collection_worker.rb
@@ -4,6 +4,8 @@ module DesignManagement
class CopyDesignCollectionWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :design_management
idempotent!
urgency :low
diff --git a/app/workers/design_management/new_version_worker.rb b/app/workers/design_management/new_version_worker.rb
index 4fbf2067be4..eee96858c34 100644
--- a/app/workers/design_management/new_version_worker.rb
+++ b/app/workers/design_management/new_version_worker.rb
@@ -4,6 +4,8 @@ module DesignManagement
class NewVersionWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :design_management
# Declare this worker as memory bound due to
# `GenerateImageVersionsService` resizing designs
diff --git a/app/workers/disallow_two_factor_for_group_worker.rb b/app/workers/disallow_two_factor_for_group_worker.rb
index b3cc7a44672..0c06d066d53 100644
--- a/app/workers/disallow_two_factor_for_group_worker.rb
+++ b/app/workers/disallow_two_factor_for_group_worker.rb
@@ -2,6 +2,8 @@
class DisallowTwoFactorForGroupWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExceptionBacktrace
feature_category :subgroups
diff --git a/app/workers/disallow_two_factor_for_subgroups_worker.rb b/app/workers/disallow_two_factor_for_subgroups_worker.rb
index 1ca227030e2..2563e6c7039 100644
--- a/app/workers/disallow_two_factor_for_subgroups_worker.rb
+++ b/app/workers/disallow_two_factor_for_subgroups_worker.rb
@@ -2,6 +2,8 @@
class DisallowTwoFactorForSubgroupsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExceptionBacktrace
INTERVAL = 2.seconds.to_i
diff --git a/app/workers/email_receiver_worker.rb b/app/workers/email_receiver_worker.rb
index 220611686fb..618054e8350 100644
--- a/app/workers/email_receiver_worker.rb
+++ b/app/workers/email_receiver_worker.rb
@@ -3,6 +3,8 @@
class EmailReceiverWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :issue_tracking
urgency :high
weight 2
diff --git a/app/workers/emails_on_push_worker.rb b/app/workers/emails_on_push_worker.rb
index 978b65802dd..96acb4be77c 100644
--- a/app/workers/emails_on_push_worker.rb
+++ b/app/workers/emails_on_push_worker.rb
@@ -3,6 +3,8 @@
class EmailsOnPushWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
attr_reader :email, :skip_premailer
feature_category :source_code_management
diff --git a/app/workers/environments/auto_stop_cron_worker.rb b/app/workers/environments/auto_stop_cron_worker.rb
index ada52d3402d..64028839df1 100644
--- a/app/workers/environments/auto_stop_cron_worker.rb
+++ b/app/workers/environments/auto_stop_cron_worker.rb
@@ -3,6 +3,8 @@
module Environments
class AutoStopCronWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :continuous_delivery
diff --git a/app/workers/error_tracking_issue_link_worker.rb b/app/workers/error_tracking_issue_link_worker.rb
index 4ad80d57f6b..6c5a96822a6 100644
--- a/app/workers/error_tracking_issue_link_worker.rb
+++ b/app/workers/error_tracking_issue_link_worker.rb
@@ -7,6 +7,8 @@
# until the prior link is deleted.
class ErrorTrackingIssueLinkWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExclusiveLeaseGuard
include Gitlab::Utils::StrongMemoize
diff --git a/app/workers/experiments/record_conversion_event_worker.rb b/app/workers/experiments/record_conversion_event_worker.rb
index e38ce7b3d01..a49cd7c3484 100644
--- a/app/workers/experiments/record_conversion_event_worker.rb
+++ b/app/workers/experiments/record_conversion_event_worker.rb
@@ -4,6 +4,8 @@ module Experiments
class RecordConversionEventWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :users
urgency :low
diff --git a/app/workers/expire_build_artifacts_worker.rb b/app/workers/expire_build_artifacts_worker.rb
index 50fdd046491..a9fa94ef301 100644
--- a/app/workers/expire_build_artifacts_worker.rb
+++ b/app/workers/expire_build_artifacts_worker.rb
@@ -2,6 +2,8 @@
class ExpireBuildArtifactsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/expire_build_instance_artifacts_worker.rb b/app/workers/expire_build_instance_artifacts_worker.rb
index e6cd60a3e47..3e6e81867bd 100644
--- a/app/workers/expire_build_instance_artifacts_worker.rb
+++ b/app/workers/expire_build_instance_artifacts_worker.rb
@@ -3,6 +3,8 @@
class ExpireBuildInstanceArtifactsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :continuous_integration
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/workers/expire_job_cache_worker.rb b/app/workers/expire_job_cache_worker.rb
index 48bb1160ae8..074c35997f6 100644
--- a/app/workers/expire_job_cache_worker.rb
+++ b/app/workers/expire_job_cache_worker.rb
@@ -2,6 +2,8 @@
class ExpireJobCacheWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_cache
diff --git a/app/workers/expire_pipeline_cache_worker.rb b/app/workers/expire_pipeline_cache_worker.rb
index cbea46cdccd..3c48c4ba3cd 100644
--- a/app/workers/expire_pipeline_cache_worker.rb
+++ b/app/workers/expire_pipeline_cache_worker.rb
@@ -2,6 +2,8 @@
class ExpirePipelineCacheWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_cache
diff --git a/app/workers/export_csv_worker.rb b/app/workers/export_csv_worker.rb
index f2da381a34a..a2ad0cb92fd 100644
--- a/app/workers/export_csv_worker.rb
+++ b/app/workers/export_csv_worker.rb
@@ -3,6 +3,8 @@
class ExportCsvWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :issue_tracking
worker_resource_boundary :cpu
loggable_arguments 2
diff --git a/app/workers/flush_counter_increments_worker.rb b/app/workers/flush_counter_increments_worker.rb
index b7e3c0c134d..921e134484b 100644
--- a/app/workers/flush_counter_increments_worker.rb
+++ b/app/workers/flush_counter_increments_worker.rb
@@ -8,6 +8,8 @@
class FlushCounterIncrementsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category_not_owned!
urgency :low
deduplicate :until_executing, including_scheduled: true
diff --git a/app/workers/gitlab/github_import/advance_stage_worker.rb b/app/workers/gitlab/github_import/advance_stage_worker.rb
index af406b32415..f25296f0461 100644
--- a/app/workers/gitlab/github_import/advance_stage_worker.rb
+++ b/app/workers/gitlab/github_import/advance_stage_worker.rb
@@ -8,6 +8,8 @@ module Gitlab
# stage.
class AdvanceStageWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ::Gitlab::Import::AdvanceStage
sidekiq_options dead: false
diff --git a/app/workers/gitlab/github_import/refresh_import_jid_worker.rb b/app/workers/gitlab/github_import/refresh_import_jid_worker.rb
index 0ddd893d0d1..1c769921ab3 100644
--- a/app/workers/gitlab/github_import/refresh_import_jid_worker.rb
+++ b/app/workers/gitlab/github_import/refresh_import_jid_worker.rb
@@ -4,6 +4,8 @@ module Gitlab
module GithubImport
class RefreshImportJidWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
# The interval to schedule new instances of this job at.
diff --git a/app/workers/gitlab/github_import/stage/finish_import_worker.rb b/app/workers/gitlab/github_import/stage/finish_import_worker.rb
index 058e1a0853d..f5980cc248e 100644
--- a/app/workers/gitlab/github_import/stage/finish_import_worker.rb
+++ b/app/workers/gitlab/github_import/stage/finish_import_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class FinishImportWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/github_import/stage/import_base_data_worker.rb b/app/workers/gitlab/github_import/stage/import_base_data_worker.rb
index 202bb335ca1..7ca23ecad20 100644
--- a/app/workers/gitlab/github_import/stage/import_base_data_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_base_data_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class ImportBaseDataWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb b/app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb
index 486057804b4..d66698277b0 100644
--- a/app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_issues_and_diff_notes_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class ImportIssuesAndDiffNotesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/github_import/stage/import_lfs_objects_worker.rb b/app/workers/gitlab/github_import/stage/import_lfs_objects_worker.rb
index de2a7f9fc29..2a66a08d534 100644
--- a/app/workers/gitlab/github_import/stage/import_lfs_objects_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_lfs_objects_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class ImportLfsObjectsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/github_import/stage/import_notes_worker.rb b/app/workers/gitlab/github_import/stage/import_notes_worker.rb
index e1da26a9d48..873e389fca6 100644
--- a/app/workers/gitlab/github_import/stage/import_notes_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_notes_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class ImportNotesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/github_import/stage/import_pull_requests_merged_by_worker.rb b/app/workers/gitlab/github_import/stage/import_pull_requests_merged_by_worker.rb
index 3e15c346659..9c17c09e7ea 100644
--- a/app/workers/gitlab/github_import/stage/import_pull_requests_merged_by_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_pull_requests_merged_by_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class ImportPullRequestsMergedByWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/github_import/stage/import_pull_requests_reviews_worker.rb b/app/workers/gitlab/github_import/stage/import_pull_requests_reviews_worker.rb
index 790e8b0eccf..10b7cd59e5e 100644
--- a/app/workers/gitlab/github_import/stage/import_pull_requests_reviews_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_pull_requests_reviews_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class ImportPullRequestsReviewsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/github_import/stage/import_pull_requests_worker.rb b/app/workers/gitlab/github_import/stage/import_pull_requests_worker.rb
index bf2defa6326..5755aea21ce 100644
--- a/app/workers/gitlab/github_import/stage/import_pull_requests_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_pull_requests_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class ImportPullRequestsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/github_import/stage/import_repository_worker.rb b/app/workers/gitlab/github_import/stage/import_repository_worker.rb
index 3338f7e58c0..e113563ce8b 100644
--- a/app/workers/gitlab/github_import/stage/import_repository_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_repository_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class ImportRepositoryWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include GithubImport::Queue
include StageMethods
diff --git a/app/workers/gitlab/import/stuck_import_job.rb b/app/workers/gitlab/import/stuck_import_job.rb
index 16be7a77ab1..ac789ce1188 100644
--- a/app/workers/gitlab/import/stuck_import_job.rb
+++ b/app/workers/gitlab/import/stuck_import_job.rb
@@ -9,6 +9,8 @@ module Gitlab
included do
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker updates several import states inline and does not schedule
# other jobs. So no context needed
diff --git a/app/workers/gitlab/jira_import/advance_stage_worker.rb b/app/workers/gitlab/jira_import/advance_stage_worker.rb
index c3a64669c60..6387054d448 100644
--- a/app/workers/gitlab/jira_import/advance_stage_worker.rb
+++ b/app/workers/gitlab/jira_import/advance_stage_worker.rb
@@ -4,6 +4,8 @@ module Gitlab
module JiraImport
class AdvanceStageWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include QueueOptions
include ::Gitlab::Import::AdvanceStage
diff --git a/app/workers/gitlab/jira_import/import_issue_worker.rb b/app/workers/gitlab/jira_import/import_issue_worker.rb
index 01082db67ed..98bde2218c2 100644
--- a/app/workers/gitlab/jira_import/import_issue_worker.rb
+++ b/app/workers/gitlab/jira_import/import_issue_worker.rb
@@ -4,6 +4,8 @@ module Gitlab
module JiraImport
class ImportIssueWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include NotifyUponDeath
include Gitlab::JiraImport::QueueOptions
include Gitlab::Import::DatabaseHelpers
diff --git a/app/workers/gitlab/jira_import/stage/start_import_worker.rb b/app/workers/gitlab/jira_import/stage/start_import_worker.rb
index bfc02224ee4..e327ced8c65 100644
--- a/app/workers/gitlab/jira_import/stage/start_import_worker.rb
+++ b/app/workers/gitlab/jira_import/stage/start_import_worker.rb
@@ -5,6 +5,8 @@ module Gitlab
module Stage
class StartImportWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ProjectStartImport
include ProjectImportOptions
include Gitlab::JiraImport::QueueOptions
diff --git a/app/workers/gitlab/phabricator_import/import_tasks_worker.rb b/app/workers/gitlab/phabricator_import/import_tasks_worker.rb
index 1b1d7b35dd5..867a12fbac2 100644
--- a/app/workers/gitlab/phabricator_import/import_tasks_worker.rb
+++ b/app/workers/gitlab/phabricator_import/import_tasks_worker.rb
@@ -3,6 +3,8 @@ module Gitlab
module PhabricatorImport
class ImportTasksWorker < BaseWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ProjectImportOptions # This marks the project as failed after too many tries
def importer_class
diff --git a/app/workers/gitlab_performance_bar_stats_worker.rb b/app/workers/gitlab_performance_bar_stats_worker.rb
index 558df0ab7b3..4299e2e8f78 100644
--- a/app/workers/gitlab_performance_bar_stats_worker.rb
+++ b/app/workers/gitlab_performance_bar_stats_worker.rb
@@ -3,6 +3,8 @@
class GitlabPerformanceBarStatsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
LEASE_KEY = 'gitlab:performance_bar_stats'
LEASE_TIMEOUT = 600
WORKER_DELAY = 120
diff --git a/app/workers/gitlab_shell_worker.rb b/app/workers/gitlab_shell_worker.rb
index b8e1e3d8fc4..de1e9af7bae 100644
--- a/app/workers/gitlab_shell_worker.rb
+++ b/app/workers/gitlab_shell_worker.rb
@@ -2,6 +2,8 @@
class GitlabShellWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include Gitlab::ShellAdapter
feature_category :source_code_management
diff --git a/app/workers/group_destroy_worker.rb b/app/workers/group_destroy_worker.rb
index 901785f462b..306d4801567 100644
--- a/app/workers/group_destroy_worker.rb
+++ b/app/workers/group_destroy_worker.rb
@@ -2,6 +2,8 @@
class GroupDestroyWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExceptionBacktrace
feature_category :subgroups
diff --git a/app/workers/hashed_storage/migrator_worker.rb b/app/workers/hashed_storage/migrator_worker.rb
index 5cbdfcb0602..7c8055cd647 100644
--- a/app/workers/hashed_storage/migrator_worker.rb
+++ b/app/workers/hashed_storage/migrator_worker.rb
@@ -4,6 +4,8 @@ module HashedStorage
class MigratorWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :hashed_storage
feature_category :source_code_management
diff --git a/app/workers/hashed_storage/project_migrate_worker.rb b/app/workers/hashed_storage/project_migrate_worker.rb
index 03e53058dbb..11bcf4d7589 100644
--- a/app/workers/hashed_storage/project_migrate_worker.rb
+++ b/app/workers/hashed_storage/project_migrate_worker.rb
@@ -4,6 +4,8 @@ module HashedStorage
class ProjectMigrateWorker < BaseWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :hashed_storage
loggable_arguments 1
diff --git a/app/workers/hashed_storage/project_rollback_worker.rb b/app/workers/hashed_storage/project_rollback_worker.rb
index d4a5e474323..e411cea2593 100644
--- a/app/workers/hashed_storage/project_rollback_worker.rb
+++ b/app/workers/hashed_storage/project_rollback_worker.rb
@@ -4,6 +4,8 @@ module HashedStorage
class ProjectRollbackWorker < BaseWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :hashed_storage
loggable_arguments 1
diff --git a/app/workers/hashed_storage/rollbacker_worker.rb b/app/workers/hashed_storage/rollbacker_worker.rb
index a220d3b2226..de8b4966c44 100644
--- a/app/workers/hashed_storage/rollbacker_worker.rb
+++ b/app/workers/hashed_storage/rollbacker_worker.rb
@@ -4,6 +4,8 @@ module HashedStorage
class RollbackerWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :hashed_storage
feature_category :source_code_management
diff --git a/app/workers/import_export_project_cleanup_worker.rb b/app/workers/import_export_project_cleanup_worker.rb
index dd345434d08..6e112a47932 100644
--- a/app/workers/import_export_project_cleanup_worker.rb
+++ b/app/workers/import_export_project_cleanup_worker.rb
@@ -2,6 +2,8 @@
class ImportExportProjectCleanupWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/import_issues_csv_worker.rb b/app/workers/import_issues_csv_worker.rb
index 521e5b8fbc2..46b59dc398f 100644
--- a/app/workers/import_issues_csv_worker.rb
+++ b/app/workers/import_issues_csv_worker.rb
@@ -3,6 +3,8 @@
class ImportIssuesCsvWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
feature_category :issue_tracking
worker_resource_boundary :cpu
diff --git a/app/workers/incident_management/add_severity_system_note_worker.rb b/app/workers/incident_management/add_severity_system_note_worker.rb
index 9f132531562..8b274351047 100644
--- a/app/workers/incident_management/add_severity_system_note_worker.rb
+++ b/app/workers/incident_management/add_severity_system_note_worker.rb
@@ -4,6 +4,8 @@ module IncidentManagement
class AddSeveritySystemNoteWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :incident_management
feature_category :incident_management
diff --git a/app/workers/incident_management/pager_duty/process_incident_worker.rb b/app/workers/incident_management/pager_duty/process_incident_worker.rb
index 3f378b012a1..413a297a024 100644
--- a/app/workers/incident_management/pager_duty/process_incident_worker.rb
+++ b/app/workers/incident_management/pager_duty/process_incident_worker.rb
@@ -5,6 +5,8 @@ module IncidentManagement
class ProcessIncidentWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :incident_management
feature_category :incident_management
diff --git a/app/workers/incident_management/process_alert_worker.rb b/app/workers/incident_management/process_alert_worker.rb
index c848c67241e..3b90e296ad4 100644
--- a/app/workers/incident_management/process_alert_worker.rb
+++ b/app/workers/incident_management/process_alert_worker.rb
@@ -4,6 +4,8 @@ module IncidentManagement
class ProcessAlertWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :incident_management
feature_category :incident_management
diff --git a/app/workers/incident_management/process_prometheus_alert_worker.rb b/app/workers/incident_management/process_prometheus_alert_worker.rb
index 4b778f6a621..7b5c6fd9001 100644
--- a/app/workers/incident_management/process_prometheus_alert_worker.rb
+++ b/app/workers/incident_management/process_prometheus_alert_worker.rb
@@ -4,6 +4,8 @@ module IncidentManagement
class ProcessPrometheusAlertWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :incident_management
feature_category :incident_management
worker_resource_boundary :cpu
diff --git a/app/workers/invalid_gpg_signature_update_worker.rb b/app/workers/invalid_gpg_signature_update_worker.rb
index 1fd959c8763..662817b5a92 100644
--- a/app/workers/invalid_gpg_signature_update_worker.rb
+++ b/app/workers/invalid_gpg_signature_update_worker.rb
@@ -3,6 +3,8 @@
class InvalidGpgSignatureUpdateWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
weight 2
diff --git a/app/workers/irker_worker.rb b/app/workers/irker_worker.rb
index c5bdb3e0970..4378da186a7 100644
--- a/app/workers/irker_worker.rb
+++ b/app/workers/irker_worker.rb
@@ -6,6 +6,8 @@ require 'socket'
class IrkerWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :integrations
def perform(project_id, channels, colors, push_data, settings)
diff --git a/app/workers/issuable_export_csv_worker.rb b/app/workers/issuable_export_csv_worker.rb
index eb96a78497c..3513e5a84f1 100644
--- a/app/workers/issuable_export_csv_worker.rb
+++ b/app/workers/issuable_export_csv_worker.rb
@@ -3,6 +3,8 @@
class IssuableExportCsvWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :issue_tracking
worker_resource_boundary :cpu
loggable_arguments 2
diff --git a/app/workers/issue_due_scheduler_worker.rb b/app/workers/issue_due_scheduler_worker.rb
index d735295d046..9077b42d645 100644
--- a/app/workers/issue_due_scheduler_worker.rb
+++ b/app/workers/issue_due_scheduler_worker.rb
@@ -2,6 +2,8 @@
class IssueDueSchedulerWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :issue_tracking
diff --git a/app/workers/issue_placement_worker.rb b/app/workers/issue_placement_worker.rb
index ca2f862e02a..d3995f1d89e 100644
--- a/app/workers/issue_placement_worker.rb
+++ b/app/workers/issue_placement_worker.rb
@@ -3,6 +3,8 @@
class IssuePlacementWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
deduplicate :until_executed, including_scheduled: true
feature_category :issue_tracking
diff --git a/app/workers/issue_rebalancing_worker.rb b/app/workers/issue_rebalancing_worker.rb
index a9ad66198f3..cebb86ea249 100644
--- a/app/workers/issue_rebalancing_worker.rb
+++ b/app/workers/issue_rebalancing_worker.rb
@@ -3,6 +3,8 @@
class IssueRebalancingWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
urgency :low
feature_category :issue_tracking
diff --git a/app/workers/jira_connect/sync_branch_worker.rb b/app/workers/jira_connect/sync_branch_worker.rb
index 1af51c4bb74..b8211286d1c 100644
--- a/app/workers/jira_connect/sync_branch_worker.rb
+++ b/app/workers/jira_connect/sync_branch_worker.rb
@@ -4,6 +4,8 @@ module JiraConnect
class SyncBranchWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :jira_connect
feature_category :integrations
loggable_arguments 1, 2
diff --git a/app/workers/jira_connect/sync_builds_worker.rb b/app/workers/jira_connect/sync_builds_worker.rb
index 9cb5d5d247d..0207e481dc0 100644
--- a/app/workers/jira_connect/sync_builds_worker.rb
+++ b/app/workers/jira_connect/sync_builds_worker.rb
@@ -4,6 +4,8 @@ module JiraConnect
class SyncBuildsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
worker_has_external_dependencies!
diff --git a/app/workers/jira_connect/sync_deployments_worker.rb b/app/workers/jira_connect/sync_deployments_worker.rb
index 7272d35f4cb..66f6a89af74 100644
--- a/app/workers/jira_connect/sync_deployments_worker.rb
+++ b/app/workers/jira_connect/sync_deployments_worker.rb
@@ -4,6 +4,8 @@ module JiraConnect
class SyncDeploymentsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
worker_has_external_dependencies!
diff --git a/app/workers/jira_connect/sync_feature_flags_worker.rb b/app/workers/jira_connect/sync_feature_flags_worker.rb
index 496b9f1626d..e8dee70b901 100644
--- a/app/workers/jira_connect/sync_feature_flags_worker.rb
+++ b/app/workers/jira_connect/sync_feature_flags_worker.rb
@@ -4,6 +4,8 @@ module JiraConnect
class SyncFeatureFlagsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
worker_has_external_dependencies!
diff --git a/app/workers/jira_connect/sync_merge_request_worker.rb b/app/workers/jira_connect/sync_merge_request_worker.rb
index 543d8e002fe..6b3a6ae84ad 100644
--- a/app/workers/jira_connect/sync_merge_request_worker.rb
+++ b/app/workers/jira_connect/sync_merge_request_worker.rb
@@ -4,6 +4,8 @@ module JiraConnect
class SyncMergeRequestWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :jira_connect
feature_category :integrations
idempotent!
diff --git a/app/workers/jira_connect/sync_project_worker.rb b/app/workers/jira_connect/sync_project_worker.rb
index 4d52705f207..40b60c3982a 100644
--- a/app/workers/jira_connect/sync_project_worker.rb
+++ b/app/workers/jira_connect/sync_project_worker.rb
@@ -4,6 +4,8 @@ module JiraConnect
class SyncProjectWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :jira_connect
feature_category :integrations
idempotent!
diff --git a/app/workers/mail_scheduler/issue_due_worker.rb b/app/workers/mail_scheduler/issue_due_worker.rb
index 309d3e13477..44f8f1e446c 100644
--- a/app/workers/mail_scheduler/issue_due_worker.rb
+++ b/app/workers/mail_scheduler/issue_due_worker.rb
@@ -3,6 +3,8 @@
module MailScheduler
class IssueDueWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include MailSchedulerQueue
feature_category :issue_tracking
diff --git a/app/workers/mail_scheduler/notification_service_worker.rb b/app/workers/mail_scheduler/notification_service_worker.rb
index 309f23c8708..8645cc93511 100644
--- a/app/workers/mail_scheduler/notification_service_worker.rb
+++ b/app/workers/mail_scheduler/notification_service_worker.rb
@@ -5,6 +5,8 @@ require 'active_job/arguments'
module MailScheduler
class NotificationServiceWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include MailSchedulerQueue
feature_category :issue_tracking
diff --git a/app/workers/member_invitation_reminder_emails_worker.rb b/app/workers/member_invitation_reminder_emails_worker.rb
index 971d6abaa51..87cb0655f82 100644
--- a/app/workers/member_invitation_reminder_emails_worker.rb
+++ b/app/workers/member_invitation_reminder_emails_worker.rb
@@ -2,6 +2,8 @@
class MemberInvitationReminderEmailsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :subgroups
diff --git a/app/workers/members_destroyer/unassign_issuables_worker.rb b/app/workers/members_destroyer/unassign_issuables_worker.rb
index 2c17120bf48..0ee5654eaba 100644
--- a/app/workers/members_destroyer/unassign_issuables_worker.rb
+++ b/app/workers/members_destroyer/unassign_issuables_worker.rb
@@ -4,6 +4,8 @@ module MembersDestroyer
class UnassignIssuablesWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
ENTITY_TYPES = %w(Group Project).freeze
queue_namespace :unassign_issuables
diff --git a/app/workers/merge_request_cleanup_refs_worker.rb b/app/workers/merge_request_cleanup_refs_worker.rb
index fbd62ac0a91..b6afbab378b 100644
--- a/app/workers/merge_request_cleanup_refs_worker.rb
+++ b/app/workers/merge_request_cleanup_refs_worker.rb
@@ -3,6 +3,8 @@
class MergeRequestCleanupRefsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :code_review
idempotent!
diff --git a/app/workers/merge_request_mergeability_check_worker.rb b/app/workers/merge_request_mergeability_check_worker.rb
index 70d5f49d70e..13961de1f59 100644
--- a/app/workers/merge_request_mergeability_check_worker.rb
+++ b/app/workers/merge_request_mergeability_check_worker.rb
@@ -3,6 +3,8 @@
class MergeRequestMergeabilityCheckWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :code_review
idempotent!
diff --git a/app/workers/merge_requests/assignees_change_worker.rb b/app/workers/merge_requests/assignees_change_worker.rb
index 9865563e357..d062336667b 100644
--- a/app/workers/merge_requests/assignees_change_worker.rb
+++ b/app/workers/merge_requests/assignees_change_worker.rb
@@ -3,6 +3,8 @@
class MergeRequests::AssigneesChangeWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
urgency :high
deduplicate :until_executed
diff --git a/app/workers/merge_requests/create_pipeline_worker.rb b/app/workers/merge_requests/create_pipeline_worker.rb
index 244ba1af300..ce7f84f997b 100644
--- a/app/workers/merge_requests/create_pipeline_worker.rb
+++ b/app/workers/merge_requests/create_pipeline_worker.rb
@@ -3,6 +3,8 @@
module MergeRequests
class CreatePipelineWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_creation
diff --git a/app/workers/merge_requests/delete_source_branch_worker.rb b/app/workers/merge_requests/delete_source_branch_worker.rb
index eb83d10af33..2fc90082834 100644
--- a/app/workers/merge_requests/delete_source_branch_worker.rb
+++ b/app/workers/merge_requests/delete_source_branch_worker.rb
@@ -3,6 +3,8 @@
class MergeRequests::DeleteSourceBranchWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
urgency :high
idempotent!
diff --git a/app/workers/merge_requests/handle_assignees_change_worker.rb b/app/workers/merge_requests/handle_assignees_change_worker.rb
index e79d8293bae..338a0cfeffb 100644
--- a/app/workers/merge_requests/handle_assignees_change_worker.rb
+++ b/app/workers/merge_requests/handle_assignees_change_worker.rb
@@ -3,6 +3,8 @@
class MergeRequests::HandleAssigneesChangeWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :code_review
urgency :high
deduplicate :until_executed
diff --git a/app/workers/merge_requests/resolve_todos_worker.rb b/app/workers/merge_requests/resolve_todos_worker.rb
index 2a5f742f809..8bb88091efe 100644
--- a/app/workers/merge_requests/resolve_todos_worker.rb
+++ b/app/workers/merge_requests/resolve_todos_worker.rb
@@ -3,6 +3,8 @@
class MergeRequests::ResolveTodosWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :code_review
urgency :high
deduplicate :until_executed
diff --git a/app/workers/merge_worker.rb b/app/workers/merge_worker.rb
index f77b1e27678..250fbc1b9b3 100644
--- a/app/workers/merge_worker.rb
+++ b/app/workers/merge_worker.rb
@@ -3,6 +3,8 @@
class MergeWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
urgency :high
weight 5
diff --git a/app/workers/metrics/dashboard/prune_old_annotations_worker.rb b/app/workers/metrics/dashboard/prune_old_annotations_worker.rb
index 2a9ce3bb8e6..5e8067a4438 100644
--- a/app/workers/metrics/dashboard/prune_old_annotations_worker.rb
+++ b/app/workers/metrics/dashboard/prune_old_annotations_worker.rb
@@ -5,6 +5,8 @@ module Metrics
class PruneOldAnnotationsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
DELETE_LIMIT = 10_000
DEFAULT_CUT_OFF_PERIOD = 2.weeks
diff --git a/app/workers/metrics/dashboard/schedule_annotations_prune_worker.rb b/app/workers/metrics/dashboard/schedule_annotations_prune_worker.rb
index cbdd69c6e8c..6f2ff8cca13 100644
--- a/app/workers/metrics/dashboard/schedule_annotations_prune_worker.rb
+++ b/app/workers/metrics/dashboard/schedule_annotations_prune_worker.rb
@@ -4,6 +4,8 @@ module Metrics
module Dashboard
class ScheduleAnnotationsPruneWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/metrics/dashboard/sync_dashboards_worker.rb b/app/workers/metrics/dashboard/sync_dashboards_worker.rb
index 7a124a33f9e..db740c94383 100644
--- a/app/workers/metrics/dashboard/sync_dashboards_worker.rb
+++ b/app/workers/metrics/dashboard/sync_dashboards_worker.rb
@@ -5,6 +5,8 @@ module Metrics
class SyncDashboardsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :metrics
idempotent!
diff --git a/app/workers/migrate_external_diffs_worker.rb b/app/workers/migrate_external_diffs_worker.rb
index 3ef399bd9fc..a73a9be4f0c 100644
--- a/app/workers/migrate_external_diffs_worker.rb
+++ b/app/workers/migrate_external_diffs_worker.rb
@@ -3,6 +3,8 @@
class MigrateExternalDiffsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :code_review
def perform(merge_request_diff_id)
diff --git a/app/workers/namespaceless_project_destroy_worker.rb b/app/workers/namespaceless_project_destroy_worker.rb
index 1c8054d8fbd..91cad6f2a5c 100644
--- a/app/workers/namespaceless_project_destroy_worker.rb
+++ b/app/workers/namespaceless_project_destroy_worker.rb
@@ -8,6 +8,8 @@
# namespace. For those use ProjectDestroyWorker instead.
class NamespacelessProjectDestroyWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExceptionBacktrace
feature_category :authentication_and_authorization
diff --git a/app/workers/namespaces/in_product_marketing_emails_worker.rb b/app/workers/namespaces/in_product_marketing_emails_worker.rb
index 3070afed3d6..6cb2c6c5db2 100644
--- a/app/workers/namespaces/in_product_marketing_emails_worker.rb
+++ b/app/workers/namespaces/in_product_marketing_emails_worker.rb
@@ -3,6 +3,8 @@
module Namespaces
class InProductMarketingEmailsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :subgroups
diff --git a/app/workers/namespaces/onboarding_issue_created_worker.rb b/app/workers/namespaces/onboarding_issue_created_worker.rb
index e5e2c80e821..1c7b1962241 100644
--- a/app/workers/namespaces/onboarding_issue_created_worker.rb
+++ b/app/workers/namespaces/onboarding_issue_created_worker.rb
@@ -4,6 +4,8 @@ module Namespaces
class OnboardingIssueCreatedWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :issue_tracking
urgency :low
diff --git a/app/workers/namespaces/onboarding_pipeline_created_worker.rb b/app/workers/namespaces/onboarding_pipeline_created_worker.rb
index e1de6d0046b..7c6119f8a59 100644
--- a/app/workers/namespaces/onboarding_pipeline_created_worker.rb
+++ b/app/workers/namespaces/onboarding_pipeline_created_worker.rb
@@ -4,6 +4,8 @@ module Namespaces
class OnboardingPipelineCreatedWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :subgroups
urgency :low
diff --git a/app/workers/namespaces/onboarding_progress_worker.rb b/app/workers/namespaces/onboarding_progress_worker.rb
index 9cb5a23cf31..5c470e47dd5 100644
--- a/app/workers/namespaces/onboarding_progress_worker.rb
+++ b/app/workers/namespaces/onboarding_progress_worker.rb
@@ -4,6 +4,8 @@ module Namespaces
class OnboardingProgressWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :product_analytics
urgency :low
diff --git a/app/workers/namespaces/onboarding_user_added_worker.rb b/app/workers/namespaces/onboarding_user_added_worker.rb
index 02608268d6f..2aa91944906 100644
--- a/app/workers/namespaces/onboarding_user_added_worker.rb
+++ b/app/workers/namespaces/onboarding_user_added_worker.rb
@@ -4,6 +4,8 @@ module Namespaces
class OnboardingUserAddedWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :users
urgency :low
diff --git a/app/workers/namespaces/prune_aggregation_schedules_worker.rb b/app/workers/namespaces/prune_aggregation_schedules_worker.rb
index b94c8b7b4ba..0ea27c532ae 100644
--- a/app/workers/namespaces/prune_aggregation_schedules_worker.rb
+++ b/app/workers/namespaces/prune_aggregation_schedules_worker.rb
@@ -3,6 +3,8 @@
module Namespaces
class PruneAggregationSchedulesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :source_code_management
diff --git a/app/workers/namespaces/root_statistics_worker.rb b/app/workers/namespaces/root_statistics_worker.rb
index 5d4b510ceb7..92bf2e22020 100644
--- a/app/workers/namespaces/root_statistics_worker.rb
+++ b/app/workers/namespaces/root_statistics_worker.rb
@@ -4,6 +4,8 @@ module Namespaces
class RootStatisticsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :update_namespace_statistics
feature_category :source_code_management
idempotent!
diff --git a/app/workers/namespaces/schedule_aggregation_worker.rb b/app/workers/namespaces/schedule_aggregation_worker.rb
index cbf5ed44572..cee273688e9 100644
--- a/app/workers/namespaces/schedule_aggregation_worker.rb
+++ b/app/workers/namespaces/schedule_aggregation_worker.rb
@@ -4,6 +4,8 @@ module Namespaces
class ScheduleAggregationWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :update_namespace_statistics
feature_category :source_code_management
idempotent!
diff --git a/app/workers/new_issue_worker.rb b/app/workers/new_issue_worker.rb
index c08f4b4cd75..bc56c3d0dec 100644
--- a/app/workers/new_issue_worker.rb
+++ b/app/workers/new_issue_worker.rb
@@ -2,6 +2,8 @@
class NewIssueWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include NewIssuable
feature_category :issue_tracking
diff --git a/app/workers/new_merge_request_worker.rb b/app/workers/new_merge_request_worker.rb
index 2d28561488b..77d6c020c67 100644
--- a/app/workers/new_merge_request_worker.rb
+++ b/app/workers/new_merge_request_worker.rb
@@ -2,6 +2,8 @@
class NewMergeRequestWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include NewIssuable
feature_category :code_review
diff --git a/app/workers/new_note_worker.rb b/app/workers/new_note_worker.rb
index 2bb2d0db55c..566bb9a9057 100644
--- a/app/workers/new_note_worker.rb
+++ b/app/workers/new_note_worker.rb
@@ -3,6 +3,8 @@
class NewNoteWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :issue_tracking
urgency :high
worker_resource_boundary :cpu
diff --git a/app/workers/object_pool/create_worker.rb b/app/workers/object_pool/create_worker.rb
index c2bfe4e604a..586b81fcd30 100644
--- a/app/workers/object_pool/create_worker.rb
+++ b/app/workers/object_pool/create_worker.rb
@@ -3,6 +3,8 @@
module ObjectPool
class CreateWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ObjectPoolQueue
include ExclusiveLeaseGuard
diff --git a/app/workers/object_pool/destroy_worker.rb b/app/workers/object_pool/destroy_worker.rb
index d42cee59d03..297780b20bd 100644
--- a/app/workers/object_pool/destroy_worker.rb
+++ b/app/workers/object_pool/destroy_worker.rb
@@ -3,6 +3,8 @@
module ObjectPool
class DestroyWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ObjectPoolQueue
def perform(pool_repository_id)
diff --git a/app/workers/object_pool/join_worker.rb b/app/workers/object_pool/join_worker.rb
index 8103c04b507..282a8f54695 100644
--- a/app/workers/object_pool/join_worker.rb
+++ b/app/workers/object_pool/join_worker.rb
@@ -3,6 +3,8 @@
module ObjectPool
class JoinWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ObjectPoolQueue
worker_resource_boundary :cpu
diff --git a/app/workers/object_pool/schedule_join_worker.rb b/app/workers/object_pool/schedule_join_worker.rb
index c00bb2967f2..44208208d04 100644
--- a/app/workers/object_pool/schedule_join_worker.rb
+++ b/app/workers/object_pool/schedule_join_worker.rb
@@ -3,6 +3,8 @@
module ObjectPool
class ScheduleJoinWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ObjectPoolQueue
def perform(pool_id)
diff --git a/app/workers/object_storage/migrate_uploads_worker.rb b/app/workers/object_storage/migrate_uploads_worker.rb
index 6655e8b7281..ba2640c73ce 100644
--- a/app/workers/object_storage/migrate_uploads_worker.rb
+++ b/app/workers/object_storage/migrate_uploads_worker.rb
@@ -4,6 +4,8 @@
module ObjectStorage
class MigrateUploadsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ObjectStorageQueue
feature_category_not_owned!
diff --git a/app/workers/packages/composer/cache_cleanup_worker.rb b/app/workers/packages/composer/cache_cleanup_worker.rb
index 1b95bbeb906..433b845881b 100644
--- a/app/workers/packages/composer/cache_cleanup_worker.rb
+++ b/app/workers/packages/composer/cache_cleanup_worker.rb
@@ -4,6 +4,8 @@ module Packages
module Composer
class CacheCleanupWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :package_registry
diff --git a/app/workers/packages/composer/cache_update_worker.rb b/app/workers/packages/composer/cache_update_worker.rb
index 9d6ea25a1a5..12084ef5cb2 100644
--- a/app/workers/packages/composer/cache_update_worker.rb
+++ b/app/workers/packages/composer/cache_update_worker.rb
@@ -5,6 +5,8 @@ module Packages
class CacheUpdateWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :package_registry
idempotent!
diff --git a/app/workers/packages/go/sync_packages_worker.rb b/app/workers/packages/go/sync_packages_worker.rb
index e41f27f2252..b0616159405 100644
--- a/app/workers/packages/go/sync_packages_worker.rb
+++ b/app/workers/packages/go/sync_packages_worker.rb
@@ -4,6 +4,8 @@ module Packages
module Go
class SyncPackagesWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include Gitlab::Golang
queue_namespace :package_repositories
diff --git a/app/workers/packages/maven/metadata/sync_worker.rb b/app/workers/packages/maven/metadata/sync_worker.rb
index eb7abf4cdd0..6a6ef006289 100644
--- a/app/workers/packages/maven/metadata/sync_worker.rb
+++ b/app/workers/packages/maven/metadata/sync_worker.rb
@@ -5,6 +5,8 @@ module Packages
module Metadata
class SyncWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include Gitlab::Utils::StrongMemoize
queue_namespace :package_repositories
diff --git a/app/workers/packages/nuget/extraction_worker.rb b/app/workers/packages/nuget/extraction_worker.rb
index 820304a9f3b..78d08a12f06 100644
--- a/app/workers/packages/nuget/extraction_worker.rb
+++ b/app/workers/packages/nuget/extraction_worker.rb
@@ -5,6 +5,8 @@ module Packages
class ExtractionWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :package_repositories
feature_category :package_registry
diff --git a/app/workers/packages/rubygems/extraction_worker.rb b/app/workers/packages/rubygems/extraction_worker.rb
index 1e5cd0b54ce..195d7285e32 100644
--- a/app/workers/packages/rubygems/extraction_worker.rb
+++ b/app/workers/packages/rubygems/extraction_worker.rb
@@ -5,6 +5,8 @@ module Packages
class ExtractionWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
queue_namespace :package_repositories
feature_category :package_registry
deduplicate :until_executing
diff --git a/app/workers/pages_domain_removal_cron_worker.rb b/app/workers/pages_domain_removal_cron_worker.rb
index cfcd2a5064d..cc720676214 100644
--- a/app/workers/pages_domain_removal_cron_worker.rb
+++ b/app/workers/pages_domain_removal_cron_worker.rb
@@ -2,6 +2,8 @@
class PagesDomainRemovalCronWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :pages
diff --git a/app/workers/pages_domain_ssl_renewal_cron_worker.rb b/app/workers/pages_domain_ssl_renewal_cron_worker.rb
index fe6d516d3cf..c99eed8a8df 100644
--- a/app/workers/pages_domain_ssl_renewal_cron_worker.rb
+++ b/app/workers/pages_domain_ssl_renewal_cron_worker.rb
@@ -2,6 +2,8 @@
class PagesDomainSslRenewalCronWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :pages
diff --git a/app/workers/pages_domain_ssl_renewal_worker.rb b/app/workers/pages_domain_ssl_renewal_worker.rb
index 125ba343948..cfe7a34b37d 100644
--- a/app/workers/pages_domain_ssl_renewal_worker.rb
+++ b/app/workers/pages_domain_ssl_renewal_worker.rb
@@ -3,6 +3,8 @@
class PagesDomainSslRenewalWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :pages
tags :requires_disk_io
diff --git a/app/workers/pages_domain_verification_cron_worker.rb b/app/workers/pages_domain_verification_cron_worker.rb
index a30f0b981d8..ec63004716a 100644
--- a/app/workers/pages_domain_verification_cron_worker.rb
+++ b/app/workers/pages_domain_verification_cron_worker.rb
@@ -2,6 +2,8 @@
class PagesDomainVerificationCronWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :pages
diff --git a/app/workers/pages_domain_verification_worker.rb b/app/workers/pages_domain_verification_worker.rb
index ff0463481cd..e867f93f900 100644
--- a/app/workers/pages_domain_verification_worker.rb
+++ b/app/workers/pages_domain_verification_worker.rb
@@ -3,6 +3,8 @@
class PagesDomainVerificationWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :pages
tags :requires_disk_io
diff --git a/app/workers/pages_transfer_worker.rb b/app/workers/pages_transfer_worker.rb
index 5d395c9e38a..58d5b96b156 100644
--- a/app/workers/pages_transfer_worker.rb
+++ b/app/workers/pages_transfer_worker.rb
@@ -3,6 +3,8 @@
class PagesTransferWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
TransferFailedError = Class.new(StandardError)
feature_category :pages
diff --git a/app/workers/pages_update_configuration_worker.rb b/app/workers/pages_update_configuration_worker.rb
index ca5016dc782..3b6fadff5be 100644
--- a/app/workers/pages_update_configuration_worker.rb
+++ b/app/workers/pages_update_configuration_worker.rb
@@ -3,6 +3,8 @@
class PagesUpdateConfigurationWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
feature_category :pages
diff --git a/app/workers/partition_creation_worker.rb b/app/workers/partition_creation_worker.rb
index 119ecd28003..2b21741d6c2 100644
--- a/app/workers/partition_creation_worker.rb
+++ b/app/workers/partition_creation_worker.rb
@@ -2,6 +2,8 @@
class PartitionCreationWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :database
diff --git a/app/workers/personal_access_tokens/expired_notification_worker.rb b/app/workers/personal_access_tokens/expired_notification_worker.rb
index 2ff64ec51f3..9a8f3a36c61 100644
--- a/app/workers/personal_access_tokens/expired_notification_worker.rb
+++ b/app/workers/personal_access_tokens/expired_notification_worker.rb
@@ -3,6 +3,8 @@
module PersonalAccessTokens
class ExpiredNotificationWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :authentication_and_authorization
diff --git a/app/workers/personal_access_tokens/expiring_worker.rb b/app/workers/personal_access_tokens/expiring_worker.rb
index 7a016c85a64..aaca78e3c63 100644
--- a/app/workers/personal_access_tokens/expiring_worker.rb
+++ b/app/workers/personal_access_tokens/expiring_worker.rb
@@ -3,6 +3,8 @@
module PersonalAccessTokens
class ExpiringWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :authentication_and_authorization
diff --git a/app/workers/pipeline_hooks_worker.rb b/app/workers/pipeline_hooks_worker.rb
index b8dd4768cfb..fbb672f52e3 100644
--- a/app/workers/pipeline_hooks_worker.rb
+++ b/app/workers/pipeline_hooks_worker.rb
@@ -2,6 +2,8 @@
class PipelineHooksWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_hooks
diff --git a/app/workers/pipeline_metrics_worker.rb b/app/workers/pipeline_metrics_worker.rb
index 1eb9b4ce089..fdab10d7dda 100644
--- a/app/workers/pipeline_metrics_worker.rb
+++ b/app/workers/pipeline_metrics_worker.rb
@@ -2,6 +2,8 @@
class PipelineMetricsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
urgency :high
diff --git a/app/workers/pipeline_notification_worker.rb b/app/workers/pipeline_notification_worker.rb
index f4b43106bf2..619570dcf41 100644
--- a/app/workers/pipeline_notification_worker.rb
+++ b/app/workers/pipeline_notification_worker.rb
@@ -2,6 +2,8 @@
class PipelineNotificationWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
urgency :high
diff --git a/app/workers/pipeline_process_worker.rb b/app/workers/pipeline_process_worker.rb
index f0929b92bd0..64d2b8e627a 100644
--- a/app/workers/pipeline_process_worker.rb
+++ b/app/workers/pipeline_process_worker.rb
@@ -2,6 +2,8 @@
class PipelineProcessWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/pipeline_schedule_worker.rb b/app/workers/pipeline_schedule_worker.rb
index d81b978f9b0..f1248ec9e58 100644
--- a/app/workers/pipeline_schedule_worker.rb
+++ b/app/workers/pipeline_schedule_worker.rb
@@ -2,6 +2,8 @@
class PipelineScheduleWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :continuous_integration
diff --git a/app/workers/pipeline_update_worker.rb b/app/workers/pipeline_update_worker.rb
index 7db4ab8fe0b..e8feb4f2db2 100644
--- a/app/workers/pipeline_update_worker.rb
+++ b/app/workers/pipeline_update_worker.rb
@@ -4,6 +4,8 @@
# See: https://gitlab.com/gitlab-org/gitlab/-/issues/232806
class PipelineUpdateWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb
index d21c63f90fb..222510c81d0 100644
--- a/app/workers/post_receive.rb
+++ b/app/workers/post_receive.rb
@@ -2,6 +2,8 @@
class PostReceive # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include Gitlab::Experiment::Dsl
feature_category :source_code_management
diff --git a/app/workers/process_commit_worker.rb b/app/workers/process_commit_worker.rb
index 3c7af641f16..ff76debee8c 100644
--- a/app/workers/process_commit_worker.rb
+++ b/app/workers/process_commit_worker.rb
@@ -10,6 +10,8 @@
class ProcessCommitWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
urgency :high
weight 3
diff --git a/app/workers/project_cache_worker.rb b/app/workers/project_cache_worker.rb
index 8a9c166e5df..01e76d22975 100644
--- a/app/workers/project_cache_worker.rb
+++ b/app/workers/project_cache_worker.rb
@@ -4,6 +4,8 @@
class ProjectCacheWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
LEASE_TIMEOUT = 15.minutes.to_i
feature_category :source_code_management
diff --git a/app/workers/project_daily_statistics_worker.rb b/app/workers/project_daily_statistics_worker.rb
index 2166655115d..7d673ec00d9 100644
--- a/app/workers/project_daily_statistics_worker.rb
+++ b/app/workers/project_daily_statistics_worker.rb
@@ -4,6 +4,8 @@
class ProjectDailyStatisticsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
def perform(project_id)
diff --git a/app/workers/project_destroy_worker.rb b/app/workers/project_destroy_worker.rb
index 99d51fc5c2e..9ba054b2da6 100644
--- a/app/workers/project_destroy_worker.rb
+++ b/app/workers/project_destroy_worker.rb
@@ -2,6 +2,8 @@
class ProjectDestroyWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExceptionBacktrace
feature_category :source_code_management
diff --git a/app/workers/project_service_worker.rb b/app/workers/project_service_worker.rb
index 8e1fef74a89..a1ed00a81cb 100644
--- a/app/workers/project_service_worker.rb
+++ b/app/workers/project_service_worker.rb
@@ -3,6 +3,8 @@
class ProjectServiceWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
sidekiq_options dead: false
feature_category :integrations
worker_has_external_dependencies!
diff --git a/app/workers/projects/post_creation_worker.rb b/app/workers/projects/post_creation_worker.rb
index 2ca62e582b6..7ea19d695aa 100644
--- a/app/workers/projects/post_creation_worker.rb
+++ b/app/workers/projects/post_creation_worker.rb
@@ -4,6 +4,8 @@ module Projects
class PostCreationWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
idempotent!
diff --git a/app/workers/projects/schedule_bulk_repository_shard_moves_worker.rb b/app/workers/projects/schedule_bulk_repository_shard_moves_worker.rb
index 3841ae9b922..55530bff7c1 100644
--- a/app/workers/projects/schedule_bulk_repository_shard_moves_worker.rb
+++ b/app/workers/projects/schedule_bulk_repository_shard_moves_worker.rb
@@ -4,6 +4,8 @@ module Projects
class ScheduleBulkRepositoryShardMovesWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
feature_category :gitaly
urgency :throttled
diff --git a/app/workers/projects/update_repository_storage_worker.rb b/app/workers/projects/update_repository_storage_worker.rb
index f4c44458446..1de1c95e043 100644
--- a/app/workers/projects/update_repository_storage_worker.rb
+++ b/app/workers/projects/update_repository_storage_worker.rb
@@ -5,6 +5,8 @@ module Projects
extend ::Gitlab::Utils::Override
include ::UpdateRepositoryStorageWorker
+ sidekiq_options retry: 3
+
private
override :find_repository_storage_move
diff --git a/app/workers/prometheus/create_default_alerts_worker.rb b/app/workers/prometheus/create_default_alerts_worker.rb
index 2c4fefa9ece..0dba752ced1 100644
--- a/app/workers/prometheus/create_default_alerts_worker.rb
+++ b/app/workers/prometheus/create_default_alerts_worker.rb
@@ -4,6 +4,8 @@ module Prometheus
class CreateDefaultAlertsWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :incident_management
urgency :high
idempotent!
diff --git a/app/workers/propagate_integration_group_worker.rb b/app/workers/propagate_integration_group_worker.rb
index f763406b380..2a380d1cc36 100644
--- a/app/workers/propagate_integration_group_worker.rb
+++ b/app/workers/propagate_integration_group_worker.rb
@@ -3,6 +3,8 @@
class PropagateIntegrationGroupWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :integrations
idempotent!
diff --git a/app/workers/propagate_integration_inherit_descendant_worker.rb b/app/workers/propagate_integration_inherit_descendant_worker.rb
index d589619818c..b28931018b4 100644
--- a/app/workers/propagate_integration_inherit_descendant_worker.rb
+++ b/app/workers/propagate_integration_inherit_descendant_worker.rb
@@ -3,6 +3,8 @@
class PropagateIntegrationInheritDescendantWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :integrations
idempotent!
diff --git a/app/workers/propagate_integration_inherit_worker.rb b/app/workers/propagate_integration_inherit_worker.rb
index 40d67c6d3bf..5520b774821 100644
--- a/app/workers/propagate_integration_inherit_worker.rb
+++ b/app/workers/propagate_integration_inherit_worker.rb
@@ -3,6 +3,8 @@
class PropagateIntegrationInheritWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :integrations
idempotent!
diff --git a/app/workers/propagate_integration_project_worker.rb b/app/workers/propagate_integration_project_worker.rb
index 50c68c85f03..1ac342412b9 100644
--- a/app/workers/propagate_integration_project_worker.rb
+++ b/app/workers/propagate_integration_project_worker.rb
@@ -3,6 +3,8 @@
class PropagateIntegrationProjectWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :integrations
idempotent!
diff --git a/app/workers/propagate_integration_worker.rb b/app/workers/propagate_integration_worker.rb
index bb954b12a25..7055e46b56a 100644
--- a/app/workers/propagate_integration_worker.rb
+++ b/app/workers/propagate_integration_worker.rb
@@ -3,6 +3,8 @@
class PropagateIntegrationWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :integrations
idempotent!
loggable_arguments 1
diff --git a/app/workers/propagate_service_template_worker.rb b/app/workers/propagate_service_template_worker.rb
index b02525b5106..d9cbb60ebaa 100644
--- a/app/workers/propagate_service_template_worker.rb
+++ b/app/workers/propagate_service_template_worker.rb
@@ -4,6 +4,8 @@
class PropagateServiceTemplateWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :integrations
LEASE_TIMEOUT = 4.hours.to_i
diff --git a/app/workers/prune_old_events_worker.rb b/app/workers/prune_old_events_worker.rb
index 330de4c7cba..59d324bc573 100644
--- a/app/workers/prune_old_events_worker.rb
+++ b/app/workers/prune_old_events_worker.rb
@@ -2,6 +2,8 @@
class PruneOldEventsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/prune_web_hook_logs_worker.rb b/app/workers/prune_web_hook_logs_worker.rb
index a8e81a24ecd..abfaabbf01d 100644
--- a/app/workers/prune_web_hook_logs_worker.rb
+++ b/app/workers/prune_web_hook_logs_worker.rb
@@ -4,6 +4,8 @@
# table.
class PruneWebHookLogsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/purge_dependency_proxy_cache_worker.rb b/app/workers/purge_dependency_proxy_cache_worker.rb
index b4c88592543..9f1ea8a6eb4 100644
--- a/app/workers/purge_dependency_proxy_cache_worker.rb
+++ b/app/workers/purge_dependency_proxy_cache_worker.rb
@@ -2,6 +2,8 @@
class PurgeDependencyProxyCacheWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include Gitlab::Allowable
idempotent!
diff --git a/app/workers/rebase_worker.rb b/app/workers/rebase_worker.rb
index ee9ae827bb6..f2be7dc4749 100644
--- a/app/workers/rebase_worker.rb
+++ b/app/workers/rebase_worker.rb
@@ -5,6 +5,8 @@
class RebaseWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
weight 2
loggable_arguments 2
diff --git a/app/workers/releases/create_evidence_worker.rb b/app/workers/releases/create_evidence_worker.rb
index d22329216f9..a62fb11f875 100644
--- a/app/workers/releases/create_evidence_worker.rb
+++ b/app/workers/releases/create_evidence_worker.rb
@@ -4,6 +4,8 @@ module Releases
class CreateEvidenceWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :release_evidence
# pipeline_id is optional for backward compatibility with existing jobs
diff --git a/app/workers/releases/manage_evidence_worker.rb b/app/workers/releases/manage_evidence_worker.rb
index 8a925d22cea..46c8e743045 100644
--- a/app/workers/releases/manage_evidence_worker.rb
+++ b/app/workers/releases/manage_evidence_worker.rb
@@ -3,6 +3,8 @@
module Releases
class ManageEvidenceWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :release_evidence
diff --git a/app/workers/remote_mirror_notification_worker.rb b/app/workers/remote_mirror_notification_worker.rb
index 33f5002014d..39a7c0fc79d 100644
--- a/app/workers/remote_mirror_notification_worker.rb
+++ b/app/workers/remote_mirror_notification_worker.rb
@@ -3,6 +3,8 @@
class RemoteMirrorNotificationWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
weight 2
diff --git a/app/workers/remove_expired_group_links_worker.rb b/app/workers/remove_expired_group_links_worker.rb
index 3f1a484f384..edf3a02cff5 100644
--- a/app/workers/remove_expired_group_links_worker.rb
+++ b/app/workers/remove_expired_group_links_worker.rb
@@ -2,6 +2,8 @@
class RemoveExpiredGroupLinksWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :authentication_and_authorization
diff --git a/app/workers/remove_expired_members_worker.rb b/app/workers/remove_expired_members_worker.rb
index 1f465d77c0e..9940953207e 100644
--- a/app/workers/remove_expired_members_worker.rb
+++ b/app/workers/remove_expired_members_worker.rb
@@ -2,6 +2,8 @@
class RemoveExpiredMembersWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :authentication_and_authorization
diff --git a/app/workers/remove_unaccepted_member_invites_worker.rb b/app/workers/remove_unaccepted_member_invites_worker.rb
index 4b75b43791e..6ee2e8065c1 100644
--- a/app/workers/remove_unaccepted_member_invites_worker.rb
+++ b/app/workers/remove_unaccepted_member_invites_worker.rb
@@ -2,6 +2,8 @@
class RemoveUnacceptedMemberInvitesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :authentication_and_authorization
diff --git a/app/workers/remove_unreferenced_lfs_objects_worker.rb b/app/workers/remove_unreferenced_lfs_objects_worker.rb
index 76ab23ebbd5..b42883549ca 100644
--- a/app/workers/remove_unreferenced_lfs_objects_worker.rb
+++ b/app/workers/remove_unreferenced_lfs_objects_worker.rb
@@ -2,6 +2,8 @@
class RemoveUnreferencedLfsObjectsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/repository_archive_cache_worker.rb b/app/workers/repository_archive_cache_worker.rb
index 84f61a60953..84cafba17cf 100644
--- a/app/workers/repository_archive_cache_worker.rb
+++ b/app/workers/repository_archive_cache_worker.rb
@@ -2,6 +2,8 @@
class RepositoryArchiveCacheWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/repository_check/batch_worker.rb b/app/workers/repository_check/batch_worker.rb
index d47f738ccb0..88b40c3b4d1 100644
--- a/app/workers/repository_check/batch_worker.rb
+++ b/app/workers/repository_check/batch_worker.rb
@@ -3,6 +3,8 @@
module RepositoryCheck
class BatchWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include RepositoryCheckQueue
include ExclusiveLeaseGuard
diff --git a/app/workers/repository_check/clear_worker.rb b/app/workers/repository_check/clear_worker.rb
index 1689b9bf251..bc19b42da1a 100644
--- a/app/workers/repository_check/clear_worker.rb
+++ b/app/workers/repository_check/clear_worker.rb
@@ -3,6 +3,8 @@
module RepositoryCheck
class ClearWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include RepositoryCheckQueue
# rubocop: disable CodeReuse/ActiveRecord
diff --git a/app/workers/repository_check/dispatch_worker.rb b/app/workers/repository_check/dispatch_worker.rb
index d7a145011fa..30734926765 100644
--- a/app/workers/repository_check/dispatch_worker.rb
+++ b/app/workers/repository_check/dispatch_worker.rb
@@ -3,6 +3,8 @@
module RepositoryCheck
class DispatchWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/repository_check/single_repository_worker.rb b/app/workers/repository_check/single_repository_worker.rb
index d757b87c23a..153ad087a5f 100644
--- a/app/workers/repository_check/single_repository_worker.rb
+++ b/app/workers/repository_check/single_repository_worker.rb
@@ -3,6 +3,8 @@
module RepositoryCheck
class SingleRepositoryWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include RepositoryCheckQueue
def perform(project_id)
diff --git a/app/workers/repository_fork_worker.rb b/app/workers/repository_fork_worker.rb
index fc7999e7837..06a6f5b0600 100644
--- a/app/workers/repository_fork_worker.rb
+++ b/app/workers/repository_fork_worker.rb
@@ -2,6 +2,8 @@
class RepositoryForkWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ProjectStartImport
include ProjectImportOptions
diff --git a/app/workers/repository_remove_remote_worker.rb b/app/workers/repository_remove_remote_worker.rb
index 5e632b1b1ca..48158cda857 100644
--- a/app/workers/repository_remove_remote_worker.rb
+++ b/app/workers/repository_remove_remote_worker.rb
@@ -2,6 +2,8 @@
class RepositoryRemoveRemoteWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExclusiveLeaseGuard
feature_category :source_code_management
diff --git a/app/workers/requests_profiles_worker.rb b/app/workers/requests_profiles_worker.rb
index 106f04d9409..35c18177a81 100644
--- a/app/workers/requests_profiles_worker.rb
+++ b/app/workers/requests_profiles_worker.rb
@@ -2,6 +2,8 @@
class RequestsProfilesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/run_pipeline_schedule_worker.rb b/app/workers/run_pipeline_schedule_worker.rb
index adaa73ec831..553153848c7 100644
--- a/app/workers/run_pipeline_schedule_worker.rb
+++ b/app/workers/run_pipeline_schedule_worker.rb
@@ -2,6 +2,8 @@
class RunPipelineScheduleWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_creation
diff --git a/app/workers/schedule_merge_request_cleanup_refs_worker.rb b/app/workers/schedule_merge_request_cleanup_refs_worker.rb
index 967032f99e5..109fc3065e0 100644
--- a/app/workers/schedule_merge_request_cleanup_refs_worker.rb
+++ b/app/workers/schedule_merge_request_cleanup_refs_worker.rb
@@ -2,6 +2,8 @@
class ScheduleMergeRequestCleanupRefsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :code_review
diff --git a/app/workers/schedule_migrate_external_diffs_worker.rb b/app/workers/schedule_migrate_external_diffs_worker.rb
index 70e4d56562b..ecafe8f5e7d 100644
--- a/app/workers/schedule_migrate_external_diffs_worker.rb
+++ b/app/workers/schedule_migrate_external_diffs_worker.rb
@@ -2,6 +2,8 @@
class ScheduleMigrateExternalDiffsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext:
# This schedules the `MigrateExternalDiffsWorker`
# issue for adding context: https://gitlab.com/gitlab-org/gitlab/issues/202100
diff --git a/app/workers/self_monitoring_project_create_worker.rb b/app/workers/self_monitoring_project_create_worker.rb
index 8177efb1683..9dc3bb855fb 100644
--- a/app/workers/self_monitoring_project_create_worker.rb
+++ b/app/workers/self_monitoring_project_create_worker.rb
@@ -2,6 +2,8 @@
class SelfMonitoringProjectCreateWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExclusiveLeaseGuard
include SelfMonitoringProjectWorker
diff --git a/app/workers/self_monitoring_project_delete_worker.rb b/app/workers/self_monitoring_project_delete_worker.rb
index 4fa05d71de5..c155c57dec7 100644
--- a/app/workers/self_monitoring_project_delete_worker.rb
+++ b/app/workers/self_monitoring_project_delete_worker.rb
@@ -2,6 +2,8 @@
class SelfMonitoringProjectDeleteWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ExclusiveLeaseGuard
include SelfMonitoringProjectWorker
diff --git a/app/workers/service_desk_email_receiver_worker.rb b/app/workers/service_desk_email_receiver_worker.rb
index 1ae0764bda6..6e1609d6376 100644
--- a/app/workers/service_desk_email_receiver_worker.rb
+++ b/app/workers/service_desk_email_receiver_worker.rb
@@ -3,6 +3,8 @@
class ServiceDeskEmailReceiverWorker < EmailReceiverWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
def perform(raw)
return unless ::Gitlab::ServiceDeskEmail.enabled?
diff --git a/app/workers/snippets/schedule_bulk_repository_shard_moves_worker.rb b/app/workers/snippets/schedule_bulk_repository_shard_moves_worker.rb
index ec3d9dbdf97..88b060a454a 100644
--- a/app/workers/snippets/schedule_bulk_repository_shard_moves_worker.rb
+++ b/app/workers/snippets/schedule_bulk_repository_shard_moves_worker.rb
@@ -4,6 +4,8 @@ module Snippets
class ScheduleBulkRepositoryShardMovesWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
idempotent!
feature_category :gitaly
urgency :throttled
diff --git a/app/workers/snippets/update_repository_storage_worker.rb b/app/workers/snippets/update_repository_storage_worker.rb
index 83b655e9986..ffb01e2623b 100644
--- a/app/workers/snippets/update_repository_storage_worker.rb
+++ b/app/workers/snippets/update_repository_storage_worker.rb
@@ -5,6 +5,8 @@ module Snippets
extend ::Gitlab::Utils::Override
include ::UpdateRepositoryStorageWorker
+ sidekiq_options retry: 3
+
private
override :find_repository_storage_move
diff --git a/app/workers/ssh_keys/expired_notification_worker.rb b/app/workers/ssh_keys/expired_notification_worker.rb
index ab6d1998773..8e2e671977e 100644
--- a/app/workers/ssh_keys/expired_notification_worker.rb
+++ b/app/workers/ssh_keys/expired_notification_worker.rb
@@ -3,6 +3,8 @@
module SshKeys
class ExpiredNotificationWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :compliance_management
diff --git a/app/workers/ssh_keys/expiring_soon_notification_worker.rb b/app/workers/ssh_keys/expiring_soon_notification_worker.rb
index 3214cd7a242..190baeeb9c5 100644
--- a/app/workers/ssh_keys/expiring_soon_notification_worker.rb
+++ b/app/workers/ssh_keys/expiring_soon_notification_worker.rb
@@ -3,6 +3,8 @@
module SshKeys
class ExpiringSoonNotificationWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :compliance_management
diff --git a/app/workers/stage_update_worker.rb b/app/workers/stage_update_worker.rb
index 20db19536c3..e206a51a417 100644
--- a/app/workers/stage_update_worker.rb
+++ b/app/workers/stage_update_worker.rb
@@ -2,6 +2,8 @@
class StageUpdateWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/stuck_ci_jobs_worker.rb b/app/workers/stuck_ci_jobs_worker.rb
index 1bb17daf5b4..6b9f90ce1fc 100644
--- a/app/workers/stuck_ci_jobs_worker.rb
+++ b/app/workers/stuck_ci_jobs_worker.rb
@@ -2,6 +2,8 @@
class StuckCiJobsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :continuous_integration
diff --git a/app/workers/stuck_export_jobs_worker.rb b/app/workers/stuck_export_jobs_worker.rb
index 6d8d60d2fc0..398f2c915a9 100644
--- a/app/workers/stuck_export_jobs_worker.rb
+++ b/app/workers/stuck_export_jobs_worker.rb
@@ -3,6 +3,8 @@
# rubocop:disable Scalability/IdempotentWorker
class StuckExportJobsWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker updates export states inline and does not schedule
# other jobs.
diff --git a/app/workers/stuck_merge_jobs_worker.rb b/app/workers/stuck_merge_jobs_worker.rb
index bea9d67b3e8..e50b218e1f6 100644
--- a/app/workers/stuck_merge_jobs_worker.rb
+++ b/app/workers/stuck_merge_jobs_worker.rb
@@ -2,6 +2,8 @@
class StuckMergeJobsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :code_review
diff --git a/app/workers/system_hook_push_worker.rb b/app/workers/system_hook_push_worker.rb
index ff1f2baf058..8c801f2bed8 100644
--- a/app/workers/system_hook_push_worker.rb
+++ b/app/workers/system_hook_push_worker.rb
@@ -3,6 +3,8 @@
class SystemHookPushWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
def perform(push_data, hook_id)
diff --git a/app/workers/todos_destroyer/confidential_issue_worker.rb b/app/workers/todos_destroyer/confidential_issue_worker.rb
index b29d4168162..8a43ea3c2e0 100644
--- a/app/workers/todos_destroyer/confidential_issue_worker.rb
+++ b/app/workers/todos_destroyer/confidential_issue_worker.rb
@@ -3,6 +3,8 @@
module TodosDestroyer
class ConfidentialIssueWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include TodosDestroyerQueue
def perform(issue_id = nil, project_id = nil)
diff --git a/app/workers/todos_destroyer/destroyed_issuable_worker.rb b/app/workers/todos_destroyer/destroyed_issuable_worker.rb
index 6ca1959ff34..dcb0f6653b9 100644
--- a/app/workers/todos_destroyer/destroyed_issuable_worker.rb
+++ b/app/workers/todos_destroyer/destroyed_issuable_worker.rb
@@ -3,6 +3,8 @@
module TodosDestroyer
class DestroyedIssuableWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include TodosDestroyerQueue
idempotent!
diff --git a/app/workers/todos_destroyer/entity_leave_worker.rb b/app/workers/todos_destroyer/entity_leave_worker.rb
index 4996456dc91..166d8701f7a 100644
--- a/app/workers/todos_destroyer/entity_leave_worker.rb
+++ b/app/workers/todos_destroyer/entity_leave_worker.rb
@@ -3,6 +3,8 @@
module TodosDestroyer
class EntityLeaveWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include TodosDestroyerQueue
loggable_arguments 2
diff --git a/app/workers/todos_destroyer/group_private_worker.rb b/app/workers/todos_destroyer/group_private_worker.rb
index a1943bee2ec..30d1f74fb28 100644
--- a/app/workers/todos_destroyer/group_private_worker.rb
+++ b/app/workers/todos_destroyer/group_private_worker.rb
@@ -3,6 +3,8 @@
module TodosDestroyer
class GroupPrivateWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include TodosDestroyerQueue
def perform(group_id)
diff --git a/app/workers/todos_destroyer/private_features_worker.rb b/app/workers/todos_destroyer/private_features_worker.rb
index 6e55467234a..d6a4260a464 100644
--- a/app/workers/todos_destroyer/private_features_worker.rb
+++ b/app/workers/todos_destroyer/private_features_worker.rb
@@ -3,6 +3,8 @@
module TodosDestroyer
class PrivateFeaturesWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include TodosDestroyerQueue
def perform(project_id, user_id = nil)
diff --git a/app/workers/todos_destroyer/project_private_worker.rb b/app/workers/todos_destroyer/project_private_worker.rb
index 2a06edc666e..c4fed03f11a 100644
--- a/app/workers/todos_destroyer/project_private_worker.rb
+++ b/app/workers/todos_destroyer/project_private_worker.rb
@@ -3,6 +3,8 @@
module TodosDestroyer
class ProjectPrivateWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include TodosDestroyerQueue
def perform(project_id)
diff --git a/app/workers/trending_projects_worker.rb b/app/workers/trending_projects_worker.rb
index 5876cfb1fe7..8322110b753 100644
--- a/app/workers/trending_projects_worker.rb
+++ b/app/workers/trending_projects_worker.rb
@@ -2,6 +2,8 @@
class TrendingProjectsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :source_code_management
diff --git a/app/workers/update_container_registry_info_worker.rb b/app/workers/update_container_registry_info_worker.rb
index 14a816f25ef..cf08c650d0d 100644
--- a/app/workers/update_container_registry_info_worker.rb
+++ b/app/workers/update_container_registry_info_worker.rb
@@ -2,6 +2,8 @@
class UpdateContainerRegistryInfoWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue # rubocop:disable Scalability/CronWorkerContext
feature_category :container_registry
diff --git a/app/workers/update_external_pull_requests_worker.rb b/app/workers/update_external_pull_requests_worker.rb
index e916331ae82..ee47cbd6523 100644
--- a/app/workers/update_external_pull_requests_worker.rb
+++ b/app/workers/update_external_pull_requests_worker.rb
@@ -3,6 +3,8 @@
class UpdateExternalPullRequestsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
weight 3
loggable_arguments 2
diff --git a/app/workers/update_head_pipeline_for_merge_request_worker.rb b/app/workers/update_head_pipeline_for_merge_request_worker.rb
index 63d11d33283..f1dd250f432 100644
--- a/app/workers/update_head_pipeline_for_merge_request_worker.rb
+++ b/app/workers/update_head_pipeline_for_merge_request_worker.rb
@@ -2,6 +2,8 @@
class UpdateHeadPipelineForMergeRequestWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include PipelineQueue
queue_namespace :pipeline_processing
diff --git a/app/workers/update_highest_role_worker.rb b/app/workers/update_highest_role_worker.rb
index 952f1e511ea..b818e8177cc 100644
--- a/app/workers/update_highest_role_worker.rb
+++ b/app/workers/update_highest_role_worker.rb
@@ -3,6 +3,8 @@
class UpdateHighestRoleWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :utilization
urgency :high
weight 2
diff --git a/app/workers/update_merge_requests_worker.rb b/app/workers/update_merge_requests_worker.rb
index 46cb32e7f08..b6ec4d8a8ab 100644
--- a/app/workers/update_merge_requests_worker.rb
+++ b/app/workers/update_merge_requests_worker.rb
@@ -3,6 +3,8 @@
class UpdateMergeRequestsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :code_review
urgency :high
worker_resource_boundary :cpu
diff --git a/app/workers/update_project_statistics_worker.rb b/app/workers/update_project_statistics_worker.rb
index 336877d9f57..c93c32f4e75 100644
--- a/app/workers/update_project_statistics_worker.rb
+++ b/app/workers/update_project_statistics_worker.rb
@@ -4,6 +4,8 @@
class UpdateProjectStatisticsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
# project_id - The ID of the project for which to flush the cache.
diff --git a/app/workers/upload_checksum_worker.rb b/app/workers/upload_checksum_worker.rb
index ce43b56bbd8..765e3a63e75 100644
--- a/app/workers/upload_checksum_worker.rb
+++ b/app/workers/upload_checksum_worker.rb
@@ -3,6 +3,8 @@
class UploadChecksumWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :geo_replication
def perform(upload_id)
diff --git a/app/workers/user_status_cleanup/batch_worker.rb b/app/workers/user_status_cleanup/batch_worker.rb
index 0c1087cc4d2..84e680f2302 100644
--- a/app/workers/user_status_cleanup/batch_worker.rb
+++ b/app/workers/user_status_cleanup/batch_worker.rb
@@ -4,6 +4,8 @@ module UserStatusCleanup
# This worker will run every minute to look for user status records to clean up.
class BatchWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
include CronjobQueue
# rubocop:enable Scalability/CronWorkerContext
diff --git a/app/workers/users/create_statistics_worker.rb b/app/workers/users/create_statistics_worker.rb
index fb1b192577f..e44039f2016 100644
--- a/app/workers/users/create_statistics_worker.rb
+++ b/app/workers/users/create_statistics_worker.rb
@@ -3,6 +3,8 @@
module Users
class CreateStatisticsWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
# rubocop:disable Scalability/CronWorkerContext
# This worker does not perform work scoped to a context
include CronjobQueue
diff --git a/app/workers/users/deactivate_dormant_users_worker.rb b/app/workers/users/deactivate_dormant_users_worker.rb
index f92a12310b6..8249da11921 100644
--- a/app/workers/users/deactivate_dormant_users_worker.rb
+++ b/app/workers/users/deactivate_dormant_users_worker.rb
@@ -3,6 +3,7 @@
module Users
class DeactivateDormantUsersWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
include CronjobQueue
feature_category :utilization
diff --git a/app/workers/wait_for_cluster_creation_worker.rb b/app/workers/wait_for_cluster_creation_worker.rb
index 2e3feb1a4d1..525a72e02ef 100644
--- a/app/workers/wait_for_cluster_creation_worker.rb
+++ b/app/workers/wait_for_cluster_creation_worker.rb
@@ -2,6 +2,8 @@
class WaitForClusterCreationWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include ClusterQueue
worker_has_external_dependencies!
diff --git a/app/workers/web_hooks/destroy_worker.rb b/app/workers/web_hooks/destroy_worker.rb
index 13a5a7bf1e6..21f2ae3ab90 100644
--- a/app/workers/web_hooks/destroy_worker.rb
+++ b/app/workers/web_hooks/destroy_worker.rb
@@ -4,6 +4,8 @@ module WebHooks
class DestroyWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :integrations
urgency :low
idempotent!
diff --git a/app/workers/x509_certificate_revoke_worker.rb b/app/workers/x509_certificate_revoke_worker.rb
index abd0e5eefa7..cbf9fbb7525 100644
--- a/app/workers/x509_certificate_revoke_worker.rb
+++ b/app/workers/x509_certificate_revoke_worker.rb
@@ -3,6 +3,8 @@
class X509CertificateRevokeWorker
include ApplicationWorker
+ sidekiq_options retry: 3
+
feature_category :source_code_management
idempotent!
diff --git a/app/workers/x509_issuer_crl_check_worker.rb b/app/workers/x509_issuer_crl_check_worker.rb
index 5fc92da803c..d66ad6c1c15 100644
--- a/app/workers/x509_issuer_crl_check_worker.rb
+++ b/app/workers/x509_issuer_crl_check_worker.rb
@@ -2,6 +2,8 @@
class X509IssuerCrlCheckWorker
include ApplicationWorker
+
+ sidekiq_options retry: 3
include CronjobQueue
feature_category :source_code_management
diff --git a/changelogs/unreleased/294210-gitlab-s-automatic-elasticsearch-reindexing-should-support-retries.yml b/changelogs/unreleased/294210-gitlab-s-automatic-elasticsearch-reindexing-should-support-retries.yml
new file mode 100644
index 00000000000..8370268bf09
--- /dev/null
+++ b/changelogs/unreleased/294210-gitlab-s-automatic-elasticsearch-reindexing-should-support-retries.yml
@@ -0,0 +1,5 @@
+---
+title: Add support for retries to Advanced Search reindexing
+merge_request: 55681
+author:
+type: changed
diff --git a/changelogs/unreleased/328538-default-on.yml b/changelogs/unreleased/328538-default-on.yml
new file mode 100644
index 00000000000..0198845a814
--- /dev/null
+++ b/changelogs/unreleased/328538-default-on.yml
@@ -0,0 +1,5 @@
+---
+title: Add ability to view graph by job dependency
+merge_request: 60522
+author:
+type: added
diff --git a/changelogs/unreleased/jdsalaro-spam-check-apikey-setting-and-textbox.yml b/changelogs/unreleased/jdsalaro-spam-check-apikey-setting-and-textbox.yml
new file mode 100644
index 00000000000..78c14e1b5bc
--- /dev/null
+++ b/changelogs/unreleased/jdsalaro-spam-check-apikey-setting-and-textbox.yml
@@ -0,0 +1,5 @@
+---
+title: Add a Spamcheck API key application setting
+merge_request: 60385
+author: jdsalaro
+type: changed
diff --git a/config/feature_flags/development/ci_reset_bridge_with_subsequent_jobs.yml b/config/feature_flags/development/ci_reset_bridge_with_subsequent_jobs.yml
new file mode 100644
index 00000000000..c366aac869e
--- /dev/null
+++ b/config/feature_flags/development/ci_reset_bridge_with_subsequent_jobs.yml
@@ -0,0 +1,8 @@
+---
+name: ci_reset_bridge_with_subsequent_jobs
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/60376
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/329194
+milestone: '13.12'
+type: development
+group: group::pipeline authoring
+default_enabled: false
diff --git a/config/feature_flags/development/pipeline_graph_layers_view.yml b/config/feature_flags/development/pipeline_graph_layers_view.yml
index 80889d3078c..49f24c00fd3 100644
--- a/config/feature_flags/development/pipeline_graph_layers_view.yml
+++ b/config/feature_flags/development/pipeline_graph_layers_view.yml
@@ -5,4 +5,4 @@ rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/328538
milestone: '13.11'
type: development
group: group::pipeline authoring
-default_enabled: false
+default_enabled: true
diff --git a/config/initializers_before_autoloader/002_sidekiq.rb b/config/initializers_before_autoloader/002_sidekiq.rb
index 4ce9127a45d..8e2def08279 100644
--- a/config/initializers_before_autoloader/002_sidekiq.rb
+++ b/config/initializers_before_autoloader/002_sidekiq.rb
@@ -12,9 +12,6 @@ require 'sidekiq/web'
# CSRF protection still works (https://github.com/mperham/sidekiq/commit/315504e766c4fd88a29b7772169060afc4c40329).
Sidekiq::Web.set :sessions, false
-# Default is to retry 25 times with exponential backoff. That's too much.
-Sidekiq.default_worker_options = { retry: 3 }
-
if Rails.env.development?
Sidekiq.default_worker_options[:backtrace] = true
end
diff --git a/db/migrate/20210421190157_remove_elastic_task_null_constraint_from_elastic_reindexing_subtasks.rb b/db/migrate/20210421190157_remove_elastic_task_null_constraint_from_elastic_reindexing_subtasks.rb
new file mode 100644
index 00000000000..301e75aa093
--- /dev/null
+++ b/db/migrate/20210421190157_remove_elastic_task_null_constraint_from_elastic_reindexing_subtasks.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+class RemoveElasticTaskNullConstraintFromElasticReindexingSubtasks < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+ ELASTIC_TASK = 'elastic_task'
+
+ disable_ddl_transaction!
+
+ def up
+ remove_not_null_constraint :elastic_reindexing_subtasks, :elastic_task
+ change_column_null(:elastic_reindexing_subtasks, :elastic_task, true)
+ end
+
+ def down
+ # there may be elastic_task values which are null so we fill them with a dummy value
+ change_column_null(:elastic_reindexing_subtasks, :elastic_task, false, ELASTIC_TASK)
+ add_not_null_constraint :elastic_reindexing_subtasks, :elastic_task, validate: false
+ end
+end
diff --git a/db/migrate/20210422195929_create_elastic_reindexing_slices.rb b/db/migrate/20210422195929_create_elastic_reindexing_slices.rb
new file mode 100644
index 00000000000..a535402186c
--- /dev/null
+++ b/db/migrate/20210422195929_create_elastic_reindexing_slices.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+class CreateElasticReindexingSlices < ActiveRecord::Migration[6.0]
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ class ReindexingSubtask < ActiveRecord::Base
+ self.table_name = 'elastic_reindexing_subtasks'
+ end
+
+ class ReindexingSlice < ActiveRecord::Base
+ self.table_name = 'elastic_reindexing_slices'
+ end
+
+ def up
+ unless table_exists?(:elastic_reindexing_slices)
+ create_table_with_constraints :elastic_reindexing_slices do |t|
+ t.timestamps_with_timezone null: false
+ t.references :elastic_reindexing_subtask, foreign_key: { on_delete: :cascade }, null: false, index: { name: 'idx_elastic_reindexing_slices_on_elastic_reindexing_subtask_id' }
+ t.integer :elastic_slice, null: false, limit: 2, default: 0
+ t.integer :elastic_max_slice, null: false, limit: 2, default: 0
+ t.integer :retry_attempt, null: false, limit: 2, default: 0
+ t.text :elastic_task
+
+ t.text_limit :elastic_task, 255
+ end
+ end
+
+ ReindexingSubtask.find_each do |subtask|
+ next if ReindexingSlice.where(elastic_reindexing_subtask_id: subtask.id).exists?
+
+ ReindexingSlice.create(
+ elastic_reindexing_subtask_id: subtask.id,
+ elastic_task: subtask.elastic_task,
+ retry_attempt: 0
+ )
+ end
+ end
+
+ def down
+ drop_table :elastic_reindexing_slices
+ end
+end
diff --git a/db/migrate/20210427125400_add_spamcheck_api_key_to_application_setting.rb b/db/migrate/20210427125400_add_spamcheck_api_key_to_application_setting.rb
new file mode 100644
index 00000000000..9f411a61e5c
--- /dev/null
+++ b/db/migrate/20210427125400_add_spamcheck_api_key_to_application_setting.rb
@@ -0,0 +1,13 @@
+# frozen_string_literal: true
+
+class AddSpamcheckApiKeyToApplicationSetting < ActiveRecord::Migration[6.0]
+ def up
+ add_column :application_settings, :encrypted_spam_check_api_key, :binary
+ add_column :application_settings, :encrypted_spam_check_api_key_iv, :binary
+ end
+
+ def down
+ remove_column :application_settings, :encrypted_spam_check_api_key
+ remove_column :application_settings, :encrypted_spam_check_api_key_iv
+ end
+end
diff --git a/db/schema_migrations/20210421190157 b/db/schema_migrations/20210421190157
new file mode 100644
index 00000000000..a33c8336763
--- /dev/null
+++ b/db/schema_migrations/20210421190157
@@ -0,0 +1 @@
+943e415d3cc1090286aece96c013e54e4c07a7c16d8a7be82b560b1a3e36d513 \ No newline at end of file
diff --git a/db/schema_migrations/20210422195929 b/db/schema_migrations/20210422195929
new file mode 100644
index 00000000000..1078f45678d
--- /dev/null
+++ b/db/schema_migrations/20210422195929
@@ -0,0 +1 @@
+d72c4cbd4d34fcfb3aae5aa11c583509b41499aa8bd107957934ab57d1756544 \ No newline at end of file
diff --git a/db/schema_migrations/20210427125400 b/db/schema_migrations/20210427125400
new file mode 100644
index 00000000000..285f1efb026
--- /dev/null
+++ b/db/schema_migrations/20210427125400
@@ -0,0 +1 @@
+7632c2442c5cb9194c177df9b9106efdb433d43b34250fc434c1e1ff2f8ed8f0 \ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 3cb671164c1..3794ea381e9 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -9511,6 +9511,8 @@ CREATE TABLE application_settings (
throttle_authenticated_packages_api_enabled boolean DEFAULT false NOT NULL,
deactivate_dormant_users boolean DEFAULT false NOT NULL,
whats_new_variant smallint DEFAULT 0,
+ encrypted_spam_check_api_key bytea,
+ encrypted_spam_check_api_key_iv bytea,
CONSTRAINT app_settings_container_reg_cleanup_tags_max_list_size_positive CHECK ((container_registry_cleanup_tags_service_max_list_size >= 0)),
CONSTRAINT app_settings_ext_pipeline_validation_service_url_text_limit CHECK ((char_length(external_pipeline_validation_service_url) <= 255)),
CONSTRAINT app_settings_registry_exp_policies_worker_capacity_positive CHECK ((container_registry_expiration_policies_worker_capacity >= 0)),
@@ -12385,13 +12387,34 @@ CREATE SEQUENCE elastic_index_settings_id_seq
ALTER SEQUENCE elastic_index_settings_id_seq OWNED BY elastic_index_settings.id;
+CREATE TABLE elastic_reindexing_slices (
+ id bigint NOT NULL,
+ created_at timestamp with time zone NOT NULL,
+ updated_at timestamp with time zone NOT NULL,
+ elastic_reindexing_subtask_id bigint NOT NULL,
+ elastic_slice smallint DEFAULT 0 NOT NULL,
+ elastic_max_slice smallint DEFAULT 0 NOT NULL,
+ retry_attempt smallint DEFAULT 0 NOT NULL,
+ elastic_task text,
+ CONSTRAINT check_ca30e1396e CHECK ((char_length(elastic_task) <= 255))
+);
+
+CREATE SEQUENCE elastic_reindexing_slices_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE elastic_reindexing_slices_id_seq OWNED BY elastic_reindexing_slices.id;
+
CREATE TABLE elastic_reindexing_subtasks (
id bigint NOT NULL,
elastic_reindexing_task_id bigint NOT NULL,
alias_name text NOT NULL,
index_name_from text NOT NULL,
index_name_to text NOT NULL,
- elastic_task text NOT NULL,
+ elastic_task text,
documents_count_target integer,
documents_count integer,
created_at timestamp with time zone NOT NULL,
@@ -19505,6 +19528,8 @@ ALTER TABLE ONLY draft_notes ALTER COLUMN id SET DEFAULT nextval('draft_notes_id
ALTER TABLE ONLY elastic_index_settings ALTER COLUMN id SET DEFAULT nextval('elastic_index_settings_id_seq'::regclass);
+ALTER TABLE ONLY elastic_reindexing_slices ALTER COLUMN id SET DEFAULT nextval('elastic_reindexing_slices_id_seq'::regclass);
+
ALTER TABLE ONLY elastic_reindexing_subtasks ALTER COLUMN id SET DEFAULT nextval('elastic_reindexing_subtasks_id_seq'::regclass);
ALTER TABLE ONLY elastic_reindexing_tasks ALTER COLUMN id SET DEFAULT nextval('elastic_reindexing_tasks_id_seq'::regclass);
@@ -20756,6 +20781,9 @@ ALTER TABLE ONLY draft_notes
ALTER TABLE ONLY elastic_index_settings
ADD CONSTRAINT elastic_index_settings_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY elastic_reindexing_slices
+ ADD CONSTRAINT elastic_reindexing_slices_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY elastic_reindexing_subtasks
ADD CONSTRAINT elastic_reindexing_subtasks_pkey PRIMARY KEY (id);
@@ -21930,6 +21958,8 @@ CREATE INDEX idx_deployment_clusters_on_cluster_id_and_kubernetes_namespace ON d
CREATE INDEX idx_eaprpb_external_approval_rule_id ON external_approval_rules_protected_branches USING btree (external_approval_rule_id);
+CREATE INDEX idx_elastic_reindexing_slices_on_elastic_reindexing_subtask_id ON elastic_reindexing_slices USING btree (elastic_reindexing_subtask_id);
+
CREATE UNIQUE INDEX idx_environment_merge_requests_unique_index ON deployment_merge_requests USING btree (environment_id, merge_request_id);
CREATE INDEX idx_geo_con_rep_updated_events_on_container_repository_id ON geo_container_repository_updated_events USING btree (container_repository_id);
@@ -26589,6 +26619,9 @@ ALTER TABLE ONLY resource_milestone_events
ALTER TABLE ONLY namespace_root_storage_statistics
ADD CONSTRAINT fk_rails_a0702c430b FOREIGN KEY (namespace_id) REFERENCES namespaces(id) ON DELETE CASCADE;
+ALTER TABLE ONLY elastic_reindexing_slices
+ ADD CONSTRAINT fk_rails_a17d86aeb9 FOREIGN KEY (elastic_reindexing_subtask_id) REFERENCES elastic_reindexing_subtasks(id) ON DELETE CASCADE;
+
ALTER TABLE ONLY project_aliases
ADD CONSTRAINT fk_rails_a1804f74a7 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
diff --git a/doc/.vale/gitlab/SubstitutionSuggestions.yml b/doc/.vale/gitlab/SubstitutionSuggestions.yml
index d2b8b37b301..bc9a6e3c70d 100644
--- a/doc/.vale/gitlab/SubstitutionSuggestions.yml
+++ b/doc/.vale/gitlab/SubstitutionSuggestions.yml
@@ -15,6 +15,7 @@ swap:
active users: '"billable users"'
docs: '"documentation"'
GFM: '"GitLab Flavored Markdown"'
+ OAuth2: '"OAuth 2.0"'
once that: '"after that"'
once the: '"after the"'
once you: '"after you"'
diff --git a/doc/api/jobs.md b/doc/api/jobs.md
index 375d52c3c58..6647b53bcb4 100644
--- a/doc/api/jobs.md
+++ b/doc/api/jobs.md
@@ -160,7 +160,7 @@ GET /projects/:id/pipelines/:pipeline_id/jobs
| Attribute | Type | Required | Description |
|-------------------|--------------------------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `id` | integer/string | yes | ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user. |
-| `pipeline_id` | integer | yes | ID of a pipeline. |
+| `pipeline_id` | integer | yes | ID of a pipeline. Can also be obtained in CI jobs via the [predefined CI variable](../ci/variables/predefined_variables.md) `CI_PIPELINE_ID`. |
| `scope` | string **or** array of strings | no | Scope of jobs to show. Either one of or an array of the following: `created`, `pending`, `running`, `failed`, `success`, `canceled`, `skipped`, or `manual`. All jobs are returned if `scope` is not provided. |
| `include_retried` | boolean | no | Include retried jobs in the response. Defaults to `false`. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/272627) in GitLab 13.9. |
diff --git a/doc/api/settings.md b/doc/api/settings.md
index b3e17af2c5c..38251550ae4 100644
--- a/doc/api/settings.md
+++ b/doc/api/settings.md
@@ -388,6 +388,7 @@ listed in the descriptions of the relevant settings.
| `sourcegraph_url` | string | required by: `sourcegraph_enabled` | The Sourcegraph instance URL for integration. |
| `spam_check_endpoint_enabled` | boolean | no | Enables Spam Check via external API endpoint. Default is `false`. |
| `spam_check_endpoint_url` | string | no | URL of the external Spam Check service endpoint. |
+| `spam_check_api_key` | string | no | The API key used by GitLab for accessing the Spam Check service endpoint. |
| `terminal_max_session_time` | integer | no | Maximum time for web terminal websocket connection (in seconds). Set to `0` for unlimited time. |
| `terms` | text | required by: `enforce_terms` | (**Required by:** `enforce_terms`) Markdown content for the ToS. |
| `throttle_authenticated_api_enabled` | boolean | no | (**If enabled, requires:** `throttle_authenticated_api_period_in_seconds` and `throttle_authenticated_api_requests_per_period`) Enable authenticated API request rate limit. Helps reduce request volume (for example, from crawlers or abusive bots). |
diff --git a/doc/ci/pipelines/index.md b/doc/ci/pipelines/index.md
index 05413ff658b..fa8a4cedf6f 100644
--- a/doc/ci/pipelines/index.md
+++ b/doc/ci/pipelines/index.md
@@ -353,9 +353,10 @@ you visualize the entire pipeline, including all cross-project inter-dependencie
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/298973) in GitLab 13.12.
> - [Deployed behind a feature flag](../../user/feature_flags.md), disabled by default.
-> - Disabled on GitLab.com.
-> - Not recommended for production use.
-> - To use in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-job-dependency-view). **(FREE SELF)**
+> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/328538) in GitLab 13.12.
+> - Enabled on GitLab.com.
+> - Recommended for production use.
+> - To disable in GitLab self-managed instances, ask a GitLab administrator to [disable it](#enable-or-disable-job-dependency-view). **(FREE SELF)**
This in-development feature might not be available for your use. There can be
[risks when enabling features still in development](../../user/feature_flags.md#risks-when-enabling-features-still-in-development).
@@ -383,10 +384,9 @@ To see the full `needs` dependency tree for a job, hover over it:
#### Enable or disable job dependency view **(FREE SELF)**
-The job dependency view is under development and not ready for production use. It is
-deployed behind a feature flag that is **disabled by default**.
+The job dependency view is deployed behind a feature flag that is **enabled by default**.
[GitLab administrators with access to the GitLab Rails console](../../administration/feature_flags.md)
-can enable it.
+can disable it.
To enable it:
diff --git a/doc/ci/variables/README.md b/doc/ci/variables/README.md
index 5796a5c6b7d..c18695c6719 100644
--- a/doc/ci/variables/README.md
+++ b/doc/ci/variables/README.md
@@ -603,11 +603,18 @@ to enable the `restrict_user_defined_variables` setting. The setting is `disable
## Limit the environment scope of a CI/CD variable
-You can limit the environment scope of a variable by
-[defining which environments](../environments/index.md) it can be available for.
+By default, all CI/CD variables are available to any job in a pipeline. Therefore, if a project uses a
+compromised tool in a test job, it could expose all CI/CD variables that a deployment job used. This is
+a common scenario in supply chain attacks. GitLab helps mitigate supply chain attacks by limiting
+the environment scope of a variable. GitLab does this by
+[defining which environments and corresponding jobs](../environments/index.md)
+the variable can be available for.
To learn more about scoping environments, see [Scoping environments with specs](../environments/index.md#scoping-environments-with-specs).
+To learn more about ensuring CI/CD variables are only exposed in pipelines running from protected
+branches or tags, see [Protect a CI/CD Variable](#protect-a-cicd-variable).
+
## Deployment variables
Integrations that are responsible for deployment configuration can define their own
diff --git a/doc/development/api_graphql_styleguide.md b/doc/development/api_graphql_styleguide.md
index b4db5ebeaeb..00b2ac59c14 100644
--- a/doc/development/api_graphql_styleguide.md
+++ b/doc/development/api_graphql_styleguide.md
@@ -79,7 +79,7 @@ Requests time out at 30 seconds.
## Breaking changes
The GitLab GraphQL API is [versionless](https://graphql.org/learn/best-practices/#versioning) which means
-developers must familiarize themselves with our [deprecation cycle of breaking changes](#breaking-changes).
+developers must familiarize themselves with our [Deprecation and Removal process](../api/graphql/index.md#deprecation-and-removal-process).
Breaking changes are:
@@ -890,7 +890,7 @@ The main use case for this is one resolver to find all items, and another to
find one specific one. For this, we supply convenience methods:
- `BaseResolver.single`, which constructs a new resolver that selects the first item.
-- `BaseResolver.last`, with constructs a resolver that selects the last item.
+- `BaseResolver.last`, which constructs a resolver that selects the last item.
The correct singular type is inferred from the collection type, so we don't have
to define the `type` here.
@@ -996,7 +996,7 @@ end
For this reason, whenever you call a resolver (mainly in tests - as framework
abstractions Resolvers should not be considered re-usable, finders are to be
preferred), remember to call the `ready?` method and check the boolean flag
-before calling `resolve`! An example can be seen in our [`GraphQLHelpers`](https://gitlab.com/gitlab-org/gitlab/-/blob/2d395f32d2efbb713f7bc861f96147a2a67e92f2/spec/support/helpers/graphql_helpers.rb#L20-27).
+before calling `resolve`! An example can be seen in our [`GraphqlHelpers`](https://gitlab.com/gitlab-org/gitlab/-/blob/2d395f32d2efbb713f7bc861f96147a2a67e92f2/spec/support/helpers/graphql_helpers.rb#L20-27).
### Look-Ahead
@@ -1184,7 +1184,7 @@ are returned as the result of the mutation.
The service-oriented architecture in GitLab means that most mutations call a Create, Delete, or Update
service, for example `UpdateMergeRequestService`.
-For Update mutations, a you might want to only update one aspect of an object, and thus only need a
+For Update mutations, you might want to only update one aspect of an object, and thus only need a
_fine-grained_ mutation, for example `MergeRequest::SetWip`.
It's acceptable to have both fine-grained mutations and coarse-grained mutations, but be aware
diff --git a/doc/development/sidekiq_style_guide.md b/doc/development/sidekiq_style_guide.md
index 4bcd5e50fae..82b6a54540f 100644
--- a/doc/development/sidekiq_style_guide.md
+++ b/doc/development/sidekiq_style_guide.md
@@ -15,6 +15,36 @@ All workers should include `ApplicationWorker` instead of `Sidekiq::Worker`,
which adds some convenience methods and automatically sets the queue based on
the worker's name.
+## Retries
+
+Sidekiq defaults to using [25
+retries](https://github.com/mperham/sidekiq/wiki/Error-Handling#automatic-job-retry),
+with back-off between each retry. 25 retries means that the last retry
+would happen around three weeks after the first attempt (assuming all 24
+prior retries failed).
+
+For most workers - especially [idempotent workers](#idempotent-jobs) -
+the default of 25 retries is more than sufficient. Many of our older
+workers declare 3 retries, which used to be the default within the
+GitLab application. 3 retries happen over the course of a couple of
+minutes, so the jobs are prone to failing completely.
+
+A lower retry count may be applicable if any of the below apply:
+
+1. The worker contacts an external service and we do not provide
+ guarantees on delivery. For example, webhooks.
+1. The worker is not idempotent and running it multiple times could
+ leave the system in an inconsistent state. For example, a worker that
+ posts a system note and then performs an action: if the second step
+ fails and the worker retries, the system note will be posted again.
+1. The worker is a cronjob that runs frequently. For example, if a cron
+ job runs every hour, then we don't need to retry beyond an hour
+ because we don't need two of the same job running at once.
+
+Each retry for a worker is counted as a failure in our metrics. A worker
+which always fails 9 times and succeeds on the 10th would have a 90%
+error rate.
+
## Dedicated Queues
All workers should use their own queue, which is automatically set based on the
@@ -719,6 +749,23 @@ possible situations:
1. A job is queued by a node running the newer version of the application, but
executed on a node running an older version of the application.
+### Adding new workers
+
+On GitLab.com, we [do not currently have a Sidekiq deployment in the
+canary stage](https://gitlab.com/gitlab-org/gitlab/-/issues/19239). This
+means that a new worker than can be scheduled from an HTTP endpoint may
+be scheduled from canary but not run on Sidekiq until the full
+production deployment is complete. This can be several hours later than
+scheduling the job. For some workers, this will not be a problem. For
+others - particularly [latency-sensitive
+jobs](#latency-sensitive-jobs) - this will result in a poor user
+experience.
+
+This only applies to new worker classes when they are first introduced.
+As we recommend [using feature flags](feature_flags/) as a general
+development process, it's best to control the entire change (including
+scheduling of the new Sidekiq worker) with a feature flag.
+
### Changing the arguments for a worker
Jobs need to be backward and forward compatible between consecutive versions
diff --git a/doc/user/analytics/index.md b/doc/user/analytics/index.md
index e6f7b6750b3..5ab5fe9300a 100644
--- a/doc/user/analytics/index.md
+++ b/doc/user/analytics/index.md
@@ -10,23 +10,55 @@ info: To determine the technical writer assigned to the Stage/Group associated w
When we describe GitLab analytics, we use the following terms:
-- Cycle time: The duration of your value stream, from start to finish. Often displayed in combination with "lead time." GitLab measures cycle time from issue creation to issue close. GitLab displays cycle time in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
-- DORA (DevOps Research and Assessment) ["Four Keys"](https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance):
- - Speed
- - Deployment Frequency: How often an organization successfully releases to production.
- - Lead Time for Changes: The time it takes for a commit to get into production. This differs from ordinary "lead time" as it "focuses on measuring only the time to deliver a feature once it has been developed",
-as described in ([Measuring DevOps Performance](https://devops.com/measuring-devops-performance/)).
- - Stability
- - Change Failure Rate: The percentage of deployments causing a failure in production.
- - Time to Restore Service: How long it takes an organization to recover from a failure in production.
-- Lead time: The duration of the work itself. Often displayed in combination with "cycle time." GitLab measures from issue first merge request creation to issue close. Note: Work started before the creation of the first merge request. We [plan to start measuring from "issue first commit"](https://gitlab.com/gitlab-org/gitlab/-/issues/328459) as a better proxy, although still imperfect. GitLab displays lead time in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
-- MTTC (Mean Time to Change): The average duration between idea and delivery. GitLab measures MTTC from issue creation to the issue's latest related merge request's deployment to production.
-- MTTD (Mean Time to Detect): The average duration that a bug goes undetected in production. GitLab measures MTTD from deployment of bug to issue creation.
-- MTTM (Mean Time To Merge): The average lifespan of a merge request. GitLab measures MTTM from merge request creation to merge request merge (and closed/un-merged merge requests are excluded). For more information, see [Merge Request Analytics](merge_request_analytics.md).
-- MTTR (Mean Time to Recover/Repair/Resolution/Resolve/Restore): The average duration that a bug is not fixed in production. GitLab measures MTTR from deployment of bug to deployment of fix.
-- Throughput: The number of issues closed or merge requests merged (not closed) in some period of time. Often measured per sprint. GitLab displays merge request throughput in [Merge Request Analytics](merge_request_analytics.md).
-- Value Stream: The entire work process that is followed to deliver value to customers. For example, the [DevOps lifecycle](https://about.gitlab.com/stages-devops-lifecycle/) is a value stream that starts with "plan" and ends with "monitor". GitLab helps you track your value stream using [Value Stream Analytics](value_stream_analytics.md).
-- Velocity: The total issue burden completed in some period of time. The burden is usually measured in points or weight, often per sprint. For example, your velocity may be "30 points per sprint". GitLab measures velocity as the total points/weight of issues closed in a given period of time.
+- **Cycle time:** The duration of your value stream, from start to finish. Often displayed in combination with "lead time." GitLab measures cycle time from issue creation to issue close. GitLab displays cycle time in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
+- **DORA (DevOps Research and Assessment)** ["Four Keys"](https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance):
+ - **Speed/Velocity**
+
+ - **Deployment Frequency:** How often an organization successfully releases to production. GitLab
+ measures this as the number of deployments to a
+ [production environment](../../ci/environments/index.md#deployment-tier-of-environments) in
+ the given time period.
+ - **Lead Time for Changes:** The time it takes for a commit to get into production. (1) GitLab
+ measures this as the median duration between merge request merge and deployment to a
+ [production environment](../../ci/environments/index.md#deployment-tier-of-environments) for
+ all MRs deployed in the given time period. This measure under-estimates lead time because
+ merge time is always later than commit time. The
+ [standard definition](https://github.com/GoogleCloudPlatform/fourkeys/blob/main/METRICS.md#lead-time-for-changes) uses median commit time. We plan to start
+ [measuring from "issue first commit"](https://gitlab.com/gitlab-org/gitlab/-/issues/328459)
+ as a better proxy, although still imperfect.
+
+ - **Stability**
+ - **Change Failure Rate:** The percentage of deployments causing a failure in production.
+ GitLab measures this as the number of [incidents](../../operations/incident_management/incidents.md)
+ divided by the number of deployments to a
+ [production environment](../../ci/environments/index.md#deployment-tier-of-environments) in
+ the given time period. This assumes:
+
+ - All incidents are related to a production environment.
+ - Incidents and deployments have a strictly one-to-one relationship (meaning any incident is
+ related to only one production deployment, and any production deployment is related to no
+ more than one incident).
+
+ - **Time to Restore Service:** How long it takes an organization to recover from a failure in
+ production. GitLab measures this as the average time required to close the
+ [incidents](../../operations/incident_management/incidents.md) in the given time period.
+ This assumes:
+
+ - All incidents are related to a [production environment](../../ci/environments/index.md#deployment-tier-of-environments).
+ - Incidents and deployments have a strictly one-to-one relationship (meaning any incident is related to only one production deployment, and any production deployment is related to no more than one incident).
+
+- **Lead time:** The duration of the work itself. For more information, read [Lead time for changes](#lead-time-for-changes). Often displayed in combination with "cycle time." GitLab measures from issue first merge request creation to issue close. This approach under-estimates lead time because merge request creation is always later than commit time. GitLab displays lead time in [group-level Value Stream Analytics](../group/value_stream_analytics/index.md).
+- **MTTC (Mean Time to Change):** The average duration between idea and delivery. GitLab measures MTTC from issue creation to the issue's latest related merge request's deployment to production.
+- **MTTD (Mean Time to Detect):** The average duration that a bug goes undetected in production. GitLab measures MTTD from deployment of bug to issue creation.
+- **MTTM (Mean Time To Merge):** The average lifespan of a merge request. GitLab measures MTTM from merge request creation to merge request merge (and closed/un-merged merge requests are excluded). For more information, see [Merge Request Analytics](merge_request_analytics.md).
+- **MTTR (Mean Time to Recover/Repair/Resolution/Resolve/Restore):** The average duration that a bug is not fixed in production. GitLab measures MTTR from deployment of bug to deployment of fix.
+- **Throughput:** The number of issues closed or merge requests merged (not closed) in some period of time. Often measured per sprint. GitLab displays merge request throughput in [Merge Request Analytics](merge_request_analytics.md).
+- **Value Stream:** The entire work process that is followed to deliver value to customers. For example, the [DevOps lifecycle](https://about.gitlab.com/stages-devops-lifecycle/) is a value stream that starts with "plan" and ends with "monitor". GitLab helps you track your value stream using [Value Stream Analytics](value_stream_analytics.md).
+- **Velocity:** The total issue burden completed in some period of time. The burden is usually measured in points or weight, often per sprint. For example, your velocity may be "30 points per sprint". GitLab measures velocity as the total points/weight of issues closed in a given period of time.
+
+### Lead time for changes
+
+"Lead Time for Changes" differs from ordinary "Lead Time" because it "focuses on measuring only the time to deliver a feature once it has been developed", as described in ([Measuring DevOps Performance](https://devops.com/measuring-devops-performance/)).
## Instance-level analytics
diff --git a/doc/user/group/settings/import_export.md b/doc/user/group/settings/import_export.md
index bb7c1e26544..18574912ce1 100644
--- a/doc/user/group/settings/import_export.md
+++ b/doc/user/group/settings/import_export.md
@@ -71,7 +71,7 @@ For more details on the specific data persisted in a group export, see the
![Export group panel](img/export_panel_v13_0.png)
1. After the export is generated, you should receive an e-mail with a link to the [exported contents](#exported-contents)
- in a compressed tar archive, with contents in JSON format.
+ in a compressed tar archive, with contents in NDJSON format.
1. Alternatively, you can come back to the project settings and download the
file from there by clicking **Download export**, or generate a new file by clicking **Regenerate export**.
diff --git a/lib/api/settings.rb b/lib/api/settings.rb
index b40ff469af2..f54b92134dc 100644
--- a/lib/api/settings.rb
+++ b/lib/api/settings.rb
@@ -154,6 +154,7 @@ module API
optional :spam_check_endpoint_enabled, type: Boolean, desc: 'Enable Spam Check via external API endpoint'
given spam_check_endpoint_enabled: ->(val) { val } do
requires :spam_check_endpoint_url, type: String, desc: 'The URL of the external Spam Check service endpoint'
+ requires :spam_check_api_key, type: String, desc: 'The API key used by GitLab for accessing the Spam Check service endpoint'
end
optional :terminal_max_session_time, type: Integer, desc: 'Maximum time for web terminal websocket connection (in seconds). Set to 0 for unlimited time.'
optional :usage_ping_enabled, type: Boolean, desc: 'Every week GitLab will report license usage back to GitLab, Inc.'
diff --git a/lib/gitlab/sidekiq_config/worker.rb b/lib/gitlab/sidekiq_config/worker.rb
index 0f9dc3a3053..aea4209f631 100644
--- a/lib/gitlab/sidekiq_config/worker.rb
+++ b/lib/gitlab/sidekiq_config/worker.rb
@@ -6,10 +6,9 @@ module Gitlab
include Comparable
attr_reader :klass
- delegate :feature_category_not_owned?, :get_feature_category, :get_tags,
- :get_urgency, :get_weight, :get_worker_resource_boundary,
- :idempotent?, :queue, :queue_namespace,
- :worker_has_external_dependencies?,
+ delegate :feature_category_not_owned?, :get_feature_category, :get_sidekiq_options,
+ :get_tags, :get_urgency, :get_weight, :get_worker_resource_boundary,
+ :idempotent?, :queue, :queue_namespace, :worker_has_external_dependencies?,
to: :klass
def initialize(klass, ee:)
@@ -65,6 +64,10 @@ module Gitlab
def queue_and_weight
[queue, get_weight]
end
+
+ def retries
+ get_sidekiq_options['retry']
+ end
end
end
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 701326cab5c..843f35a6863 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -18231,6 +18231,51 @@ msgstr ""
msgid "Iterations"
msgstr ""
+msgid "Iterations|Automated scheduling"
+msgstr ""
+
+msgid "Iterations|Cadence name"
+msgstr ""
+
+msgid "Iterations|Create cadence"
+msgstr ""
+
+msgid "Iterations|Duration"
+msgstr ""
+
+msgid "Iterations|Future iterations"
+msgstr ""
+
+msgid "Iterations|Iteration scheduling will be handled automatically"
+msgstr ""
+
+msgid "Iterations|New iteration cadence"
+msgstr ""
+
+msgid "Iterations|Number of future iterations you would like to have scheduled"
+msgstr ""
+
+msgid "Iterations|Select duration"
+msgstr ""
+
+msgid "Iterations|Select number"
+msgstr ""
+
+msgid "Iterations|Select start date"
+msgstr ""
+
+msgid "Iterations|Start date"
+msgstr ""
+
+msgid "Iterations|The duration for each iteration (in weeks)"
+msgstr ""
+
+msgid "Iterations|The start date of your first iteration"
+msgstr ""
+
+msgid "Iterations|Title"
+msgstr ""
+
msgid "Iteration|Dates cannot overlap with other existing Iterations within this group"
msgstr ""
@@ -30275,6 +30320,9 @@ msgstr ""
msgid "SourcegraphPreferences|Uses a custom %{linkStart}Sourcegraph instance%{linkEnd}."
msgstr ""
+msgid "Spam Check API Key"
+msgstr ""
+
msgid "Spam Logs"
msgstr ""
@@ -31623,6 +31671,9 @@ msgid_plural "The %{type} contains the following errors:"
msgstr[0] ""
msgstr[1] ""
+msgid "The API key used by GitLab for accessing the Spam Check service endpoint"
+msgstr ""
+
msgid "The Advanced Search in GitLab is a powerful search service that saves you time. Instead of creating duplicate code and wasting time, you can now search for code within other teams that can help your own project."
msgstr ""
@@ -34073,6 +34124,9 @@ msgstr ""
msgid "Unable to load the merge request widget. Try reloading the page."
msgstr ""
+msgid "Unable to save cadence. Please try again"
+msgstr ""
+
msgid "Unable to save iteration. Please try again"
msgstr ""
diff --git a/spec/features/admin/admin_settings_spec.rb b/spec/features/admin/admin_settings_spec.rb
index 57154619258..4e27d3833db 100644
--- a/spec/features/admin/admin_settings_spec.rb
+++ b/spec/features/admin/admin_settings_spec.rb
@@ -426,6 +426,7 @@ RSpec.describe 'Admin updates settings' do
fill_in 'IPs per user', with: 15
check 'Enable Spam Check via external API endpoint'
fill_in 'URL of the external Spam Check endpoint', with: 'https://www.example.com/spamcheck'
+ fill_in 'Spam Check API Key', with: 'SPAM_CHECK_API_KEY'
click_button 'Save changes'
end
diff --git a/spec/features/issues/spam_issues_spec.rb b/spec/features/issues/spam_issues_spec.rb
index 461030d3176..70d7deadec3 100644
--- a/spec/features/issues/spam_issues_spec.rb
+++ b/spec/features/issues/spam_issues_spec.rb
@@ -14,6 +14,7 @@ RSpec.describe 'New issue', :js do
Gitlab::CurrentSettings.update!(
akismet_enabled: true,
akismet_api_key: 'testkey',
+ spam_check_api_key: 'testkey',
recaptcha_enabled: true,
recaptcha_site_key: 'test site key',
recaptcha_private_key: 'test private key'
diff --git a/spec/features/snippets/spam_snippets_spec.rb b/spec/features/snippets/spam_snippets_spec.rb
index 54a56ac962c..3748a916780 100644
--- a/spec/features/snippets/spam_snippets_spec.rb
+++ b/spec/features/snippets/spam_snippets_spec.rb
@@ -18,6 +18,7 @@ RSpec.describe 'snippet editor with spam', skip: "Will be handled in https://git
Gitlab::CurrentSettings.update!(
akismet_enabled: true,
akismet_api_key: 'testkey',
+ spam_check_api_key: 'testkey',
recaptcha_enabled: true,
recaptcha_site_key: 'test site key',
recaptcha_private_key: 'test private key'
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index e92941e0328..dabb0f8ee8d 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -4303,26 +4303,80 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do
end
end
- describe 'reset_ancestor_bridges!' do
- let_it_be(:pipeline) { create(:ci_pipeline, :created) }
+ describe '#reset_source_bridge!' do
+ let(:pipeline) { create(:ci_pipeline, :created, project: project) }
+
+ subject(:reset_bridge) { pipeline.reset_source_bridge!(project.owner) }
+
+ # This whole block will be removed by https://gitlab.com/gitlab-org/gitlab/-/issues/329194
+ # It contains some duplicate checks.
+ context 'when the FF ci_reset_bridge_with_subsequent_jobs is disabled' do
+ before do
+ stub_feature_flags(ci_reset_bridge_with_subsequent_jobs: false)
+ end
+
+ context 'when the pipeline is a child pipeline and the bridge is depended' do
+ let!(:parent_pipeline) { create(:ci_pipeline) }
+ let!(:bridge) { create_bridge(parent_pipeline, pipeline, true) }
+
+ it 'marks source bridge as pending' do
+ reset_bridge
+
+ expect(bridge.reload).to be_pending
+ end
+
+ context 'when the parent pipeline has subsequent jobs after the bridge' do
+ let!(:after_bridge_job) { create(:ci_build, :skipped, pipeline: parent_pipeline, stage_idx: bridge.stage_idx + 1) }
+
+ it 'does not touch subsequent jobs of the bridge' do
+ reset_bridge
+
+ expect(after_bridge_job.reload).to be_skipped
+ end
+ end
+
+ context 'when the parent pipeline has a dependent upstream pipeline' do
+ let!(:upstream_bridge) do
+ create_bridge(create(:ci_pipeline, project: create(:project)), parent_pipeline, true)
+ end
+
+ it 'marks all source bridges as pending' do
+ reset_bridge
+
+ expect(bridge.reload).to be_pending
+ expect(upstream_bridge.reload).to be_pending
+ end
+ end
+ end
+ end
context 'when the pipeline is a child pipeline and the bridge is depended' do
let!(:parent_pipeline) { create(:ci_pipeline) }
let!(:bridge) { create_bridge(parent_pipeline, pipeline, true) }
it 'marks source bridge as pending' do
- pipeline.reset_ancestor_bridges!
+ reset_bridge
expect(bridge.reload).to be_pending
end
+ context 'when the parent pipeline has subsequent jobs after the bridge' do
+ let!(:after_bridge_job) { create(:ci_build, :skipped, pipeline: parent_pipeline, stage_idx: bridge.stage_idx + 1) }
+
+ it 'marks subsequent jobs of the bridge as processable' do
+ reset_bridge
+
+ expect(after_bridge_job.reload).to be_created
+ end
+ end
+
context 'when the parent pipeline has a dependent upstream pipeline' do
let!(:upstream_bridge) do
create_bridge(create(:ci_pipeline, project: create(:project)), parent_pipeline, true)
end
it 'marks all source bridges as pending' do
- pipeline.reset_ancestor_bridges!
+ reset_bridge
expect(bridge.reload).to be_pending
expect(upstream_bridge.reload).to be_pending
@@ -4335,7 +4389,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do
let!(:bridge) { create_bridge(parent_pipeline, pipeline, false) }
it 'does not touch source bridge' do
- pipeline.reset_ancestor_bridges!
+ reset_bridge
expect(bridge.reload).to be_success
end
@@ -4346,7 +4400,7 @@ RSpec.describe Ci::Pipeline, :mailer, factory_default: :keep do
end
it 'does not touch any source bridge' do
- pipeline.reset_ancestor_bridges!
+ reset_bridge
expect(bridge.reload).to be_success
expect(upstream_bridge.reload).to be_success
diff --git a/spec/requests/api/settings_spec.rb b/spec/requests/api/settings_spec.rb
index b61ccee512a..01a0d124b42 100644
--- a/spec/requests/api/settings_spec.rb
+++ b/spec/requests/api/settings_spec.rb
@@ -41,6 +41,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting do
expect(json_response['snippet_size_limit']).to eq(50.megabytes)
expect(json_response['spam_check_endpoint_enabled']).to be_falsey
expect(json_response['spam_check_endpoint_url']).to be_nil
+ expect(json_response['spam_check_api_key']).to be_nil
expect(json_response['wiki_page_max_content_bytes']).to be_a(Integer)
expect(json_response['require_admin_approval_after_user_signup']).to eq(true)
expect(json_response['personal_access_token_prefix']).to be_nil
@@ -123,6 +124,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting do
raw_blob_request_limit: 300,
spam_check_endpoint_enabled: true,
spam_check_endpoint_url: 'https://example.com/spam_check',
+ spam_check_api_key: 'SPAM_CHECK_API_KEY',
disabled_oauth_sign_in_sources: 'unknown',
import_sources: 'github,bitbucket',
wiki_page_max_content_bytes: 12345,
@@ -168,6 +170,7 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting do
expect(json_response['raw_blob_request_limit']).to eq(300)
expect(json_response['spam_check_endpoint_enabled']).to be_truthy
expect(json_response['spam_check_endpoint_url']).to eq('https://example.com/spam_check')
+ expect(json_response['spam_check_api_key']).to eq('SPAM_CHECK_API_KEY')
expect(json_response['disabled_oauth_sign_in_sources']).to eq([])
expect(json_response['import_sources']).to match_array(%w(github bitbucket))
expect(json_response['wiki_page_max_content_bytes']).to eq(12345)
@@ -460,13 +463,32 @@ RSpec.describe API::Settings, 'Settings', :do_not_mock_admin_mode_setting do
context "missing spam_check_endpoint_url value when spam_check_endpoint_enabled is true" do
it "returns a blank parameter error message" do
- put api("/application/settings", admin), params: { spam_check_endpoint_enabled: true }
+ put api("/application/settings", admin), params: { spam_check_endpoint_enabled: true, spam_check_api_key: "SPAM_CHECK_API_KEY" }
expect(response).to have_gitlab_http_status(:bad_request)
expect(json_response['error']).to eq('spam_check_endpoint_url is missing')
end
end
+ context "missing spam_check_api_key value when spam_check_endpoint_enabled is true" do
+ it "returns a blank parameter error message" do
+ put api("/application/settings", admin), params: { spam_check_endpoint_enabled: true, spam_check_endpoint_url: "https://example.com/spam_check" }
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ expect(json_response['error']).to eq('spam_check_api_key is missing')
+ end
+ end
+
+ context "overly long spam_check_api_key" do
+ it "fails to update the settings with too long spam_check_api_key" do
+ put api("/application/settings", admin), params: { spam_check_api_key: "0123456789" * 500 }
+
+ expect(response).to have_gitlab_http_status(:bad_request)
+ message = json_response["message"]
+ expect(message["spam_check_api_key"]).to include(a_string_matching("is too long"))
+ end
+ end
+
context "personal access token prefix settings" do
context "handles validation errors" do
it "fails to update the settings with too long prefix" do
diff --git a/spec/workers/every_sidekiq_worker_spec.rb b/spec/workers/every_sidekiq_worker_spec.rb
index 5a22529b6d6..de848e59d57 100644
--- a/spec/workers/every_sidekiq_worker_spec.rb
+++ b/spec/workers/every_sidekiq_worker_spec.rb
@@ -104,4 +104,374 @@ RSpec.describe 'Every Sidekiq worker' do
end
end
end
+
+ context 'retries' do
+ let(:cronjobs) do
+ workers_without_defaults.select { |worker| worker.klass < CronjobQueue }
+ end
+
+ let(:retry_exception_workers) do
+ workers_without_defaults.select { |worker| retry_exceptions.has_key?(worker.klass.to_s) }
+ end
+
+ let(:retry_exceptions) do
+ {
+ 'AdjournedProjectDeletionWorker' => 3,
+ 'AdminEmailsWorker' => 3,
+ 'Analytics::CodeReviewMetricsWorker' => 3,
+ 'Analytics::DevopsAdoption::CreateSnapshotWorker' => 3,
+ 'Analytics::InstanceStatistics::CounterJobWorker' => 3,
+ 'Analytics::UsageTrends::CounterJobWorker' => 3,
+ 'ApprovalRules::ExternalApprovalRulePayloadWorker' => 3,
+ 'ApproveBlockedPendingApprovalUsersWorker' => 3,
+ 'ArchiveTraceWorker' => 3,
+ 'AuthorizedKeysWorker' => 3,
+ 'AuthorizedProjectUpdate::ProjectCreateWorker' => 3,
+ 'AuthorizedProjectUpdate::ProjectGroupLinkCreateWorker' => 3,
+ 'AuthorizedProjectUpdate::UserRefreshOverUserRangeWorker' => 3,
+ 'AuthorizedProjectUpdate::UserRefreshWithLowUrgencyWorker' => 3,
+ 'AuthorizedProjectsWorker' => 3,
+ 'AutoDevops::DisableWorker' => 3,
+ 'AutoMergeProcessWorker' => 3,
+ 'BackgroundMigrationWorker' => 3,
+ 'BuildFinishedWorker' => 3,
+ 'BuildHooksWorker' => 3,
+ 'BuildQueueWorker' => 3,
+ 'BuildSuccessWorker' => 3,
+ 'BulkImportWorker' => false,
+ 'BulkImports::EntityWorker' => false,
+ 'BulkImports::PipelineWorker' => false,
+ 'Chaos::CpuSpinWorker' => 3,
+ 'Chaos::DbSpinWorker' => 3,
+ 'Chaos::KillWorker' => false,
+ 'Chaos::LeakMemWorker' => 3,
+ 'Chaos::SleepWorker' => 3,
+ 'ChatNotificationWorker' => false,
+ 'Ci::BatchResetMinutesWorker' => 10,
+ 'Ci::BuildPrepareWorker' => 3,
+ 'Ci::BuildScheduleWorker' => 3,
+ 'Ci::BuildTraceChunkFlushWorker' => 3,
+ 'Ci::CreateCrossProjectPipelineWorker' => 3,
+ 'Ci::DailyBuildGroupReportResultsWorker' => 3,
+ 'Ci::DeleteObjectsWorker' => 0,
+ 'Ci::DropPipelineWorker' => 3,
+ 'Ci::InitialPipelineProcessWorker' => 3,
+ 'Ci::MergeRequests::AddTodoWhenBuildFailsWorker' => 3,
+ 'Ci::PipelineArtifacts::CoverageReportWorker' => 3,
+ 'Ci::PipelineArtifacts::CreateQualityReportWorker' => 3,
+ 'Ci::PipelineBridgeStatusWorker' => 3,
+ 'Ci::PipelineSuccessUnlockArtifactsWorker' => 3,
+ 'Ci::RefDeleteUnlockArtifactsWorker' => 3,
+ 'Ci::ResourceGroups::AssignResourceFromResourceGroupWorker' => 3,
+ 'Ci::TestFailureHistoryWorker' => 3,
+ 'Ci::TriggerDownstreamSubscriptionsWorker' => 3,
+ 'CleanupContainerRepositoryWorker' => 3,
+ 'ClusterConfigureIstioWorker' => 3,
+ 'ClusterInstallAppWorker' => 3,
+ 'ClusterPatchAppWorker' => 3,
+ 'ClusterProvisionWorker' => 3,
+ 'ClusterUpdateAppWorker' => 3,
+ 'ClusterUpgradeAppWorker' => 3,
+ 'ClusterWaitForAppInstallationWorker' => 3,
+ 'ClusterWaitForAppUpdateWorker' => 3,
+ 'ClusterWaitForIngressIpAddressWorker' => 3,
+ 'Clusters::Applications::ActivateServiceWorker' => 3,
+ 'Clusters::Applications::DeactivateServiceWorker' => 3,
+ 'Clusters::Applications::UninstallWorker' => 3,
+ 'Clusters::Applications::WaitForUninstallAppWorker' => 3,
+ 'Clusters::Cleanup::AppWorker' => 3,
+ 'Clusters::Cleanup::ProjectNamespaceWorker' => 3,
+ 'Clusters::Cleanup::ServiceAccountWorker' => 3,
+ 'ContainerExpirationPolicies::CleanupContainerRepositoryWorker' => 0,
+ 'CreateCommitSignatureWorker' => 3,
+ 'CreateGithubWebhookWorker' => 3,
+ 'CreateNoteDiffFileWorker' => 3,
+ 'CreatePipelineWorker' => 3,
+ 'DastSiteValidationWorker' => 3,
+ 'DeleteContainerRepositoryWorker' => 3,
+ 'DeleteDiffFilesWorker' => 3,
+ 'DeleteMergedBranchesWorker' => 3,
+ 'DeleteStoredFilesWorker' => 3,
+ 'DeleteUserWorker' => 3,
+ 'Deployments::AutoRollbackWorker' => 3,
+ 'Deployments::DropOlderDeploymentsWorker' => 3,
+ 'Deployments::ExecuteHooksWorker' => 3,
+ 'Deployments::FinishedWorker' => 3,
+ 'Deployments::ForwardDeploymentWorker' => 3,
+ 'Deployments::LinkMergeRequestWorker' => 3,
+ 'Deployments::SuccessWorker' => 3,
+ 'Deployments::UpdateEnvironmentWorker' => 3,
+ 'DesignManagement::CopyDesignCollectionWorker' => 3,
+ 'DesignManagement::NewVersionWorker' => 3,
+ 'DestroyPagesDeploymentsWorker' => 3,
+ 'DetectRepositoryLanguagesWorker' => 1,
+ 'DisallowTwoFactorForGroupWorker' => 3,
+ 'DisallowTwoFactorForSubgroupsWorker' => 3,
+ 'Dora::DailyMetrics::RefreshWorker' => 3,
+ 'ElasticAssociationIndexerWorker' => 3,
+ 'ElasticCommitIndexerWorker' => 2,
+ 'ElasticDeleteProjectWorker' => 2,
+ 'ElasticFullIndexWorker' => 2,
+ 'ElasticIndexerWorker' => 2,
+ 'ElasticIndexingControlWorker' => 3,
+ 'ElasticNamespaceIndexerWorker' => 2,
+ 'ElasticNamespaceRolloutWorker' => 2,
+ 'EmailReceiverWorker' => 3,
+ 'EmailsOnPushWorker' => 3,
+ 'Environments::CanaryIngress::UpdateWorker' => false,
+ 'Epics::UpdateEpicsDatesWorker' => 3,
+ 'ErrorTrackingIssueLinkWorker' => 3,
+ 'Experiments::RecordConversionEventWorker' => 3,
+ 'ExpireBuildInstanceArtifactsWorker' => 3,
+ 'ExpireJobCacheWorker' => 3,
+ 'ExpirePipelineCacheWorker' => 3,
+ 'ExportCsvWorker' => 3,
+ 'ExternalServiceReactiveCachingWorker' => 3,
+ 'FileHookWorker' => false,
+ 'FlushCounterIncrementsWorker' => 3,
+ 'Geo::Batch::ProjectRegistrySchedulerWorker' => 3,
+ 'Geo::Batch::ProjectRegistryWorker' => 3,
+ 'Geo::ContainerRepositorySyncWorker' => 3,
+ 'Geo::DesignRepositoryShardSyncWorker' => false,
+ 'Geo::DesignRepositorySyncWorker' => 3,
+ 'Geo::DestroyWorker' => 3,
+ 'Geo::EventWorker' => 3,
+ 'Geo::FileDownloadWorker' => 3,
+ 'Geo::FileRegistryRemovalWorker' => 3,
+ 'Geo::FileRemovalWorker' => 3,
+ 'Geo::HashedStorageAttachmentsMigrationWorker' => 3,
+ 'Geo::HashedStorageMigrationWorker' => 3,
+ 'Geo::ProjectSyncWorker' => 3,
+ 'Geo::RenameRepositoryWorker' => 3,
+ 'Geo::RepositoriesCleanUpWorker' => 3,
+ 'Geo::RepositoryCleanupWorker' => 3,
+ 'Geo::RepositoryShardSyncWorker' => false,
+ 'Geo::RepositoryVerification::Primary::ShardWorker' => false,
+ 'Geo::RepositoryVerification::Primary::SingleWorker' => false,
+ 'Geo::RepositoryVerification::Secondary::SingleWorker' => false,
+ 'Geo::ReverificationBatchWorker' => 0,
+ 'Geo::Scheduler::Primary::SchedulerWorker' => 3,
+ 'Geo::Scheduler::SchedulerWorker' => 3,
+ 'Geo::Scheduler::Secondary::SchedulerWorker' => 3,
+ 'Geo::VerificationBatchWorker' => 0,
+ 'Geo::VerificationTimeoutWorker' => false,
+ 'Geo::VerificationWorker' => 3,
+ 'GeoRepositoryDestroyWorker' => 3,
+ 'GitGarbageCollectWorker' => false,
+ 'Gitlab::GithubImport::AdvanceStageWorker' => 3,
+ 'Gitlab::GithubImport::ImportDiffNoteWorker' => 5,
+ 'Gitlab::GithubImport::ImportIssueWorker' => 5,
+ 'Gitlab::GithubImport::ImportLfsObjectWorker' => 5,
+ 'Gitlab::GithubImport::ImportNoteWorker' => 5,
+ 'Gitlab::GithubImport::ImportPullRequestMergedByWorker' => 5,
+ 'Gitlab::GithubImport::ImportPullRequestReviewWorker' => 5,
+ 'Gitlab::GithubImport::ImportPullRequestWorker' => 5,
+ 'Gitlab::GithubImport::RefreshImportJidWorker' => 5,
+ 'Gitlab::GithubImport::Stage::FinishImportWorker' => 5,
+ 'Gitlab::GithubImport::Stage::ImportBaseDataWorker' => 5,
+ 'Gitlab::GithubImport::Stage::ImportIssuesAndDiffNotesWorker' => 5,
+ 'Gitlab::GithubImport::Stage::ImportLfsObjectsWorker' => 5,
+ 'Gitlab::GithubImport::Stage::ImportNotesWorker' => 5,
+ 'Gitlab::GithubImport::Stage::ImportPullRequestsMergedByWorker' => 5,
+ 'Gitlab::GithubImport::Stage::ImportPullRequestsReviewsWorker' => 5,
+ 'Gitlab::GithubImport::Stage::ImportPullRequestsWorker' => 5,
+ 'Gitlab::GithubImport::Stage::ImportRepositoryWorker' => 5,
+ 'Gitlab::JiraImport::AdvanceStageWorker' => 5,
+ 'Gitlab::JiraImport::ImportIssueWorker' => 5,
+ 'Gitlab::JiraImport::Stage::FinishImportWorker' => 5,
+ 'Gitlab::JiraImport::Stage::ImportAttachmentsWorker' => 5,
+ 'Gitlab::JiraImport::Stage::ImportIssuesWorker' => 5,
+ 'Gitlab::JiraImport::Stage::ImportLabelsWorker' => 5,
+ 'Gitlab::JiraImport::Stage::ImportNotesWorker' => 5,
+ 'Gitlab::JiraImport::Stage::StartImportWorker' => 5,
+ 'Gitlab::PhabricatorImport::ImportTasksWorker' => 5,
+ 'GitlabPerformanceBarStatsWorker' => 3,
+ 'GitlabShellWorker' => 3,
+ 'GitlabUsagePingWorker' => 3,
+ 'GroupDestroyWorker' => 3,
+ 'GroupExportWorker' => false,
+ 'GroupImportWorker' => false,
+ 'GroupSamlGroupSyncWorker' => 3,
+ 'GroupWikis::GitGarbageCollectWorker' => false,
+ 'Groups::ScheduleBulkRepositoryShardMovesWorker' => 3,
+ 'Groups::UpdateRepositoryStorageWorker' => 3,
+ 'Groups::UpdateStatisticsWorker' => 3,
+ 'HashedStorage::MigratorWorker' => 3,
+ 'HashedStorage::ProjectMigrateWorker' => 3,
+ 'HashedStorage::ProjectRollbackWorker' => 3,
+ 'HashedStorage::RollbackerWorker' => 3,
+ 'ImportIssuesCsvWorker' => 3,
+ 'ImportSoftwareLicensesWorker' => 3,
+ 'IncidentManagement::AddSeveritySystemNoteWorker' => 3,
+ 'IncidentManagement::ApplyIncidentSlaExceededLabelWorker' => 3,
+ 'IncidentManagement::OncallRotations::PersistAllRotationsShiftsJob' => 3,
+ 'IncidentManagement::OncallRotations::PersistShiftsJob' => 3,
+ 'IncidentManagement::PagerDuty::ProcessIncidentWorker' => 3,
+ 'IncidentManagement::ProcessAlertWorker' => 3,
+ 'IncidentManagement::ProcessPrometheusAlertWorker' => 3,
+ 'InvalidGpgSignatureUpdateWorker' => 3,
+ 'IrkerWorker' => 3,
+ 'IssuableExportCsvWorker' => 3,
+ 'IssuePlacementWorker' => 3,
+ 'IssueRebalancingWorker' => 3,
+ 'IterationsUpdateStatusWorker' => 3,
+ 'JiraConnect::SyncBranchWorker' => 3,
+ 'JiraConnect::SyncBuildsWorker' => 3,
+ 'JiraConnect::SyncDeploymentsWorker' => 3,
+ 'JiraConnect::SyncFeatureFlagsWorker' => 3,
+ 'JiraConnect::SyncMergeRequestWorker' => 3,
+ 'JiraConnect::SyncProjectWorker' => 3,
+ 'LdapGroupSyncWorker' => 3,
+ 'MailScheduler::IssueDueWorker' => 3,
+ 'MailScheduler::NotificationServiceWorker' => 3,
+ 'MembersDestroyer::UnassignIssuablesWorker' => 3,
+ 'MergeRequestCleanupRefsWorker' => 3,
+ 'MergeRequestMergeabilityCheckWorker' => 3,
+ 'MergeRequestResetApprovalsWorker' => 3,
+ 'MergeRequests::AssigneesChangeWorker' => 3,
+ 'MergeRequests::CreatePipelineWorker' => 3,
+ 'MergeRequests::DeleteSourceBranchWorker' => 3,
+ 'MergeRequests::HandleAssigneesChangeWorker' => 3,
+ 'MergeRequests::ResolveTodosWorker' => 3,
+ 'MergeRequests::SyncCodeOwnerApprovalRulesWorker' => 3,
+ 'MergeTrains::RefreshWorker' => 3,
+ 'MergeWorker' => 3,
+ 'Metrics::Dashboard::PruneOldAnnotationsWorker' => 3,
+ 'Metrics::Dashboard::SyncDashboardsWorker' => 3,
+ 'MigrateExternalDiffsWorker' => 3,
+ 'NamespacelessProjectDestroyWorker' => 3,
+ 'Namespaces::OnboardingIssueCreatedWorker' => 3,
+ 'Namespaces::OnboardingPipelineCreatedWorker' => 3,
+ 'Namespaces::OnboardingProgressWorker' => 3,
+ 'Namespaces::OnboardingUserAddedWorker' => 3,
+ 'Namespaces::RootStatisticsWorker' => 3,
+ 'Namespaces::ScheduleAggregationWorker' => 3,
+ 'NetworkPolicyMetricsWorker' => 3,
+ 'NewEpicWorker' => 3,
+ 'NewIssueWorker' => 3,
+ 'NewMergeRequestWorker' => 3,
+ 'NewNoteWorker' => 3,
+ 'ObjectPool::CreateWorker' => 3,
+ 'ObjectPool::DestroyWorker' => 3,
+ 'ObjectPool::JoinWorker' => 3,
+ 'ObjectPool::ScheduleJoinWorker' => 3,
+ 'ObjectStorage::BackgroundMoveWorker' => 5,
+ 'ObjectStorage::MigrateUploadsWorker' => 3,
+ 'Packages::Composer::CacheUpdateWorker' => 3,
+ 'Packages::Go::SyncPackagesWorker' => 3,
+ 'Packages::Maven::Metadata::SyncWorker' => 3,
+ 'Packages::Nuget::ExtractionWorker' => 3,
+ 'Packages::Rubygems::ExtractionWorker' => 3,
+ 'PagesDomainSslRenewalWorker' => 3,
+ 'PagesDomainVerificationWorker' => 3,
+ 'PagesRemoveWorker' => 3,
+ 'PagesTransferWorker' => 3,
+ 'PagesUpdateConfigurationWorker' => 3,
+ 'PagesWorker' => 3,
+ 'PersonalAccessTokens::Groups::PolicyWorker' => 3,
+ 'PersonalAccessTokens::Instance::PolicyWorker' => 3,
+ 'PipelineHooksWorker' => 3,
+ 'PipelineMetricsWorker' => 3,
+ 'PipelineNotificationWorker' => 3,
+ 'PipelineProcessWorker' => 3,
+ 'PipelineUpdateWorker' => 3,
+ 'PostReceive' => 3,
+ 'ProcessCommitWorker' => 3,
+ 'ProjectCacheWorker' => 3,
+ 'ProjectDailyStatisticsWorker' => 3,
+ 'ProjectDestroyWorker' => 3,
+ 'ProjectExportWorker' => false,
+ 'ProjectImportScheduleWorker' => false,
+ 'ProjectScheduleBulkRepositoryShardMovesWorker' => 3,
+ 'ProjectServiceWorker' => 3,
+ 'ProjectTemplateExportWorker' => false,
+ 'ProjectUpdateRepositoryStorageWorker' => 3,
+ 'Projects::GitGarbageCollectWorker' => false,
+ 'Projects::PostCreationWorker' => 3,
+ 'Projects::ScheduleBulkRepositoryShardMovesWorker' => 3,
+ 'Projects::UpdateRepositoryStorageWorker' => 3,
+ 'Prometheus::CreateDefaultAlertsWorker' => 3,
+ 'PropagateIntegrationGroupWorker' => 3,
+ 'PropagateIntegrationInheritDescendantWorker' => 3,
+ 'PropagateIntegrationInheritWorker' => 3,
+ 'PropagateIntegrationProjectWorker' => 3,
+ 'PropagateIntegrationWorker' => 3,
+ 'PropagateServiceTemplateWorker' => 3,
+ 'PurgeDependencyProxyCacheWorker' => 3,
+ 'ReactiveCachingWorker' => 3,
+ 'RebaseWorker' => 3,
+ 'RefreshLicenseComplianceChecksWorker' => 3,
+ 'Releases::CreateEvidenceWorker' => 3,
+ 'RemoteMirrorNotificationWorker' => 3,
+ 'RepositoryCheck::BatchWorker' => false,
+ 'RepositoryCheck::ClearWorker' => false,
+ 'RepositoryCheck::SingleRepositoryWorker' => false,
+ 'RepositoryCleanupWorker' => 3,
+ 'RepositoryForkWorker' => 5,
+ 'RepositoryImportWorker' => false,
+ 'RepositoryPushAuditEventWorker' => 3,
+ 'RepositoryRemoveRemoteWorker' => 3,
+ 'RepositoryUpdateMirrorWorker' => false,
+ 'RepositoryUpdateRemoteMirrorWorker' => 3,
+ 'RequirementsManagement::ImportRequirementsCsvWorker' => 3,
+ 'RequirementsManagement::ProcessRequirementsReportsWorker' => 3,
+ 'RunPipelineScheduleWorker' => 3,
+ 'ScanSecurityReportSecretsWorker' => 17,
+ 'Security::AutoFixWorker' => 3,
+ 'Security::StoreScansWorker' => 3,
+ 'SelfMonitoringProjectCreateWorker' => 3,
+ 'SelfMonitoringProjectDeleteWorker' => 3,
+ 'ServiceDeskEmailReceiverWorker' => 3,
+ 'SetUserStatusBasedOnUserCapSettingWorker' => 3,
+ 'SnippetScheduleBulkRepositoryShardMovesWorker' => 3,
+ 'SnippetUpdateRepositoryStorageWorker' => 3,
+ 'Snippets::ScheduleBulkRepositoryShardMovesWorker' => 3,
+ 'Snippets::UpdateRepositoryStorageWorker' => 3,
+ 'StageUpdateWorker' => 3,
+ 'StatusPage::PublishWorker' => 5,
+ 'StoreSecurityReportsWorker' => 3,
+ 'StoreSecurityScansWorker' => 3,
+ 'SyncSeatLinkRequestWorker' => 20,
+ 'SyncSeatLinkWorker' => 12,
+ 'SyncSecurityReportsToReportApprovalRulesWorker' => 3,
+ 'SystemHookPushWorker' => 3,
+ 'TodosDestroyer::ConfidentialEpicWorker' => 3,
+ 'TodosDestroyer::ConfidentialIssueWorker' => 3,
+ 'TodosDestroyer::DestroyedIssuableWorker' => 3,
+ 'TodosDestroyer::EntityLeaveWorker' => 3,
+ 'TodosDestroyer::GroupPrivateWorker' => 3,
+ 'TodosDestroyer::PrivateFeaturesWorker' => 3,
+ 'TodosDestroyer::ProjectPrivateWorker' => 3,
+ 'UpdateExternalPullRequestsWorker' => 3,
+ 'UpdateHeadPipelineForMergeRequestWorker' => 3,
+ 'UpdateHighestRoleWorker' => 3,
+ 'UpdateMergeRequestsWorker' => 3,
+ 'UpdateProjectStatisticsWorker' => 3,
+ 'UploadChecksumWorker' => 3,
+ 'Vulnerabilities::Statistics::AdjustmentWorker' => 3,
+ 'VulnerabilityExports::ExportDeletionWorker' => 3,
+ 'VulnerabilityExports::ExportWorker' => 3,
+ 'WaitForClusterCreationWorker' => 3,
+ 'WebHookWorker' => 4,
+ 'WebHooks::DestroyWorker' => 3,
+ 'Wikis::GitGarbageCollectWorker' => false,
+ 'X509CertificateRevokeWorker' => 3
+ }
+ end
+
+ it 'uses the default number of retries for new jobs' do
+ expect(workers_without_defaults - cronjobs - retry_exception_workers).to all(have_attributes(retries: true))
+ end
+
+ it 'uses zero retries for cronjobs' do
+ expect(cronjobs - retry_exception_workers).to all(have_attributes(retries: false))
+ end
+
+ it 'uses specified numbers of retries for workers with exceptions encoded here', :aggregate_failures do
+ retry_exception_workers.each do |worker|
+ expect(worker.retries).to eq(retry_exceptions[worker.klass.to_s]),
+ "#{worker.klass} has #{worker.retries} retries, expected #{retry_exceptions[worker.klass]}"
+ end
+ end
+ end
end