From c5bd57e87b96418b9dec2ab7ebff498628ee4cad Mon Sep 17 00:00:00 2001
From: Douwe Maan <douwe@selenight.nl>
Date: Tue, 28 Nov 2017 17:08:30 +0100
Subject: [PATCH] Add ApplicationWorker and make every worker include it

---
 app/workers/admin_email_worker.rb             |  2 +-
 app/workers/authorized_projects_worker.rb     |  3 +-
 app/workers/background_migration_worker.rb    |  3 +-
 app/workers/build_coverage_worker.rb          |  2 +-
 app/workers/build_finished_worker.rb          |  2 +-
 app/workers/build_hooks_worker.rb             |  2 +-
 app/workers/build_queue_worker.rb             |  2 +-
 app/workers/build_success_worker.rb           |  2 +-
 app/workers/build_trace_sections_worker.rb    |  2 +-
 app/workers/cluster_install_app_worker.rb     |  2 +-
 app/workers/cluster_provision_worker.rb       |  2 +-
 ...luster_wait_for_app_installation_worker.rb |  2 +-
 app/workers/concerns/application_worker.rb    | 25 ++++++++++
 .../concerns/dedicated_sidekiq_queue.rb       |  9 ----
 .../gitlab/github_import/object_importer.rb   |  2 +-
 app/workers/create_gpg_signature_worker.rb    |  3 +-
 app/workers/create_pipeline_worker.rb         |  2 +-
 app/workers/delete_merged_branches_worker.rb  |  3 +-
 app/workers/delete_user_worker.rb             |  3 +-
 app/workers/email_receiver_worker.rb          |  3 +-
 app/workers/emails_on_push_worker.rb          |  3 +-
 app/workers/expire_build_artifacts_worker.rb  |  2 +-
 .../expire_build_instance_artifacts_worker.rb |  3 +-
 app/workers/expire_job_cache_worker.rb        |  2 +-
 app/workers/expire_pipeline_cache_worker.rb   |  2 +-
 app/workers/geo/base_scheduler_worker.rb      |  2 +-
 app/workers/geo/file_download_worker.rb       |  5 +-
 app/workers/geo/file_removal_worker.rb        |  5 +-
 ...ed_storage_attachments_migration_worker.rb |  2 +-
 .../geo/hashed_storage_migration_worker.rb    |  2 +-
 app/workers/geo/metrics_update_worker.rb      |  2 +-
 app/workers/geo/project_sync_worker.rb        |  4 +-
 app/workers/geo/prune_event_log_worker.rb     |  2 +-
 app/workers/geo/rename_repository_worker.rb   |  2 +-
 .../geo/repositories_clean_up_worker.rb       |  2 +-
 app/workers/geo_repository_destroy_worker.rb  |  2 +-
 app/workers/git_garbage_collect_worker.rb     |  3 +-
 .../github_import/advance_stage_worker.rb     |  2 +-
 .../refresh_import_jid_worker.rb              |  2 +-
 .../stage/finish_import_worker.rb             |  2 +-
 .../stage/import_base_data_worker.rb          |  2 +-
 .../import_issues_and_diff_notes_worker.rb    |  2 +-
 .../stage/import_notes_worker.rb              |  2 +-
 .../stage/import_pull_requests_worker.rb      |  2 +-
 .../stage/import_repository_worker.rb         |  2 +-
 app/workers/gitlab_shell_worker.rb            |  3 +-
 app/workers/gitlab_usage_ping_worker.rb       |  2 +-
 app/workers/group_destroy_worker.rb           |  3 +-
 .../import_export_project_cleanup_worker.rb   |  2 +-
 .../invalid_gpg_signature_update_worker.rb    |  3 +-
 app/workers/irker_worker.rb                   |  3 +-
 app/workers/merge_worker.rb                   |  3 +-
 .../namespaceless_project_destroy_worker.rb   |  3 +-
 app/workers/new_issue_worker.rb               |  3 +-
 app/workers/new_merge_request_worker.rb       |  3 +-
 app/workers/new_note_worker.rb                |  3 +-
 app/workers/pages_worker.rb                   |  2 +-
 app/workers/pipeline_hooks_worker.rb          |  2 +-
 app/workers/pipeline_metrics_worker.rb        |  2 +-
 app/workers/pipeline_notification_worker.rb   |  2 +-
 app/workers/pipeline_process_worker.rb        |  2 +-
 app/workers/pipeline_schedule_worker.rb       |  2 +-
 app/workers/pipeline_success_worker.rb        |  2 +-
 app/workers/pipeline_update_worker.rb         |  2 +-
 app/workers/post_receive.rb                   |  3 +-
 app/workers/process_commit_worker.rb          |  3 +-
 app/workers/project_cache_worker.rb           |  3 +-
 app/workers/project_destroy_worker.rb         |  3 +-
 app/workers/project_export_worker.rb          |  3 +-
 .../project_migrate_hashed_storage_worker.rb  |  3 +-
 app/workers/project_service_worker.rb         |  3 +-
 .../propagate_service_template_worker.rb      |  3 +-
 app/workers/prune_old_events_worker.rb        |  2 +-
 app/workers/reactive_caching_worker.rb        |  3 +-
 .../remove_expired_group_links_worker.rb      |  2 +-
 app/workers/remove_expired_members_worker.rb  |  2 +-
 .../remove_old_web_hook_logs_worker.rb        |  2 +-
 .../remove_unreferenced_lfs_objects_worker.rb |  2 +-
 .../repository_archive_cache_worker.rb        |  2 +-
 app/workers/repository_check/batch_worker.rb  |  2 +-
 app/workers/repository_check/clear_worker.rb  |  2 +-
 .../single_repository_worker.rb               |  2 +-
 app/workers/repository_fork_worker.rb         |  3 +-
 app/workers/repository_import_worker.rb       |  3 +-
 app/workers/requests_profiles_worker.rb       |  2 +-
 .../schedule_update_user_activity_worker.rb   |  2 +-
 app/workers/stage_update_worker.rb            |  2 +-
 app/workers/storage_migrator_worker.rb        |  3 +-
 app/workers/stuck_ci_jobs_worker.rb           |  2 +-
 app/workers/stuck_import_jobs_worker.rb       |  2 +-
 app/workers/stuck_merge_jobs_worker.rb        |  2 +-
 app/workers/system_hook_push_worker.rb        |  3 +-
 app/workers/trending_projects_worker.rb       |  2 +-
 app/workers/update_merge_requests_worker.rb   |  3 +-
 app/workers/update_user_activity_worker.rb    |  3 +-
 app/workers/upload_checksum_worker.rb         |  3 +-
 .../wait_for_cluster_creation_worker.rb       |  2 +-
 app/workers/web_hook_worker.rb                |  3 +-
 config/initializers/sidekiq.rb                |  8 ++--
 doc/development/sidekiq_style_guide.md        |  3 +-
 ee/app/workers/admin_emails_worker.rb         |  3 +-
 .../clear_shared_runners_minutes_worker.rb    |  2 +-
 .../elastic_batch_project_indexer_worker.rb   |  3 +-
 .../workers/elastic_commit_indexer_worker.rb  |  3 +-
 ee/app/workers/elastic_indexer_worker.rb      |  3 +-
 ee/app/workers/export_csv_worker.rb           |  3 +-
 ee/app/workers/historical_data_worker.rb      |  2 +-
 ee/app/workers/ldap_all_groups_sync_worker.rb |  2 +-
 ee/app/workers/ldap_group_sync_worker.rb      |  3 +-
 ee/app/workers/ldap_sync_worker.rb            |  2 +-
 .../workers/object_storage_upload_worker.rb   |  3 +-
 ...roject_update_repository_storage_worker.rb |  3 +-
 ee/app/workers/rebase_worker.rb               |  2 +-
 .../repository_update_mirror_worker.rb        |  3 +-
 .../repository_update_remote_mirror_worker.rb |  3 +-
 ee/app/workers/update_all_mirrors_worker.rb   |  2 +-
 lib/gitlab/sidekiq_cluster/cli.rb             | 16 +++----
 lib/gitlab/sidekiq_config.rb                  | 48 +++++++++++++++++--
 spec/lib/gitlab/sidekiq_cluster/cli_spec.rb   |  2 +-
 spec/lib/gitlab/sidekiq_config_spec.rb        | 40 +++++++++++-----
 .../concerns/application_worker_spec.rb       | 27 +++++++++++
 spec/workers/concerns/cluster_queue_spec.rb   |  6 ++-
 spec/workers/concerns/cronjob_queue_spec.rb   |  6 ++-
 .../concerns/dedicated_sidekiq_queue_spec.rb  | 20 --------
 spec/workers/concerns/geo_queue_spec.rb       |  6 ++-
 .../github_import/object_importer_spec.rb     |  4 ++
 .../gitlab/github_import/queue_spec.rb        |  6 ++-
 spec/workers/concerns/pipeline_queue_spec.rb  |  6 ++-
 .../concerns/repository_check_queue_spec.rb   |  6 ++-
 spec/workers/every_sidekiq_worker_spec.rb     | 36 +++-----------
 130 files changed, 292 insertions(+), 259 deletions(-)
 create mode 100644 app/workers/concerns/application_worker.rb
 delete mode 100644 app/workers/concerns/dedicated_sidekiq_queue.rb
 create mode 100644 spec/workers/concerns/application_worker_spec.rb
 delete mode 100644 spec/workers/concerns/dedicated_sidekiq_queue_spec.rb

