diff --git a/Gemfile.lock b/Gemfile.lock index 5cee485c..963a9a9d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -31,6 +31,7 @@ PATH rswag-api rswag-ui sidekiq + sidekiq-unique-jobs swagger_yard virtus @@ -134,6 +135,9 @@ GEM bcrypt (3.1.16) bootsnap (1.10.3) msgpack (~> 1.2) + brpoplpush-redis_script (0.1.3) + concurrent-ruby (~> 1.0, >= 1.0.5) + redis (>= 1.0, < 6) builder (3.2.4) byebug (11.1.3) case_transform (0.2) @@ -343,6 +347,12 @@ GEM connection_pool (>= 2.2.2) rack (~> 2.0) redis (>= 4.2.0) + sidekiq-unique-jobs (7.1.30) + brpoplpush-redis_script (> 0.1.1, <= 2.0.0) + concurrent-ruby (~> 1.0, >= 1.0.5) + redis (< 5.0) + sidekiq (>= 5.0, < 7.0) + thor (>= 0.20, < 3.0) sprockets (4.0.3) concurrent-ruby (~> 1.0) rack (> 1, < 3) diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index cb8da518..d168ea9f 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -4,10 +4,24 @@ Sidekiq.configure_client do |config| config.redis = { url: ENV['REDIS_URL'], size: 2 } + + config.client_middleware do |chain| + chain.add(SidekiqUniqueJobs::Middleware::Client) + end end Sidekiq.configure_server do |config| config.redis = { url: ENV['REDIS_URL'], size: 20 } + + config.client_middleware do |chain| + chain.add(SidekiqUniqueJobs::Middleware::Client) + end + + config.server_middleware do |chain| + chain.add(SidekiqUniqueJobs::Middleware::Server) + end + + SidekiqUniqueJobs::Server.configure(config) end if Settings.sidekiq.login.present? @@ -23,3 +37,7 @@ valid_login & valid_password end end + +SidekiqUniqueJobs.configure do |config| + config.enabled = !Rails.env.test? +end diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 6ad9c6c4..b24d9144 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -16,3 +16,5 @@ - [accounts, 10] - [containers, 10] - [github, 10] + - [disable_deployments, 5] + - [clusters, 10] diff --git a/core/Gemfile.lock b/core/Gemfile.lock index 10e59aff..bf98cba4 100644 --- a/core/Gemfile.lock +++ b/core/Gemfile.lock @@ -31,6 +31,7 @@ PATH rswag-api rswag-ui sidekiq + sidekiq-unique-jobs swagger_yard virtus @@ -131,6 +132,9 @@ GEM ice_nine (~> 0.11.0) thread_safe (~> 0.3, >= 0.3.1) bcrypt (3.1.16) + brpoplpush-redis_script (0.1.3) + concurrent-ruby (~> 1.0, >= 1.0.5) + redis (>= 1.0, < 6) builder (3.2.4) bump (0.10.0) byebug (11.1.3) @@ -357,6 +361,12 @@ GEM connection_pool (>= 2.2.5, < 3) rack (~> 2.0) redis (>= 4.5.0, < 5) + sidekiq-unique-jobs (7.1.30) + brpoplpush-redis_script (> 0.1.1, <= 2.0.0) + concurrent-ruby (~> 1.0, >= 1.0.5) + redis (< 5.0) + sidekiq (>= 5.0, < 7.0) + thor (>= 0.20, < 3.0) sprockets (4.1.1) concurrent-ruby (~> 1.0) rack (> 1, < 3) diff --git a/core/app/jobs/uffizzi_core/cluster/delete_job.rb b/core/app/jobs/uffizzi_core/cluster/delete_job.rb index 98b950ca..a9d49116 100644 --- a/core/app/jobs/uffizzi_core/cluster/delete_job.rb +++ b/core/app/jobs/uffizzi_core/cluster/delete_job.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true class UffizziCore::Cluster::DeleteJob < UffizziCore::ApplicationJob - sidekiq_options queue: :deployments, retry: 5 + sidekiq_options queue: :clusters, + lock: :until_executed, + retry: Settings.default_job_retry_count def perform(id) Rails.logger.info("DEPLOYMENT_PROCESS cluster_id=#{id} DeleteJob") diff --git a/core/app/jobs/uffizzi_core/cluster/deploy_job.rb b/core/app/jobs/uffizzi_core/cluster/deploy_job.rb index 8ba7036d..001c4415 100644 --- a/core/app/jobs/uffizzi_core/cluster/deploy_job.rb +++ b/core/app/jobs/uffizzi_core/cluster/deploy_job.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class UffizziCore::Cluster::DeployJob < UffizziCore::ApplicationJob - sidekiq_options queue: :deployments, retry: 5 + sidekiq_options queue: :clusters, retry: Settings.default_job_retry_count def perform(id) cluster = UffizziCore::Cluster.find(id) diff --git a/core/app/jobs/uffizzi_core/cluster/manage_deploying_job.rb b/core/app/jobs/uffizzi_core/cluster/manage_deploying_job.rb index 9dd08af4..df7ab02a 100644 --- a/core/app/jobs/uffizzi_core/cluster/manage_deploying_job.rb +++ b/core/app/jobs/uffizzi_core/cluster/manage_deploying_job.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true class UffizziCore::Cluster::ManageDeployingJob < UffizziCore::ApplicationJob - sidekiq_options queue: :deployments, retry: 5 + sidekiq_options queue: :clusters, retry: Settings.default_job_retry_count def perform(id, try = 1) cluster = UffizziCore::Cluster.find(id) diff --git a/core/app/jobs/uffizzi_core/deployment/delete_job.rb b/core/app/jobs/uffizzi_core/deployment/delete_job.rb index 787f79f1..b1e7baff 100644 --- a/core/app/jobs/uffizzi_core/deployment/delete_job.rb +++ b/core/app/jobs/uffizzi_core/deployment/delete_job.rb @@ -1,7 +1,9 @@ # frozen_string_literal: true class UffizziCore::Deployment::DeleteJob < UffizziCore::ApplicationJob - sidekiq_options queue: :deployments, retry: 5 + sidekiq_options queue: :disable_deployments, + lock: :until_executed, + retry: Settings.default_job_retry_count def perform(id) Rails.logger.info("DEPLOYMENT_PROCESS deployment_id=#{id} DeleteJob") diff --git a/core/uffizzi_core.gemspec b/core/uffizzi_core.gemspec index e600217c..b38f8b85 100644 --- a/core/uffizzi_core.gemspec +++ b/core/uffizzi_core.gemspec @@ -49,6 +49,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'rswag-api' spec.add_dependency 'rswag-ui' spec.add_dependency 'sidekiq' + spec.add_dependency 'sidekiq-unique-jobs' spec.add_dependency 'swagger_yard' spec.add_dependency 'virtus'