diff --git a/app/workers/admin_email_worker.rb b/app/workers/admin_email_worker.rb
index c2dc955b27c1e..bec0a003a1c31 100644
--- a/app/workers/admin_email_worker.rb
+++ b/app/workers/admin_email_worker.rb
@@ -1,5 +1,5 @@
 class AdminEmailWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/authorized_projects_worker.rb b/app/workers/authorized_projects_worker.rb
index 55d8d0c69d161..d4f334ec3b893 100644
--- a/app/workers/authorized_projects_worker.rb
+++ b/app/workers/authorized_projects_worker.rb
@@ -1,6 +1,5 @@
 class AuthorizedProjectsWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   # Schedules multiple jobs and waits for them to be completed.
   def self.bulk_perform_and_wait(args_list)
diff --git a/app/workers/background_migration_worker.rb b/app/workers/background_migration_worker.rb
index 45ce49bb5c0b9..65791c4eaba54 100644
--- a/app/workers/background_migration_worker.rb
+++ b/app/workers/background_migration_worker.rb
@@ -1,6 +1,5 @@
 class BackgroundMigrationWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   # Enqueues a number of jobs in bulk.
   #
diff --git a/app/workers/build_coverage_worker.rb b/app/workers/build_coverage_worker.rb
index cd4af85d04717..62b212c79be56 100644
--- a/app/workers/build_coverage_worker.rb
+++ b/app/workers/build_coverage_worker.rb
@@ -1,5 +1,5 @@
 class BuildCoverageWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   def perform(build_id)
diff --git a/app/workers/build_finished_worker.rb b/app/workers/build_finished_worker.rb
index c77fe074c7319..0fc7a1635c88b 100644
--- a/app/workers/build_finished_worker.rb
+++ b/app/workers/build_finished_worker.rb
@@ -1,5 +1,5 @@
 class BuildFinishedWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :processing
diff --git a/app/workers/build_hooks_worker.rb b/app/workers/build_hooks_worker.rb
index dedaf2835e610..6705a1c2709a0 100644
--- a/app/workers/build_hooks_worker.rb
+++ b/app/workers/build_hooks_worker.rb
@@ -1,5 +1,5 @@
 class BuildHooksWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :hooks
diff --git a/app/workers/build_queue_worker.rb b/app/workers/build_queue_worker.rb
index e5ceb9ef71518..fc775a84dc09d 100644
--- a/app/workers/build_queue_worker.rb
+++ b/app/workers/build_queue_worker.rb
@@ -1,5 +1,5 @@
 class BuildQueueWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :processing
diff --git a/app/workers/build_success_worker.rb b/app/workers/build_success_worker.rb
index 20ec24bd18ab0..ec049821ad7ae 100644
--- a/app/workers/build_success_worker.rb
+++ b/app/workers/build_success_worker.rb
@@ -1,5 +1,5 @@
 class BuildSuccessWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :processing
diff --git a/app/workers/build_trace_sections_worker.rb b/app/workers/build_trace_sections_worker.rb
index 8c57e8f767b02..c0f5c144e10f6 100644
--- a/app/workers/build_trace_sections_worker.rb
+++ b/app/workers/build_trace_sections_worker.rb
@@ -1,5 +1,5 @@
 class BuildTraceSectionsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   def perform(build_id)
diff --git a/app/workers/cluster_install_app_worker.rb b/app/workers/cluster_install_app_worker.rb
index 899aed904e4c5..f771cb4939f9f 100644
--- a/app/workers/cluster_install_app_worker.rb
+++ b/app/workers/cluster_install_app_worker.rb
@@ -1,5 +1,5 @@
 class ClusterInstallAppWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include ClusterQueue
   include ClusterApplications
 
diff --git a/app/workers/cluster_provision_worker.rb b/app/workers/cluster_provision_worker.rb
index b01f970842467..1ab4de3b6479b 100644
--- a/app/workers/cluster_provision_worker.rb
+++ b/app/workers/cluster_provision_worker.rb
@@ -1,5 +1,5 @@
 class ClusterProvisionWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include ClusterQueue
 
   def perform(cluster_id)
diff --git a/app/workers/cluster_wait_for_app_installation_worker.rb b/app/workers/cluster_wait_for_app_installation_worker.rb
index 4bb8c293e5d61..d564d5e48bf7a 100644
--- a/app/workers/cluster_wait_for_app_installation_worker.rb
+++ b/app/workers/cluster_wait_for_app_installation_worker.rb
@@ -1,5 +1,5 @@
 class ClusterWaitForAppInstallationWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include ClusterQueue
   include ClusterApplications
 
diff --git a/app/workers/concerns/application_worker.rb b/app/workers/concerns/application_worker.rb
new file mode 100644
index 0000000000000..bf1ecaa0c6d22
--- /dev/null
+++ b/app/workers/concerns/application_worker.rb
@@ -0,0 +1,25 @@
+Sidekiq::Worker.extend ActiveSupport::Concern
+
+module ApplicationWorker
+  extend ActiveSupport::Concern
+
+  include Sidekiq::Worker
+
+  included do
+    sidekiq_options queue: base_queue_name
+  end
+
+  module ClassMethods
+    def base_queue_name
+      name
+        .sub(/\AGitlab::/, '')
+        .sub(/Worker\z/, '')
+        .underscore
+        .tr('/', '_')
+    end
+
+    def queue
+      get_sidekiq_options['queue'].to_s
+    end
+  end
+end
diff --git a/app/workers/concerns/dedicated_sidekiq_queue.rb b/app/workers/concerns/dedicated_sidekiq_queue.rb
deleted file mode 100644
index 132bae6022b4c..0000000000000
--- a/app/workers/concerns/dedicated_sidekiq_queue.rb
+++ /dev/null
@@ -1,9 +0,0 @@
-# Concern that sets the queue of a Sidekiq worker based on the worker's class
-# name/namespace.
-module DedicatedSidekiqQueue
-  extend ActiveSupport::Concern
-
-  included do
-    sidekiq_options queue: name.sub(/Worker\z/, '').underscore.tr('/', '_')
-  end
-end
diff --git a/app/workers/concerns/gitlab/github_import/object_importer.rb b/app/workers/concerns/gitlab/github_import/object_importer.rb
index 67e36c811de9c..9a9fbaad653c7 100644
--- a/app/workers/concerns/gitlab/github_import/object_importer.rb
+++ b/app/workers/concerns/gitlab/github_import/object_importer.rb
@@ -8,7 +8,7 @@ module ObjectImporter
       extend ActiveSupport::Concern
 
       included do
-        include Sidekiq::Worker
+        include ApplicationWorker
         include GithubImport::Queue
         include ReschedulingMethods
         include NotifyUponDeath
diff --git a/app/workers/create_gpg_signature_worker.rb b/app/workers/create_gpg_signature_worker.rb
index 9b5ff17aafa30..f371731f68c95 100644
--- a/app/workers/create_gpg_signature_worker.rb
+++ b/app/workers/create_gpg_signature_worker.rb
@@ -1,6 +1,5 @@
 class CreateGpgSignatureWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(commit_sha, project_id)
     project = Project.find_by(id: project_id)
diff --git a/app/workers/create_pipeline_worker.rb b/app/workers/create_pipeline_worker.rb
index 865ad1ba420a9..00cd7b85b9f48 100644
--- a/app/workers/create_pipeline_worker.rb
+++ b/app/workers/create_pipeline_worker.rb
@@ -1,5 +1,5 @@
 class CreatePipelineWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :creation
diff --git a/app/workers/delete_merged_branches_worker.rb b/app/workers/delete_merged_branches_worker.rb
index f870da4ecfdd4..07cd1f02fb59b 100644
--- a/app/workers/delete_merged_branches_worker.rb
+++ b/app/workers/delete_merged_branches_worker.rb
@@ -1,6 +1,5 @@
 class DeleteMergedBranchesWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(project_id, user_id)
     begin
diff --git a/app/workers/delete_user_worker.rb b/app/workers/delete_user_worker.rb
index 3340a7be4fe26..6c431b02979df 100644
--- a/app/workers/delete_user_worker.rb
+++ b/app/workers/delete_user_worker.rb
@@ -1,6 +1,5 @@
 class DeleteUserWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(current_user_id, delete_user_id, options = {})
     delete_user  = User.find(delete_user_id)
diff --git a/app/workers/email_receiver_worker.rb b/app/workers/email_receiver_worker.rb
index 1afa24c8e2afb..fff7cf9d26ce2 100644
--- a/app/workers/email_receiver_worker.rb
+++ b/app/workers/email_receiver_worker.rb
@@ -1,6 +1,5 @@
 class EmailReceiverWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(raw)
     return unless Gitlab::IncomingEmail.enabled?
diff --git a/app/workers/emails_on_push_worker.rb b/app/workers/emails_on_push_worker.rb
index f5ccc84c160c8..21da27973fece 100644
--- a/app/workers/emails_on_push_worker.rb
+++ b/app/workers/emails_on_push_worker.rb
@@ -1,6 +1,5 @@
 class EmailsOnPushWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   attr_reader :email, :skip_premailer
 
diff --git a/app/workers/expire_build_artifacts_worker.rb b/app/workers/expire_build_artifacts_worker.rb
index a27585fd3897a..73ab421108011 100644
--- a/app/workers/expire_build_artifacts_worker.rb
+++ b/app/workers/expire_build_artifacts_worker.rb
@@ -1,5 +1,5 @@
 class ExpireBuildArtifactsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/expire_build_instance_artifacts_worker.rb b/app/workers/expire_build_instance_artifacts_worker.rb
index 7b59e97649224..234b4357cf7fe 100644
--- a/app/workers/expire_build_instance_artifacts_worker.rb
+++ b/app/workers/expire_build_instance_artifacts_worker.rb
@@ -1,6 +1,5 @@
 class ExpireBuildInstanceArtifactsWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(build_id)
     build = Ci::Build
diff --git a/app/workers/expire_job_cache_worker.rb b/app/workers/expire_job_cache_worker.rb
index 98a7500bffe33..a591e2da51958 100644
--- a/app/workers/expire_job_cache_worker.rb
+++ b/app/workers/expire_job_cache_worker.rb
@@ -1,5 +1,5 @@
 class ExpireJobCacheWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :cache
diff --git a/app/workers/expire_pipeline_cache_worker.rb b/app/workers/expire_pipeline_cache_worker.rb
index 93b67497ba684..211a05f120ca3 100644
--- a/app/workers/expire_pipeline_cache_worker.rb
+++ b/app/workers/expire_pipeline_cache_worker.rb
@@ -1,5 +1,5 @@
 class ExpirePipelineCacheWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :cache
diff --git a/app/workers/geo/base_scheduler_worker.rb b/app/workers/geo/base_scheduler_worker.rb
index 3f16e529691e1..f21d71dc4dc96 100644
--- a/app/workers/geo/base_scheduler_worker.rb
+++ b/app/workers/geo/base_scheduler_worker.rb
@@ -1,6 +1,6 @@
 module Geo
   class BaseSchedulerWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include CronjobQueue
     include ExclusiveLeaseGuard
 
diff --git a/app/workers/geo/file_download_worker.rb b/app/workers/geo/file_download_worker.rb
index 2a6a61a21da34..a4c77eb2e25de 100644
--- a/app/workers/geo/file_download_worker.rb
+++ b/app/workers/geo/file_download_worker.rb
@@ -1,7 +1,8 @@
 module Geo
   class FileDownloadWorker
-    include Sidekiq::Worker
-    sidekiq_options queue: :geo_file_download, retry: 3, dead: false
+    include ApplicationWorker
+
+    sidekiq_options retry: 3, dead: false
 
     def perform(object_type, object_id)
       Geo::FileDownloadService.new(object_type.to_sym, object_id).execute
diff --git a/app/workers/geo/file_removal_worker.rb b/app/workers/geo/file_removal_worker.rb
index 978a4abc91c55..96dd438fc8b0b 100644
--- a/app/workers/geo/file_removal_worker.rb
+++ b/app/workers/geo/file_removal_worker.rb
@@ -1,9 +1,8 @@
 module Geo
   class FileRemovalWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include Gitlab::Geo::LogHelpers
-
-    sidekiq_options queue: :geo
+    include GeoQueue
 
     def perform(file_path)
       remove_file!(file_path)
diff --git a/app/workers/geo/hashed_storage_attachments_migration_worker.rb b/app/workers/geo/hashed_storage_attachments_migration_worker.rb
index 0afc1ef4a34ce..a082a6d71177e 100644
--- a/app/workers/geo/hashed_storage_attachments_migration_worker.rb
+++ b/app/workers/geo/hashed_storage_attachments_migration_worker.rb
@@ -1,6 +1,6 @@
 module Geo
   class HashedStorageAttachmentsMigrationWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include GeoQueue
 
     def perform(project_id, old_attachments_path, new_attachments_path)
diff --git a/app/workers/geo/hashed_storage_migration_worker.rb b/app/workers/geo/hashed_storage_migration_worker.rb
index 438c76d195c1e..54f402c4d203e 100644
--- a/app/workers/geo/hashed_storage_migration_worker.rb
+++ b/app/workers/geo/hashed_storage_migration_worker.rb
@@ -1,6 +1,6 @@
 module Geo
   class HashedStorageMigrationWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include GeoQueue
 
     def perform(project_id, old_disk_path, new_disk_path, old_storage_version)
diff --git a/app/workers/geo/metrics_update_worker.rb b/app/workers/geo/metrics_update_worker.rb
index 5753dd1335b1e..8574297547d6b 100644
--- a/app/workers/geo/metrics_update_worker.rb
+++ b/app/workers/geo/metrics_update_worker.rb
@@ -1,6 +1,6 @@
 module Geo
   class MetricsUpdateWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include ExclusiveLeaseGuard
     include CronjobQueue
 
diff --git a/app/workers/geo/project_sync_worker.rb b/app/workers/geo/project_sync_worker.rb
index 85c667b19a529..da4be4bc962cb 100644
--- a/app/workers/geo/project_sync_worker.rb
+++ b/app/workers/geo/project_sync_worker.rb
@@ -1,8 +1,8 @@
 module Geo
   class ProjectSyncWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
 
-    sidekiq_options queue: :geo_project_sync, retry: 3, dead: false
+    sidekiq_options retry: 3, dead: false
 
     sidekiq_retry_in { |count| 30 * count }
 
diff --git a/app/workers/geo/prune_event_log_worker.rb b/app/workers/geo/prune_event_log_worker.rb
index eed396c0bce14..f3548d88f0bf2 100644
--- a/app/workers/geo/prune_event_log_worker.rb
+++ b/app/workers/geo/prune_event_log_worker.rb
@@ -1,6 +1,6 @@
 module Geo
   class PruneEventLogWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include CronjobQueue
     include ExclusiveLeaseGuard
     include ::Gitlab::Geo::LogHelpers
diff --git a/app/workers/geo/rename_repository_worker.rb b/app/workers/geo/rename_repository_worker.rb
index 44f83b805889e..4cea329d0a70d 100644
--- a/app/workers/geo/rename_repository_worker.rb
+++ b/app/workers/geo/rename_repository_worker.rb
@@ -1,6 +1,6 @@
 module Geo
   class RenameRepositoryWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include GeoQueue
 
     def perform(project_id, old_disk_path, new_disk_path)
diff --git a/app/workers/geo/repositories_clean_up_worker.rb b/app/workers/geo/repositories_clean_up_worker.rb
index fc928a1f18a0e..4448f4aa68bdc 100644
--- a/app/workers/geo/repositories_clean_up_worker.rb
+++ b/app/workers/geo/repositories_clean_up_worker.rb
@@ -1,6 +1,6 @@
 module Geo
   class RepositoriesCleanUpWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include GeoQueue
     include Gitlab::ShellAdapter
     include ExclusiveLeaseGuard
diff --git a/app/workers/geo_repository_destroy_worker.rb b/app/workers/geo_repository_destroy_worker.rb
index b0a9c710f283c..b8efca3ebc6f7 100644
--- a/app/workers/geo_repository_destroy_worker.rb
+++ b/app/workers/geo_repository_destroy_worker.rb
@@ -1,5 +1,5 @@
 class GeoRepositoryDestroyWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include GeoQueue
   include Gitlab::ShellAdapter
 
diff --git a/app/workers/git_garbage_collect_worker.rb b/app/workers/git_garbage_collect_worker.rb
index ec65d3ff65ea3..8e26275669e36 100644
--- a/app/workers/git_garbage_collect_worker.rb
+++ b/app/workers/git_garbage_collect_worker.rb
@@ -1,6 +1,5 @@
 class GitGarbageCollectWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include Gitlab::CurrentSettings
 
   sidekiq_options retry: false
diff --git a/app/workers/gitlab/github_import/advance_stage_worker.rb b/app/workers/gitlab/github_import/advance_stage_worker.rb
index 877f88c043f42..400396d5755e9 100644
--- a/app/workers/gitlab/github_import/advance_stage_worker.rb
+++ b/app/workers/gitlab/github_import/advance_stage_worker.rb
@@ -7,7 +7,7 @@ module GithubImport
     # been completed this worker will advance the import process to the next
     # stage.
     class AdvanceStageWorker
-      include Sidekiq::Worker
+      include ApplicationWorker
 
       sidekiq_options queue: 'github_importer_advance_stage', 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 45a3892722533..7108b531bc225 100644
--- a/app/workers/gitlab/github_import/refresh_import_jid_worker.rb
+++ b/app/workers/gitlab/github_import/refresh_import_jid_worker.rb
@@ -3,7 +3,7 @@
 module Gitlab
   module GithubImport
     class RefreshImportJidWorker
-      include Sidekiq::Worker
+      include ApplicationWorker
       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 1a09497780aa6..073d660808214 100644
--- a/app/workers/gitlab/github_import/stage/finish_import_worker.rb
+++ b/app/workers/gitlab/github_import/stage/finish_import_worker.rb
@@ -4,7 +4,7 @@ module Gitlab
   module GithubImport
     module Stage
       class FinishImportWorker
-        include Sidekiq::Worker
+        include ApplicationWorker
         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 f8a3684c6ba57..5726fbb573d84 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
@@ -4,7 +4,7 @@ module Gitlab
   module GithubImport
     module Stage
       class ImportBaseDataWorker
-        include Sidekiq::Worker
+        include ApplicationWorker
         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 e110b7c1c36f7..7007754ff2e6f 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
@@ -4,7 +4,7 @@ module Gitlab
   module GithubImport
     module Stage
       class ImportIssuesAndDiffNotesWorker
-        include Sidekiq::Worker
+        include ApplicationWorker
         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 9810ed25cf90a..5f4678a595f06 100644
--- a/app/workers/gitlab/github_import/stage/import_notes_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_notes_worker.rb
@@ -4,7 +4,7 @@ module Gitlab
   module GithubImport
     module Stage
       class ImportNotesWorker
-        include Sidekiq::Worker
+        include ApplicationWorker
         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 c531f26e89730..1c5a7139802cc 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
@@ -4,7 +4,7 @@ module Gitlab
   module GithubImport
     module Stage
       class ImportPullRequestsWorker
-        include Sidekiq::Worker
+        include ApplicationWorker
         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 aa5762e773d80..4d16cef1130a6 100644
--- a/app/workers/gitlab/github_import/stage/import_repository_worker.rb
+++ b/app/workers/gitlab/github_import/stage/import_repository_worker.rb
@@ -4,7 +4,7 @@ module Gitlab
   module GithubImport
     module Stage
       class ImportRepositoryWorker
-        include Sidekiq::Worker
+        include ApplicationWorker
         include GithubImport::Queue
         include StageMethods
 
diff --git a/app/workers/gitlab_shell_worker.rb b/app/workers/gitlab_shell_worker.rb
index 0ec871e00e169..a0028e41332a8 100644
--- a/app/workers/gitlab_shell_worker.rb
+++ b/app/workers/gitlab_shell_worker.rb
@@ -1,7 +1,6 @@
 class GitlabShellWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include Gitlab::ShellAdapter
-  include DedicatedSidekiqQueue
 
   def perform(action, *arg)
     gitlab_shell.__send__(action, *arg) # rubocop:disable GitlabSecurity/PublicSend
diff --git a/app/workers/gitlab_usage_ping_worker.rb b/app/workers/gitlab_usage_ping_worker.rb
index 0a55aab63fd8a..6dd281b1147d5 100644
--- a/app/workers/gitlab_usage_ping_worker.rb
+++ b/app/workers/gitlab_usage_ping_worker.rb
@@ -1,7 +1,7 @@
 class GitlabUsagePingWorker
   LEASE_TIMEOUT = 86400
 
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/group_destroy_worker.rb b/app/workers/group_destroy_worker.rb
index bd8e212e928da..f577b310b2061 100644
--- a/app/workers/group_destroy_worker.rb
+++ b/app/workers/group_destroy_worker.rb
@@ -1,6 +1,5 @@
 class GroupDestroyWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include ExceptionBacktrace
 
   def perform(group_id, user_id)
diff --git a/app/workers/import_export_project_cleanup_worker.rb b/app/workers/import_export_project_cleanup_worker.rb
index 7957ed807ab07..9788c8df3a3fa 100644
--- a/app/workers/import_export_project_cleanup_worker.rb
+++ b/app/workers/import_export_project_cleanup_worker.rb
@@ -1,5 +1,5 @@
 class ImportExportProjectCleanupWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/invalid_gpg_signature_update_worker.rb b/app/workers/invalid_gpg_signature_update_worker.rb
index db6b1ea8e8de8..6774ab307c602 100644
--- a/app/workers/invalid_gpg_signature_update_worker.rb
+++ b/app/workers/invalid_gpg_signature_update_worker.rb
@@ -1,6 +1,5 @@
 class InvalidGpgSignatureUpdateWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(gpg_key_id)
     gpg_key = GpgKey.find_by(id: gpg_key_id)
diff --git a/app/workers/irker_worker.rb b/app/workers/irker_worker.rb
index 311fc187e49ce..9ae5456be4cc3 100644
--- a/app/workers/irker_worker.rb
+++ b/app/workers/irker_worker.rb
@@ -2,8 +2,7 @@
 require 'socket'
 
 class IrkerWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(project_id, chans, colors, push_data, settings)
     project = Project.find(project_id)
diff --git a/app/workers/merge_worker.rb b/app/workers/merge_worker.rb
index 48e2da338f637..ba832fe30c6b2 100644
--- a/app/workers/merge_worker.rb
+++ b/app/workers/merge_worker.rb
@@ -1,6 +1,5 @@
 class MergeWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(merge_request_id, current_user_id, params)
     params = params.with_indifferent_access
diff --git a/app/workers/namespaceless_project_destroy_worker.rb b/app/workers/namespaceless_project_destroy_worker.rb
index f1cd176942115..13d750e587642 100644
--- a/app/workers/namespaceless_project_destroy_worker.rb
+++ b/app/workers/namespaceless_project_destroy_worker.rb
@@ -5,8 +5,7 @@
 # The worker will reject doing anything for projects that *do* have a
 # namespace. For those use ProjectDestroyWorker instead.
 class NamespacelessProjectDestroyWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include ExceptionBacktrace
 
   def self.bulk_perform_async(args_list)
diff --git a/app/workers/new_issue_worker.rb b/app/workers/new_issue_worker.rb
index d9a8e892e906e..3bc030f9c620f 100644
--- a/app/workers/new_issue_worker.rb
+++ b/app/workers/new_issue_worker.rb
@@ -1,6 +1,5 @@
 class NewIssueWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include NewIssuable
 
   def perform(issue_id, user_id)
diff --git a/app/workers/new_merge_request_worker.rb b/app/workers/new_merge_request_worker.rb
index 1910c49015958..bda2a0ab59da6 100644
--- a/app/workers/new_merge_request_worker.rb
+++ b/app/workers/new_merge_request_worker.rb
@@ -1,6 +1,5 @@
 class NewMergeRequestWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include NewIssuable
 
   def perform(merge_request_id, user_id)
diff --git a/app/workers/new_note_worker.rb b/app/workers/new_note_worker.rb
index 926162b8c53a9..67c54fbf10e05 100644
--- a/app/workers/new_note_worker.rb
+++ b/app/workers/new_note_worker.rb
@@ -1,6 +1,5 @@
 class NewNoteWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   # Keep extra parameter to preserve backwards compatibility with
   # old `NewNoteWorker` jobs (can remove later)
diff --git a/app/workers/pages_worker.rb b/app/workers/pages_worker.rb
index 64788da72999b..62f733c02fc43 100644
--- a/app/workers/pages_worker.rb
+++ b/app/workers/pages_worker.rb
@@ -1,5 +1,5 @@
 class PagesWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
 
   sidekiq_options queue: :pages, retry: false
 
diff --git a/app/workers/pipeline_hooks_worker.rb b/app/workers/pipeline_hooks_worker.rb
index 30a75ec8435df..661c29efe8868 100644
--- a/app/workers/pipeline_hooks_worker.rb
+++ b/app/workers/pipeline_hooks_worker.rb
@@ -1,5 +1,5 @@
 class PipelineHooksWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :hooks
diff --git a/app/workers/pipeline_metrics_worker.rb b/app/workers/pipeline_metrics_worker.rb
index 070943f1ecc95..d46d1f122fcfa 100644
--- a/app/workers/pipeline_metrics_worker.rb
+++ b/app/workers/pipeline_metrics_worker.rb
@@ -1,5 +1,5 @@
 class PipelineMetricsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   def perform(pipeline_id)
diff --git a/app/workers/pipeline_notification_worker.rb b/app/workers/pipeline_notification_worker.rb
index cdb860b667580..a9a1168a6e3a0 100644
--- a/app/workers/pipeline_notification_worker.rb
+++ b/app/workers/pipeline_notification_worker.rb
@@ -1,5 +1,5 @@
 class PipelineNotificationWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   def perform(pipeline_id, recipients = nil)
diff --git a/app/workers/pipeline_process_worker.rb b/app/workers/pipeline_process_worker.rb
index 8c067d0508120..07dbf6a971eb5 100644
--- a/app/workers/pipeline_process_worker.rb
+++ b/app/workers/pipeline_process_worker.rb
@@ -1,5 +1,5 @@
 class PipelineProcessWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :processing
diff --git a/app/workers/pipeline_schedule_worker.rb b/app/workers/pipeline_schedule_worker.rb
index 7320db1065eb2..c49758878a4cc 100644
--- a/app/workers/pipeline_schedule_worker.rb
+++ b/app/workers/pipeline_schedule_worker.rb
@@ -1,5 +1,5 @@
 class PipelineScheduleWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/pipeline_success_worker.rb b/app/workers/pipeline_success_worker.rb
index cb8bb2ffe757d..68c40a259e174 100644
--- a/app/workers/pipeline_success_worker.rb
+++ b/app/workers/pipeline_success_worker.rb
@@ -1,5 +1,5 @@
 class PipelineSuccessWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :processing
diff --git a/app/workers/pipeline_update_worker.rb b/app/workers/pipeline_update_worker.rb
index 5fa399dff4c89..24a8a9fbed531 100644
--- a/app/workers/pipeline_update_worker.rb
+++ b/app/workers/pipeline_update_worker.rb
@@ -1,5 +1,5 @@
 class PipelineUpdateWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :processing
diff --git a/app/workers/post_receive.rb b/app/workers/post_receive.rb
index 627a78d1e7887..adbc1373a4b06 100644
--- a/app/workers/post_receive.rb
+++ b/app/workers/post_receive.rb
@@ -1,6 +1,5 @@
 class PostReceive
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   prepend EE::PostReceive
 
   def perform(gl_repository, identifier, changes)
diff --git a/app/workers/process_commit_worker.rb b/app/workers/process_commit_worker.rb
index c0c03848a403b..52eebe475ecb3 100644
--- a/app/workers/process_commit_worker.rb
+++ b/app/workers/process_commit_worker.rb
@@ -5,8 +5,7 @@
 # Consider using an extra worker if you need to add any extra (and potentially
 # slow) processing of commits.
 class ProcessCommitWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   # project_id - The ID of the project this commit belongs to.
   # user_id - The ID of the user that pushed the commit.
diff --git a/app/workers/project_cache_worker.rb b/app/workers/project_cache_worker.rb
index 19736076938f1..ca7dd48032234 100644
--- a/app/workers/project_cache_worker.rb
+++ b/app/workers/project_cache_worker.rb
@@ -1,7 +1,6 @@
 # Worker for updating any project specific caches.
 class ProjectCacheWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   prepend EE::Workers::ProjectCacheWorker
 
   LEASE_TIMEOUT = 15.minutes.to_i
diff --git a/app/workers/project_destroy_worker.rb b/app/workers/project_destroy_worker.rb
index 3be7e686609a9..1ba854ca4cb6c 100644
--- a/app/workers/project_destroy_worker.rb
+++ b/app/workers/project_destroy_worker.rb
@@ -1,6 +1,5 @@
 class ProjectDestroyWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include ExceptionBacktrace
 
   def perform(project_id, user_id, params)
diff --git a/app/workers/project_export_worker.rb b/app/workers/project_export_worker.rb
index f13ac9e5db289..c100852374a1e 100644
--- a/app/workers/project_export_worker.rb
+++ b/app/workers/project_export_worker.rb
@@ -1,6 +1,5 @@
 class ProjectExportWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include ExceptionBacktrace
 
   sidekiq_options retry: 3
diff --git a/app/workers/project_migrate_hashed_storage_worker.rb b/app/workers/project_migrate_hashed_storage_worker.rb
index 127aa6b9d7def..d01eb744e5d5b 100644
--- a/app/workers/project_migrate_hashed_storage_worker.rb
+++ b/app/workers/project_migrate_hashed_storage_worker.rb
@@ -1,6 +1,5 @@
 class ProjectMigrateHashedStorageWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   LEASE_TIMEOUT = 30.seconds.to_i
 
diff --git a/app/workers/project_service_worker.rb b/app/workers/project_service_worker.rb
index 4883d848c53b6..75c4b8b36632e 100644
--- a/app/workers/project_service_worker.rb
+++ b/app/workers/project_service_worker.rb
@@ -1,6 +1,5 @@
 class ProjectServiceWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   sidekiq_options dead: false
 
diff --git a/app/workers/propagate_service_template_worker.rb b/app/workers/propagate_service_template_worker.rb
index 6b607451c7ab8..635a97c99afc8 100644
--- a/app/workers/propagate_service_template_worker.rb
+++ b/app/workers/propagate_service_template_worker.rb
@@ -1,7 +1,6 @@
 # Worker for updating any project specific caches.
 class PropagateServiceTemplateWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   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 2b43bb19ad1a3..5ff62ab1369e7 100644
--- a/app/workers/prune_old_events_worker.rb
+++ b/app/workers/prune_old_events_worker.rb
@@ -1,5 +1,5 @@
 class PruneOldEventsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/reactive_caching_worker.rb b/app/workers/reactive_caching_worker.rb
index 18b8daf4e1e75..ef3ddb9024bac 100644
--- a/app/workers/reactive_caching_worker.rb
+++ b/app/workers/reactive_caching_worker.rb
@@ -1,6 +1,5 @@
 class ReactiveCachingWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(class_name, id, *args)
     klass = begin
diff --git a/app/workers/remove_expired_group_links_worker.rb b/app/workers/remove_expired_group_links_worker.rb
index 2a619f834100c..7e64c3070a89c 100644
--- a/app/workers/remove_expired_group_links_worker.rb
+++ b/app/workers/remove_expired_group_links_worker.rb
@@ -1,5 +1,5 @@
 class RemoveExpiredGroupLinksWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/remove_expired_members_worker.rb b/app/workers/remove_expired_members_worker.rb
index 31f652e5f9bc1..d80b3b15840a1 100644
--- a/app/workers/remove_expired_members_worker.rb
+++ b/app/workers/remove_expired_members_worker.rb
@@ -1,5 +1,5 @@
 class RemoveExpiredMembersWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/remove_old_web_hook_logs_worker.rb b/app/workers/remove_old_web_hook_logs_worker.rb
index 555e1bb86919d..87fed42d7ce20 100644
--- a/app/workers/remove_old_web_hook_logs_worker.rb
+++ b/app/workers/remove_old_web_hook_logs_worker.rb
@@ -1,5 +1,5 @@
 class RemoveOldWebHookLogsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   WEB_HOOK_LOG_LIFETIME = 2.days
diff --git a/app/workers/remove_unreferenced_lfs_objects_worker.rb b/app/workers/remove_unreferenced_lfs_objects_worker.rb
index b80f131d5f7cd..8daf079fc3160 100644
--- a/app/workers/remove_unreferenced_lfs_objects_worker.rb
+++ b/app/workers/remove_unreferenced_lfs_objects_worker.rb
@@ -1,5 +1,5 @@
 class RemoveUnreferencedLfsObjectsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/repository_archive_cache_worker.rb b/app/workers/repository_archive_cache_worker.rb
index e47069df18906..86a258cf94f3f 100644
--- a/app/workers/repository_archive_cache_worker.rb
+++ b/app/workers/repository_archive_cache_worker.rb
@@ -1,5 +1,5 @@
 class RepositoryArchiveCacheWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/repository_check/batch_worker.rb b/app/workers/repository_check/batch_worker.rb
index b94d83bd70983..76688cf51c1b0 100644
--- a/app/workers/repository_check/batch_worker.rb
+++ b/app/workers/repository_check/batch_worker.rb
@@ -1,6 +1,6 @@
 module RepositoryCheck
   class BatchWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include CronjobQueue
 
     RUN_TIME = 3600
diff --git a/app/workers/repository_check/clear_worker.rb b/app/workers/repository_check/clear_worker.rb
index 85bc9103538dd..97b89dc3db541 100644
--- a/app/workers/repository_check/clear_worker.rb
+++ b/app/workers/repository_check/clear_worker.rb
@@ -1,6 +1,6 @@
 module RepositoryCheck
   class ClearWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include RepositoryCheckQueue
 
     def perform
diff --git a/app/workers/repository_check/single_repository_worker.rb b/app/workers/repository_check/single_repository_worker.rb
index 164586cf0b742..bf0ae7751c723 100644
--- a/app/workers/repository_check/single_repository_worker.rb
+++ b/app/workers/repository_check/single_repository_worker.rb
@@ -1,6 +1,6 @@
 module RepositoryCheck
   class SingleRepositoryWorker
-    include Sidekiq::Worker
+    include ApplicationWorker
     include RepositoryCheckQueue
 
     def perform(project_id)
diff --git a/app/workers/repository_fork_worker.rb b/app/workers/repository_fork_worker.rb
index 001c11b73e161..a07ef1705a156 100644
--- a/app/workers/repository_fork_worker.rb
+++ b/app/workers/repository_fork_worker.rb
@@ -1,9 +1,8 @@
 class RepositoryForkWorker
   ForkError = Class.new(StandardError)
 
-  include Sidekiq::Worker
+  include ApplicationWorker
   include Gitlab::ShellAdapter
-  include DedicatedSidekiqQueue
   include ProjectStartImport
 
   sidekiq_options status_expiration: StuckImportJobsWorker::IMPORT_JOBS_EXPIRATION
diff --git a/app/workers/repository_import_worker.rb b/app/workers/repository_import_worker.rb
index abe5c7ab391d2..c0eb47b1e4dc3 100644
--- a/app/workers/repository_import_worker.rb
+++ b/app/workers/repository_import_worker.rb
@@ -1,8 +1,7 @@
 class RepositoryImportWorker
   ImportError = Class.new(StandardError)
 
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include ExceptionBacktrace
   include ProjectStartImport
 
diff --git a/app/workers/requests_profiles_worker.rb b/app/workers/requests_profiles_worker.rb
index 703b025d76e86..55c236e9e9de3 100644
--- a/app/workers/requests_profiles_worker.rb
+++ b/app/workers/requests_profiles_worker.rb
@@ -1,5 +1,5 @@
 class RequestsProfilesWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/schedule_update_user_activity_worker.rb b/app/workers/schedule_update_user_activity_worker.rb
index 6c2c3e437f31d..d93765775970c 100644
--- a/app/workers/schedule_update_user_activity_worker.rb
+++ b/app/workers/schedule_update_user_activity_worker.rb
@@ -1,5 +1,5 @@
 class ScheduleUpdateUserActivityWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform(batch_size = 500)
diff --git a/app/workers/stage_update_worker.rb b/app/workers/stage_update_worker.rb
index c301cea5ad6d9..69f2318d83bb7 100644
--- a/app/workers/stage_update_worker.rb
+++ b/app/workers/stage_update_worker.rb
@@ -1,5 +1,5 @@
 class StageUpdateWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include PipelineQueue
 
   enqueue_in group: :processing
diff --git a/app/workers/storage_migrator_worker.rb b/app/workers/storage_migrator_worker.rb
index b48ead799b91e..f92421a667d9b 100644
--- a/app/workers/storage_migrator_worker.rb
+++ b/app/workers/storage_migrator_worker.rb
@@ -1,6 +1,5 @@
 class StorageMigratorWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   BATCH_SIZE = 100
 
diff --git a/app/workers/stuck_ci_jobs_worker.rb b/app/workers/stuck_ci_jobs_worker.rb
index 367e227f6800e..fb26fa4c515ce 100644
--- a/app/workers/stuck_ci_jobs_worker.rb
+++ b/app/workers/stuck_ci_jobs_worker.rb
@@ -1,5 +1,5 @@
 class StuckCiJobsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   EXCLUSIVE_LEASE_KEY = 'stuck_ci_builds_worker_lease'.freeze
diff --git a/app/workers/stuck_import_jobs_worker.rb b/app/workers/stuck_import_jobs_worker.rb
index 8461f7c0c71f4..28c2f6b8c82f6 100644
--- a/app/workers/stuck_import_jobs_worker.rb
+++ b/app/workers/stuck_import_jobs_worker.rb
@@ -1,5 +1,5 @@
 class StuckImportJobsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   IMPORT_JOBS_EXPIRATION = 15.hours.to_i
diff --git a/app/workers/stuck_merge_jobs_worker.rb b/app/workers/stuck_merge_jobs_worker.rb
index a396c0f27b209..36d2a2e6466bb 100644
--- a/app/workers/stuck_merge_jobs_worker.rb
+++ b/app/workers/stuck_merge_jobs_worker.rb
@@ -1,5 +1,5 @@
 class StuckMergeJobsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/system_hook_push_worker.rb b/app/workers/system_hook_push_worker.rb
index e43bbe35de916..ceeaaf8d18994 100644
--- a/app/workers/system_hook_push_worker.rb
+++ b/app/workers/system_hook_push_worker.rb
@@ -1,6 +1,5 @@
 class SystemHookPushWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(push_data, hook_id)
     SystemHooksService.new.execute_hooks(push_data, hook_id)
diff --git a/app/workers/trending_projects_worker.rb b/app/workers/trending_projects_worker.rb
index 0531630d13a7b..7eb65452a7dcf 100644
--- a/app/workers/trending_projects_worker.rb
+++ b/app/workers/trending_projects_worker.rb
@@ -1,5 +1,5 @@
 class TrendingProjectsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/app/workers/update_merge_requests_worker.rb b/app/workers/update_merge_requests_worker.rb
index afc47fc63d65d..74bb999327501 100644
--- a/app/workers/update_merge_requests_worker.rb
+++ b/app/workers/update_merge_requests_worker.rb
@@ -1,6 +1,5 @@
 class UpdateMergeRequestsWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   LOG_TIME_THRESHOLD = 90 # seconds
 
diff --git a/app/workers/update_user_activity_worker.rb b/app/workers/update_user_activity_worker.rb
index 31bbdb69edb18..27ec5cd33fb52 100644
--- a/app/workers/update_user_activity_worker.rb
+++ b/app/workers/update_user_activity_worker.rb
@@ -1,6 +1,5 @@
 class UpdateUserActivityWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(pairs)
     pairs = cast_data(pairs)
diff --git a/app/workers/upload_checksum_worker.rb b/app/workers/upload_checksum_worker.rb
index 78931f1258fbe..9222760c0316a 100644
--- a/app/workers/upload_checksum_worker.rb
+++ b/app/workers/upload_checksum_worker.rb
@@ -1,6 +1,5 @@
 class UploadChecksumWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(upload_id)
     upload = Upload.find(upload_id)
diff --git a/app/workers/wait_for_cluster_creation_worker.rb b/app/workers/wait_for_cluster_creation_worker.rb
index 241ed3901dc18..19cdb279aaaf9 100644
--- a/app/workers/wait_for_cluster_creation_worker.rb
+++ b/app/workers/wait_for_cluster_creation_worker.rb
@@ -1,5 +1,5 @@
 class WaitForClusterCreationWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include ClusterQueue
 
   def perform(cluster_id)
diff --git a/app/workers/web_hook_worker.rb b/app/workers/web_hook_worker.rb
index 713c022804044..dfc3f33ad9d4b 100644
--- a/app/workers/web_hook_worker.rb
+++ b/app/workers/web_hook_worker.rb
@@ -1,6 +1,5 @@
 class WebHookWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   sidekiq_options retry: 4, dead: false
 
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index ee2f44d2b9ce5..9db9eeafbfda3 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -76,12 +76,14 @@
 # The Sidekiq client API always adds the queue to the Sidekiq queue
 # list, but mail_room and gitlab-shell do not. This is only necessary
 # for monitoring.
-queues = Gitlab::SidekiqConfig.queues
-
 begin
+  queues = Gitlab::SidekiqConfig.worker_queues
+
   Sidekiq.redis do |conn|
     conn.pipelined do
-      queues.each { |queue| conn.sadd('queues', queue) }
+      queues.each do |queue|
+        conn.sadd('queues', queue)
+      end
     end
   end
 rescue Redis::BaseError, SocketError, Errno::ENOENT, Errno::EADDRNOTAVAIL, Errno::EAFNOSUPPORT, Errno::ECONNRESET, Errno::ECONNREFUSED
diff --git a/doc/development/sidekiq_style_guide.md b/doc/development/sidekiq_style_guide.md
index 1e9fdbc65e28c..a120f3e477191 100644
--- a/doc/development/sidekiq_style_guide.md
+++ b/doc/development/sidekiq_style_guide.md
@@ -18,8 +18,7 @@ include the `DedicatedSidekiqQueue` concern as follows:
 
 ```ruby
 class ProcessSomethingWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 end
 ```
 
diff --git a/ee/app/workers/admin_emails_worker.rb b/ee/app/workers/admin_emails_worker.rb
index b1f3d62cfab95..ae6c92f0261a8 100644
--- a/ee/app/workers/admin_emails_worker.rb
+++ b/ee/app/workers/admin_emails_worker.rb
@@ -1,6 +1,5 @@
 class AdminEmailsWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(recipient_id, subject, body)
     recipient_list(recipient_id).pluck(:id).uniq.each do |user_id|
diff --git a/ee/app/workers/clear_shared_runners_minutes_worker.rb b/ee/app/workers/clear_shared_runners_minutes_worker.rb
index 10465d5057933..11fc0c8485678 100644
--- a/ee/app/workers/clear_shared_runners_minutes_worker.rb
+++ b/ee/app/workers/clear_shared_runners_minutes_worker.rb
@@ -1,7 +1,7 @@
 class ClearSharedRunnersMinutesWorker
   LEASE_TIMEOUT = 3600
 
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/ee/app/workers/elastic_batch_project_indexer_worker.rb b/ee/app/workers/elastic_batch_project_indexer_worker.rb
index daa3f35fe849a..43d330cbff673 100644
--- a/ee/app/workers/elastic_batch_project_indexer_worker.rb
+++ b/ee/app/workers/elastic_batch_project_indexer_worker.rb
@@ -1,10 +1,9 @@
 class ElasticBatchProjectIndexerWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include Gitlab::CurrentSettings
 
   # Batch indexing is a generally a onetime option, so give finer control over
   # queuing and concurrency
-  include DedicatedSidekiqQueue
 
   # This worker is long-running, but idempotent, so retry many times if
   # necessary
diff --git a/ee/app/workers/elastic_commit_indexer_worker.rb b/ee/app/workers/elastic_commit_indexer_worker.rb
index 39dc68cb5703b..c580ed72ca971 100644
--- a/ee/app/workers/elastic_commit_indexer_worker.rb
+++ b/ee/app/workers/elastic_commit_indexer_worker.rb
@@ -1,6 +1,5 @@
 class ElasticCommitIndexerWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include Gitlab::CurrentSettings
 
   sidekiq_options retry: 2
diff --git a/ee/app/workers/elastic_indexer_worker.rb b/ee/app/workers/elastic_indexer_worker.rb
index 52c1ea1d431a6..7eb9e4384bb50 100644
--- a/ee/app/workers/elastic_indexer_worker.rb
+++ b/ee/app/workers/elastic_indexer_worker.rb
@@ -1,6 +1,5 @@
 class ElasticIndexerWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
   include Elasticsearch::Model::Client::ClassMethods
   include Gitlab::CurrentSettings
 
diff --git a/ee/app/workers/export_csv_worker.rb b/ee/app/workers/export_csv_worker.rb
index 40ad758063c14..565489c1e19ae 100644
--- a/ee/app/workers/export_csv_worker.rb
+++ b/ee/app/workers/export_csv_worker.rb
@@ -1,6 +1,5 @@
 class ExportCsvWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(current_user_id, project_id, params)
     @current_user = User.find(current_user_id)
diff --git a/ee/app/workers/historical_data_worker.rb b/ee/app/workers/historical_data_worker.rb
index c94cb27fcf668..05fb979a823f5 100644
--- a/ee/app/workers/historical_data_worker.rb
+++ b/ee/app/workers/historical_data_worker.rb
@@ -1,5 +1,5 @@
 class HistoricalDataWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/ee/app/workers/ldap_all_groups_sync_worker.rb b/ee/app/workers/ldap_all_groups_sync_worker.rb
index aa1bd27540f26..515fdb08ea723 100644
--- a/ee/app/workers/ldap_all_groups_sync_worker.rb
+++ b/ee/app/workers/ldap_all_groups_sync_worker.rb
@@ -1,5 +1,5 @@
 class LdapAllGroupsSyncWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/ee/app/workers/ldap_group_sync_worker.rb b/ee/app/workers/ldap_group_sync_worker.rb
index 6c778051dcee9..ca83dc4dad804 100644
--- a/ee/app/workers/ldap_group_sync_worker.rb
+++ b/ee/app/workers/ldap_group_sync_worker.rb
@@ -1,6 +1,5 @@
 class LdapGroupSyncWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(group_ids, provider = nil)
     return unless Gitlab::LDAP::Config.group_sync_enabled?
diff --git a/ee/app/workers/ldap_sync_worker.rb b/ee/app/workers/ldap_sync_worker.rb
index 7b4f13b3a865b..2b7653cbc60a4 100644
--- a/ee/app/workers/ldap_sync_worker.rb
+++ b/ee/app/workers/ldap_sync_worker.rb
@@ -1,5 +1,5 @@
 class LdapSyncWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   def perform
diff --git a/ee/app/workers/object_storage_upload_worker.rb b/ee/app/workers/object_storage_upload_worker.rb
index 0a374c4323f10..f0e0dc6ade091 100644
--- a/ee/app/workers/object_storage_upload_worker.rb
+++ b/ee/app/workers/object_storage_upload_worker.rb
@@ -1,6 +1,5 @@
 class ObjectStorageUploadWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(uploader_class_name, subject_class_name, file_field, subject_id)
     uploader_class = uploader_class_name.constantize
diff --git a/ee/app/workers/project_update_repository_storage_worker.rb b/ee/app/workers/project_update_repository_storage_worker.rb
index a52025c3f21da..6e668230d3ba7 100644
--- a/ee/app/workers/project_update_repository_storage_worker.rb
+++ b/ee/app/workers/project_update_repository_storage_worker.rb
@@ -1,6 +1,5 @@
 class ProjectUpdateRepositoryStorageWorker
-  include Sidekiq::Worker
-  include DedicatedSidekiqQueue
+  include ApplicationWorker
 
   def perform(project_id, new_repository_storage_key)
     project = Project.find(project_id)
diff --git a/ee/app/workers/rebase_worker.rb b/ee/app/workers/rebase_worker.rb
index b292260701949..83414d9729dca 100644
--- a/ee/app/workers/rebase_worker.rb
+++ b/ee/app/workers/rebase_worker.rb
@@ -1,5 +1,5 @@
 class RebaseWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
 
   sidekiq_options queue: :merge
 
diff --git a/ee/app/workers/repository_update_mirror_worker.rb b/ee/app/workers/repository_update_mirror_worker.rb
index a9cf43f1f97e3..f01d9faba7490 100644
--- a/ee/app/workers/repository_update_mirror_worker.rb
+++ b/ee/app/workers/repository_update_mirror_worker.rb
@@ -1,9 +1,8 @@
 class RepositoryUpdateMirrorWorker
   UpdateError = Class.new(StandardError)
 
-  include Sidekiq::Worker
+  include ApplicationWorker
   include Gitlab::ShellAdapter
-  include DedicatedSidekiqQueue
   include ProjectStartImport
 
   LEASE_KEY = 'repository_update_mirror_worker_start_scheduler'.freeze
diff --git a/ee/app/workers/repository_update_remote_mirror_worker.rb b/ee/app/workers/repository_update_remote_mirror_worker.rb
index 2fe7796a9d891..bb963979e88c4 100644
--- a/ee/app/workers/repository_update_remote_mirror_worker.rb
+++ b/ee/app/workers/repository_update_remote_mirror_worker.rb
@@ -2,9 +2,8 @@ class RepositoryUpdateRemoteMirrorWorker
   UpdateAlreadyInProgressError = Class.new(StandardError)
   UpdateError = Class.new(StandardError)
 
-  include Sidekiq::Worker
+  include ApplicationWorker
   include Gitlab::ShellAdapter
-  include DedicatedSidekiqQueue
 
   sidekiq_options retry: 3, dead: false
 
diff --git a/ee/app/workers/update_all_mirrors_worker.rb b/ee/app/workers/update_all_mirrors_worker.rb
index d66e0751f3b81..de39249df92ab 100644
--- a/ee/app/workers/update_all_mirrors_worker.rb
+++ b/ee/app/workers/update_all_mirrors_worker.rb
@@ -1,5 +1,5 @@
 class UpdateAllMirrorsWorker
-  include Sidekiq::Worker
+  include ApplicationWorker
   include CronjobQueue
 
   LEASE_TIMEOUT = 5.minutes
diff --git a/lib/gitlab/sidekiq_cluster/cli.rb b/lib/gitlab/sidekiq_cluster/cli.rb
index d2efeb22ed55e..3f8e3a746a9ef 100644
--- a/lib/gitlab/sidekiq_cluster/cli.rb
+++ b/lib/gitlab/sidekiq_cluster/cli.rb
@@ -30,18 +30,16 @@ def run(argv = ARGV)
 
         option_parser.parse!(argv)
 
-        parsed_queues = SidekiqCluster.parse_queues(argv)
+        queue_groups = SidekiqCluster.parse_queues(argv)
 
-        queues =
-          if @negate_queues
-            parsed_queues.map { |queues| SidekiqConfig.queues(@rails_path, except: queues) }
-          else
-            parsed_queues
-          end
+        if @negate_queues
+          all_queues = SidekiqConfig.config_queues(@rails_path)
+          queue_groups.map! { |queues| all_queues - queues }
+        end
 
-        @logger.info("Starting cluster with #{queues.length} processes")
+        @logger.info("Starting cluster with #{queue_groups.length} processes")
 
-        @processes = SidekiqCluster.start(queues, @environment, @rails_path)
+        @processes = SidekiqCluster.start(queue_groups, @environment, @rails_path)
 
         write_pid
         trap_signals
diff --git a/lib/gitlab/sidekiq_config.rb b/lib/gitlab/sidekiq_config.rb
index cb51200232e03..02b71e12d28be 100644
--- a/lib/gitlab/sidekiq_config.rb
+++ b/lib/gitlab/sidekiq_config.rb
@@ -2,13 +2,51 @@
 
 module Gitlab
   module SidekiqConfig
-    def self.queues(rails_path = Rails.root.to_s, except: [])
-      queues_file_path = File.join(rails_path, 'config', 'sidekiq_queues.yml')
+    def self.redis_queues
+      @redis_queues ||= Sidekiq::Queue.all.map(&:name)
+    end
+
+    # This method is called by `bin/sidekiq-cluster` in EE, which runs outside
+    # of bundler/Rails context, so we cannot use any gem or Rails methods.
+    def self.config_queues(rails_path = Rails.root.to_s)
+      @config_queues ||= begin
+        config = YAML.load_file(File.join(rails_path, 'config', 'sidekiq_queues.yml'))
+        config[:queues].map(&:first)
+      end
+    end
+
+    def self.cron_workers
+      @cron_workers ||= Settings.cron_jobs.map { |job_name, options| options['job_class'].constantize }
+    end
+
+    def self.workers
+      @workers ||=
+        find_workers(Rails.root.join('app', 'workers')) +
+        find_workers(Rails.root.join('ee', 'app', 'workers'))
+    end
+
+    def self.default_queues
+      [ActionMailer::DeliveryJob.queue_name, 'default']
+    end
+
+    def self.worker_queues
+      @worker_queues ||= (workers.map(&:queue) + default_queues).uniq
+    end
+
+    def self.find_workers(root)
+      concerns = root.join('concerns').to_s
+
+      workers = Dir[root.join('**', '*.rb')]
+        .reject { |path| path.start_with?(concerns) }
+
+      workers.map! do |path|
+        ns = Pathname.new(path).relative_path_from(root).to_s.gsub('.rb', '')
 
-      @queues_file = {}
-      @queues_file[queues_file_path] ||= YAML.load_file(queues_file_path)
+        ns.camelize.constantize
+      end
 
-      @queues_file[queues_file_path].fetch(:queues).map { |queue, _| queue } - except
+      # Skip concerns
+      workers.select { |w| w < Sidekiq::Worker }
     end
   end
 end
diff --git a/spec/lib/gitlab/sidekiq_cluster/cli_spec.rb b/spec/lib/gitlab/sidekiq_cluster/cli_spec.rb
index 56740340ecc17..6ee8448fd3380 100644
--- a/spec/lib/gitlab/sidekiq_cluster/cli_spec.rb
+++ b/spec/lib/gitlab/sidekiq_cluster/cli_spec.rb
@@ -22,7 +22,7 @@
 
       context 'with --negate flag' do
         it 'starts Sidekiq workers for all queues on sidekiq_queues.yml except the ones on argv' do
-          expect(Gitlab::SidekiqConfig).to receive(:queues).and_return(['baz'])
+          expect(Gitlab::SidekiqConfig).to receive(:config_queues).and_return(['baz'])
           expect(Gitlab::SidekiqCluster).to receive(:start)
                                               .with([['baz']], 'test', Dir.pwd)
                                               .and_return([])
diff --git a/spec/lib/gitlab/sidekiq_config_spec.rb b/spec/lib/gitlab/sidekiq_config_spec.rb
index 8fc5b1a2c6b85..70a8644a27685 100644
--- a/spec/lib/gitlab/sidekiq_config_spec.rb
+++ b/spec/lib/gitlab/sidekiq_config_spec.rb
@@ -1,24 +1,38 @@
 require 'rails_helper'
 
 describe Gitlab::SidekiqConfig do
-  describe '.queues' do
-    let(:queues_file_path) { Rails.root.join('config', 'sidekiq_queues.yml') }
+  describe '.workers' do
+    it 'includes all workers' do
+      workers = described_class.workers
 
-    context 'without except argument' do
-      it 'returns all queues defined on config/sidekiq_queues.yml file' do
-        expected_queues = YAML.load_file(queues_file_path)[:queues].map { |queue, _| queue }
+      expect(workers).to include(PostReceive)
+      expect(workers).to include(MergeWorker)
+    end
+
+    it 'includes EE workers' do
+      workers = described_class.workers
+
+      expect(workers).to include(RepositoryUpdateMirrorWorker)
+      expect(workers).to include(LdapGroupSyncWorker)
+    end
+  end
+
+  describe '.worker_queues' do
+    it 'includes all queues' do
+      queues = described_class.worker_queues
 
-        expect(described_class.queues).to eq(expected_queues)
-      end
+      expect(queues).to include('post_receive')
+      expect(queues).to include('merge')
+      expect(queues).to include('cronjob')
+      expect(queues).to include('mailers')
+      expect(queues).to include('default')
     end
 
-    context 'with except argument' do
-      it 'returns queues on config/sidekiq_queues.yml filtering out excluded ones' do
-        expected_queues =
-          YAML.load_file(queues_file_path)[:queues].map { |queue, _| queue } - ['webhook']
+    it 'includes EE queues' do
+      queues = described_class.worker_queues
 
-        expect(described_class.queues(except: ['webhook'])).to eq(expected_queues)
-      end
+      expect(queues).to include('repository_update_mirror')
+      expect(queues).to include('ldap_group_sync')
     end
   end
 end
diff --git a/spec/workers/concerns/application_worker_spec.rb b/spec/workers/concerns/application_worker_spec.rb
new file mode 100644
index 0000000000000..fd434f5860239
--- /dev/null
+++ b/spec/workers/concerns/application_worker_spec.rb
@@ -0,0 +1,27 @@
+require 'spec_helper'
+
+describe ApplicationWorker do
+  let(:worker) do
+    Class.new do
+      def self.name
+        'Gitlab::Foo::Bar::DummyWorker'
+      end
+
+      include ApplicationWorker
+    end
+  end
+
+  describe 'Sidekiq options' do
+    it 'sets the queue name based on the class name' do
+      expect(worker.sidekiq_options['queue']).to eq('foo_bar_dummy')
+    end
+  end
+
+  describe '.queue' do
+    it 'returns the queue name' do
+      worker.sidekiq_options queue: :some_queue
+
+      expect(worker.queue).to eq('some_queue')
+    end
+  end
+end
diff --git a/spec/workers/concerns/cluster_queue_spec.rb b/spec/workers/concerns/cluster_queue_spec.rb
index 1050651fa51c3..5049886b55c73 100644
--- a/spec/workers/concerns/cluster_queue_spec.rb
+++ b/spec/workers/concerns/cluster_queue_spec.rb
@@ -3,7 +3,11 @@
 describe ClusterQueue do
   let(:worker) do
     Class.new do
-      include Sidekiq::Worker
+      def self.name
+        'DummyWorker'
+      end
+
+      include ApplicationWorker
       include ClusterQueue
     end
   end
diff --git a/spec/workers/concerns/cronjob_queue_spec.rb b/spec/workers/concerns/cronjob_queue_spec.rb
index 5d1336c21a6b7..3ae1c5f54d8eb 100644
--- a/spec/workers/concerns/cronjob_queue_spec.rb
+++ b/spec/workers/concerns/cronjob_queue_spec.rb
@@ -3,7 +3,11 @@
 describe CronjobQueue do
   let(:worker) do
     Class.new do
-      include Sidekiq::Worker
+      def self.name
+        'DummyWorker'
+      end
+
+      include ApplicationWorker
       include CronjobQueue
     end
   end
diff --git a/spec/workers/concerns/dedicated_sidekiq_queue_spec.rb b/spec/workers/concerns/dedicated_sidekiq_queue_spec.rb
deleted file mode 100644
index 512baec8b7e1d..0000000000000
--- a/spec/workers/concerns/dedicated_sidekiq_queue_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'spec_helper'
-
-describe DedicatedSidekiqQueue do
-  let(:worker) do
-    Class.new do
-      def self.name
-        'Foo::Bar::DummyWorker'
-      end
-
-      include Sidekiq::Worker
-      include DedicatedSidekiqQueue
-    end
-  end
-
-  describe 'queue names' do
-    it 'sets the queue name based on the class name' do
-      expect(worker.sidekiq_options['queue']).to eq('foo_bar_dummy')
-    end
-  end
-end
diff --git a/spec/workers/concerns/geo_queue_spec.rb b/spec/workers/concerns/geo_queue_spec.rb
index 58afe52d7d2a3..3be916e28c983 100644
--- a/spec/workers/concerns/geo_queue_spec.rb
+++ b/spec/workers/concerns/geo_queue_spec.rb
@@ -3,7 +3,11 @@
 describe GeoQueue do
   let(:worker) do
     Class.new do
-      include Sidekiq::Worker
+      def self.name
+        'DummyWorker'
+      end
+
+      include ApplicationWorker
       include GeoQueue
     end
   end
diff --git a/spec/workers/concerns/gitlab/github_import/object_importer_spec.rb b/spec/workers/concerns/gitlab/github_import/object_importer_spec.rb
index 3ccf06f2d7d11..68cfe9d5545ee 100644
--- a/spec/workers/concerns/gitlab/github_import/object_importer_spec.rb
+++ b/spec/workers/concerns/gitlab/github_import/object_importer_spec.rb
@@ -3,6 +3,10 @@
 describe Gitlab::GithubImport::ObjectImporter do
   let(:worker) do
     Class.new do
+      def self.name
+        'DummyWorker'
+      end
+
       include(Gitlab::GithubImport::ObjectImporter)
 
       def counter_name
diff --git a/spec/workers/concerns/gitlab/github_import/queue_spec.rb b/spec/workers/concerns/gitlab/github_import/queue_spec.rb
index 321ae3fe97877..9c69ee32da1d9 100644
--- a/spec/workers/concerns/gitlab/github_import/queue_spec.rb
+++ b/spec/workers/concerns/gitlab/github_import/queue_spec.rb
@@ -3,7 +3,11 @@
 describe Gitlab::GithubImport::Queue do
   it 'sets the Sidekiq options for the worker' do
     worker = Class.new do
-      include Sidekiq::Worker
+      def self.name
+        'DummyWorker'
+      end
+
+      include ApplicationWorker
       include Gitlab::GithubImport::Queue
     end
 
diff --git a/spec/workers/concerns/pipeline_queue_spec.rb b/spec/workers/concerns/pipeline_queue_spec.rb
index eac5a770e5fc4..dd91176094813 100644
--- a/spec/workers/concerns/pipeline_queue_spec.rb
+++ b/spec/workers/concerns/pipeline_queue_spec.rb
@@ -3,7 +3,11 @@
 describe PipelineQueue do
   let(:worker) do
     Class.new do
-      include Sidekiq::Worker
+      def self.name
+        'DummyWorker'
+      end
+
+      include ApplicationWorker
       include PipelineQueue
     end
   end
diff --git a/spec/workers/concerns/repository_check_queue_spec.rb b/spec/workers/concerns/repository_check_queue_spec.rb
index 8868e9698293a..fdbbfcc90a59b 100644
--- a/spec/workers/concerns/repository_check_queue_spec.rb
+++ b/spec/workers/concerns/repository_check_queue_spec.rb
@@ -3,7 +3,11 @@
 describe RepositoryCheckQueue do
   let(:worker) do
     Class.new do
-      include Sidekiq::Worker
+      def self.name
+        'DummyWorker'
+      end
+
+      include ApplicationWorker
       include RepositoryCheckQueue
     end
   end
diff --git a/spec/workers/every_sidekiq_worker_spec.rb b/spec/workers/every_sidekiq_worker_spec.rb
index 009bdd24383f4..7ee0a51a263d5 100644
--- a/spec/workers/every_sidekiq_worker_spec.rb
+++ b/spec/workers/every_sidekiq_worker_spec.rb
@@ -1,45 +1,21 @@
 require 'spec_helper'
 
 describe 'Every Sidekiq worker' do
-  let(:workers) do
-    root = Rails.root.join('app', 'workers')
-    concerns = root.join('concerns').to_s
-    ee_modules = root.join('ee').to_s
-
-    workers = Dir[root.join('**', '*.rb')]
-      .reject { |path| path.start_with?(concerns, ee_modules) }
-
-    workers.map do |path|
-      ns = Pathname.new(path).relative_path_from(root).to_s.gsub('.rb', '')
-
-      ns.camelize.constantize
-    end
+  it 'includes ApplicationWorker' do
+    expect(Gitlab::SidekiqConfig.workers).to all(include(ApplicationWorker))
   end
 
   it 'does not use the default queue' do
-    workers.each do |worker|
-      expect(worker.sidekiq_options['queue'].to_s).not_to eq('default')
-    end
+    expect(Gitlab::SidekiqConfig.workers.map(&:queue)).not_to include('default')
   end
 
   it 'uses the cronjob queue when the worker runs as a cronjob' do
-    cron_workers = Settings.cron_jobs
-      .map { |job_name, options| options['job_class'].constantize }
-      .to_set
-
-    workers.each do |worker|
-      next unless cron_workers.include?(worker)
-
-      expect(worker.sidekiq_options['queue'].to_s).to eq('cronjob')
-    end
+    expect(Gitlab::SidekiqConfig.cron_workers.map(&:queue)).to all(eq('cronjob'))
   end
 
   it 'defines the queue in the Sidekiq configuration file' do
-    config = YAML.load_file(Rails.root.join('config', 'sidekiq_queues.yml').to_s)
-    queue_names = config[:queues].map { |(queue, _)| queue }.to_set
+    config_queue_names = Gitlab::SidekiqConfig.config_queues.to_set
 
-    workers.each do |worker|
-      expect(queue_names).to include(worker.sidekiq_options['queue'].to_s)
-    end
+    expect(Gitlab::SidekiqConfig.worker_queues).to all(be_in(config_queue_names))
   end
 end
-- 
GitLab