diff --git a/Gemfile b/Gemfile index dbac1c0531fb399f1bb7ac9ffdd1f3d29c8c3495..815d5130d0e8109ea66ba6762d6b627d296c9ab7 100644 --- a/Gemfile +++ b/Gemfile @@ -293,7 +293,7 @@ gem 'state_machines-activerecord', '~> 0.100.0', feature_category: :shared # rub # Background jobs gem 'sidekiq', path: 'vendor/gems/sidekiq', require: 'sidekiq', feature_category: :scalability -gem 'sidekiq-cron', '~> 1.12.0', feature_category: :scalability +gem 'sidekiq-cron', '~> 2.3.0', feature_category: :scalability gem 'gitlab-sidekiq-fetcher', path: 'vendor/gems/sidekiq-reliable-fetch', require: 'sidekiq-reliable-fetch', diff --git a/Gemfile.checksum b/Gemfile.checksum index 2ea5a4bfd2f168ab226d3fcc10c9e1f2bbe0a210..bd4730739599dc2b4980493e78f6d3f6344dd31f 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -97,6 +97,7 @@ {"name":"crack","version":"0.4.3","platform":"ruby","checksum":"5318ba8cd9cf7e0b5feb38948048503ba4b1fdc1b6ff30a39f0a00feb6036b29"}, {"name":"crass","version":"1.0.6","platform":"ruby","checksum":"dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d"}, {"name":"creole","version":"0.5.0","platform":"ruby","checksum":"951701e2d80760f156b1cb2a93471ca97c076289becc067a33b745133ed32c03"}, +{"name":"cronex","version":"0.15.0","platform":"ruby","checksum":"21c794e085fad2951c4f2e279f440340a35ba2297e0b738f22f263f69fbe2186"}, {"name":"css_parser","version":"1.14.0","platform":"ruby","checksum":"f2ce6148cd505297b07bdbe7a5db4cce5cf530071f9b732b9a23538d6cdc0113"}, {"name":"cssbundling-rails","version":"1.4.3","platform":"ruby","checksum":"53aecd5a7d24ac9c8fcd92975acd0e830fead4ee4583d3d3d49bb64651946e41"}, {"name":"csv","version":"3.3.0","platform":"ruby","checksum":"0bbd1defdc31134abefed027a639b3723c2753862150f4c3ee61cab71b20d67d"}, @@ -716,7 +717,7 @@ {"name":"sentry-sidekiq","version":"5.23.0","platform":"ruby","checksum":"34dc6413a25773e185acba605b0ed4dcec5edf3e8e562447b7b44ed6435d1c18"}, {"name":"shellany","version":"0.0.1","platform":"ruby","checksum":"0e127a9132698766d7e752e82cdac8250b6adbd09e6c0a7fbbb6f61964fedee7"}, {"name":"shoulda-matchers","version":"6.4.0","platform":"ruby","checksum":"9055bb7f4bb342125fb860809798855c630e05ef5e75837b3168b8e6ee1608b0"}, -{"name":"sidekiq-cron","version":"1.12.0","platform":"ruby","checksum":"6663080a454088bd88773a0da3ae91e554b8a2e8b06cfc629529a83fd1a3096c"}, +{"name":"sidekiq-cron","version":"2.3.1","platform":"ruby","checksum":"96ab3da372289a30dc744c1daa2ae2e85960b2444a6f6ed68df1ff7882c44aac"}, {"name":"sigdump","version":"0.2.5","platform":"ruby","checksum":"bb706c1cce70458b285d2c3a57121e801ccb79f68be7f7377692eb40b5437242"}, {"name":"signet","version":"0.19.0","platform":"ruby","checksum":"537f3939f57f141f691e6069a97ec40f34fadafc4c7e5ba94edb06cf4350dd31"}, {"name":"simple_po_parser","version":"1.1.6","platform":"ruby","checksum":"122687d44d3de516a0e69e2f383a4180f5015e8c5ed5a7f2258f2b376f64cbf3"}, @@ -799,6 +800,9 @@ {"name":"unf_ext","version":"0.0.8.2","platform":"x64-mingw-ucrt","checksum":"580e3c1ca389f10ca17d13ddeb5dc3fbdc80ce2c2b8cdb15c08af3a3b45a60fc"}, {"name":"unf_ext","version":"0.0.8.2","platform":"x64-mingw32","checksum":"f7e4c01774c91eb22e30d53dfc40ffbbb5a175f785c8f6f1be17ad96a0b29ed0"}, {"name":"unf_ext","version":"0.0.8.2","platform":"x86-mingw32","checksum":"6d44c13c98924bebd15ebdd4ed196ead403a0770ac03304570873349fda2a208"}, +{"name":"unicode","version":"0.4.4.5","platform":"java","checksum":"fa6eb747761a846015aa41a313c7565ba3c0de64b0cb7f31f5178fb021146e07"}, +{"name":"unicode","version":"0.4.4.5","platform":"ruby","checksum":"42f294bfc8e186d29da89d1f766071505a20a22776168a31bb3408e03fa7a9d7"}, +{"name":"unicode","version":"0.4.4.5","platform":"x86-mingw32","checksum":"6dfece0c5461314f80b7cdafc8e0a7978bc3fb39ac48c5399698b2ed44bf2e71"}, {"name":"unicode-display_width","version":"2.4.2","platform":"ruby","checksum":"6a10205d1a19ca790c4e53064ba93f09d9eb234bf6bd135d9deb6001c21428be"}, {"name":"unicode-emoji","version":"4.0.4","platform":"ruby","checksum":"2c2c4ef7f353e5809497126285a50b23056cc6e61b64433764a35eff6c36532a"}, {"name":"unicode_utils","version":"1.4.0","platform":"ruby","checksum":"b922d0cf2313b6b7136ada6645ce7154ffc86418ca07d53b058efe9eb72f2a40"}, diff --git a/Gemfile.lock b/Gemfile.lock index d808c4d21015934364953dd5f6e1b1191f3b39a5..9936d7804cef337bd610ed61e3207b058aae41a1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -466,6 +466,9 @@ GEM safe_yaml (~> 1.0.0) crass (1.0.6) creole (0.5.0) + cronex (0.15.0) + tzinfo + unicode (>= 0.4.4.5) css_parser (1.14.0) addressable cssbundling-rails (1.4.3) @@ -1822,10 +1825,11 @@ GEM shellany (0.0.1) shoulda-matchers (6.4.0) activesupport (>= 5.2.0) - sidekiq-cron (1.12.0) - fugit (~> 1.8) + sidekiq-cron (2.3.1) + cronex (>= 0.13.0) + fugit (~> 1.8, >= 1.11.1) globalid (>= 1.0.1) - sidekiq (>= 6) + sidekiq (>= 6.5.0) sigdump (0.2.5) signet (0.19.0) addressable (~> 2.8) @@ -2000,6 +2004,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) + unicode (0.4.4.5) unicode-display_width (2.4.2) unicode-emoji (4.0.4) unicode_utils (1.4.0) @@ -2408,7 +2413,7 @@ DEPENDENCIES sentry-sidekiq (~> 5.23.0) shoulda-matchers (~> 6.4.0) sidekiq! - sidekiq-cron (~> 1.12.0) + sidekiq-cron (~> 2.3.0) sigdump (~> 0.2.4) simple_po_parser (~> 1.1.6) simplecov (~> 0.22) diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 2ea5a4bfd2f168ab226d3fcc10c9e1f2bbe0a210..bd4730739599dc2b4980493e78f6d3f6344dd31f 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -97,6 +97,7 @@ {"name":"crack","version":"0.4.3","platform":"ruby","checksum":"5318ba8cd9cf7e0b5feb38948048503ba4b1fdc1b6ff30a39f0a00feb6036b29"}, {"name":"crass","version":"1.0.6","platform":"ruby","checksum":"dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d"}, {"name":"creole","version":"0.5.0","platform":"ruby","checksum":"951701e2d80760f156b1cb2a93471ca97c076289becc067a33b745133ed32c03"}, +{"name":"cronex","version":"0.15.0","platform":"ruby","checksum":"21c794e085fad2951c4f2e279f440340a35ba2297e0b738f22f263f69fbe2186"}, {"name":"css_parser","version":"1.14.0","platform":"ruby","checksum":"f2ce6148cd505297b07bdbe7a5db4cce5cf530071f9b732b9a23538d6cdc0113"}, {"name":"cssbundling-rails","version":"1.4.3","platform":"ruby","checksum":"53aecd5a7d24ac9c8fcd92975acd0e830fead4ee4583d3d3d49bb64651946e41"}, {"name":"csv","version":"3.3.0","platform":"ruby","checksum":"0bbd1defdc31134abefed027a639b3723c2753862150f4c3ee61cab71b20d67d"}, @@ -716,7 +717,7 @@ {"name":"sentry-sidekiq","version":"5.23.0","platform":"ruby","checksum":"34dc6413a25773e185acba605b0ed4dcec5edf3e8e562447b7b44ed6435d1c18"}, {"name":"shellany","version":"0.0.1","platform":"ruby","checksum":"0e127a9132698766d7e752e82cdac8250b6adbd09e6c0a7fbbb6f61964fedee7"}, {"name":"shoulda-matchers","version":"6.4.0","platform":"ruby","checksum":"9055bb7f4bb342125fb860809798855c630e05ef5e75837b3168b8e6ee1608b0"}, -{"name":"sidekiq-cron","version":"1.12.0","platform":"ruby","checksum":"6663080a454088bd88773a0da3ae91e554b8a2e8b06cfc629529a83fd1a3096c"}, +{"name":"sidekiq-cron","version":"2.3.1","platform":"ruby","checksum":"96ab3da372289a30dc744c1daa2ae2e85960b2444a6f6ed68df1ff7882c44aac"}, {"name":"sigdump","version":"0.2.5","platform":"ruby","checksum":"bb706c1cce70458b285d2c3a57121e801ccb79f68be7f7377692eb40b5437242"}, {"name":"signet","version":"0.19.0","platform":"ruby","checksum":"537f3939f57f141f691e6069a97ec40f34fadafc4c7e5ba94edb06cf4350dd31"}, {"name":"simple_po_parser","version":"1.1.6","platform":"ruby","checksum":"122687d44d3de516a0e69e2f383a4180f5015e8c5ed5a7f2258f2b376f64cbf3"}, @@ -799,6 +800,9 @@ {"name":"unf_ext","version":"0.0.8.2","platform":"x64-mingw-ucrt","checksum":"580e3c1ca389f10ca17d13ddeb5dc3fbdc80ce2c2b8cdb15c08af3a3b45a60fc"}, {"name":"unf_ext","version":"0.0.8.2","platform":"x64-mingw32","checksum":"f7e4c01774c91eb22e30d53dfc40ffbbb5a175f785c8f6f1be17ad96a0b29ed0"}, {"name":"unf_ext","version":"0.0.8.2","platform":"x86-mingw32","checksum":"6d44c13c98924bebd15ebdd4ed196ead403a0770ac03304570873349fda2a208"}, +{"name":"unicode","version":"0.4.4.5","platform":"java","checksum":"fa6eb747761a846015aa41a313c7565ba3c0de64b0cb7f31f5178fb021146e07"}, +{"name":"unicode","version":"0.4.4.5","platform":"ruby","checksum":"42f294bfc8e186d29da89d1f766071505a20a22776168a31bb3408e03fa7a9d7"}, +{"name":"unicode","version":"0.4.4.5","platform":"x86-mingw32","checksum":"6dfece0c5461314f80b7cdafc8e0a7978bc3fb39ac48c5399698b2ed44bf2e71"}, {"name":"unicode-display_width","version":"2.4.2","platform":"ruby","checksum":"6a10205d1a19ca790c4e53064ba93f09d9eb234bf6bd135d9deb6001c21428be"}, {"name":"unicode-emoji","version":"4.0.4","platform":"ruby","checksum":"2c2c4ef7f353e5809497126285a50b23056cc6e61b64433764a35eff6c36532a"}, {"name":"unicode_utils","version":"1.4.0","platform":"ruby","checksum":"b922d0cf2313b6b7136ada6645ce7154ffc86418ca07d53b058efe9eb72f2a40"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index d808c4d21015934364953dd5f6e1b1191f3b39a5..9936d7804cef337bd610ed61e3207b058aae41a1 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -466,6 +466,9 @@ GEM safe_yaml (~> 1.0.0) crass (1.0.6) creole (0.5.0) + cronex (0.15.0) + tzinfo + unicode (>= 0.4.4.5) css_parser (1.14.0) addressable cssbundling-rails (1.4.3) @@ -1822,10 +1825,11 @@ GEM shellany (0.0.1) shoulda-matchers (6.4.0) activesupport (>= 5.2.0) - sidekiq-cron (1.12.0) - fugit (~> 1.8) + sidekiq-cron (2.3.1) + cronex (>= 0.13.0) + fugit (~> 1.8, >= 1.11.1) globalid (>= 1.0.1) - sidekiq (>= 6) + sidekiq (>= 6.5.0) sigdump (0.2.5) signet (0.19.0) addressable (~> 2.8) @@ -2000,6 +2004,7 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.8.2) + unicode (0.4.4.5) unicode-display_width (2.4.2) unicode-emoji (4.0.4) unicode_utils (1.4.0) @@ -2408,7 +2413,7 @@ DEPENDENCIES sentry-sidekiq (~> 5.23.0) shoulda-matchers (~> 6.4.0) sidekiq! - sidekiq-cron (~> 1.12.0) + sidekiq-cron (~> 2.3.0) sigdump (~> 0.2.4) simple_po_parser (~> 1.1.6) simplecov (~> 0.22) diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index a09e8a4f942dc914b2965626fbadb82b109c14de..4b8ed13d8151a6eda469543c573f06504209c6d1 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -32,6 +32,13 @@ def self.enabled? 'and update Gitlab::SidekiqSharding::ScheduledEnq is compatible.' end +Sidekiq::Cron.configure do |cfg| + # IMPORTANT: In sidekiq-cron > 2.0.0, setting `cron_poll_interval` to `nil` has the same effect as setting + # it to `0` (essentially disables it). To avoid that, we do the check below and preserve the fallback to default value + cfg.cron_poll_interval = Gitlab.config.cron_jobs.poll_interval if Gitlab.config.cron_jobs.poll_interval + cfg.cron_poll_interval = 0 if queue_instance != Gitlab::Redis::Queues::SIDEKIQ_MAIN_SHARD_INSTANCE_NAME +end + Sidekiq.configure_server do |config| config[:strict] = false config[:scheduled_enq] = Gitlab::SidekiqSharding::ScheduledEnq @@ -104,9 +111,6 @@ def self.enabled? Gitlab::SidekiqVersioning.install! - config[:cron_poll_interval] = Gitlab.config.cron_jobs.poll_interval - config[:cron_poll_interval] = 0 if queue_instance != Gitlab::Redis::Queues::SIDEKIQ_MAIN_SHARD_INSTANCE_NAME - Gitlab::SidekiqConfig::CronJobInitializer.execute # Avoid autoload issue such as 'Mail::Parsers::AddressStruct' diff --git a/lib/gitlab/patch/sidekiq_cron_poller.rb b/lib/gitlab/patch/sidekiq_cron_poller.rb index 19359bcb0acd30b0646cd93a11354e4cc5c85ff8..b96b4ba84801bf9b0919d1aae7bb13b34cbbbef5 100644 --- a/lib/gitlab/patch/sidekiq_cron_poller.rb +++ b/lib/gitlab/patch/sidekiq_cron_poller.rb @@ -11,7 +11,7 @@ raise 'New version of sidekiq detected, please remove or update this patch' end -if Gem::Version.new(Sidekiq::Cron::VERSION) != Gem::Version.new('1.12.0') +if Gem::Version.new(Sidekiq::Cron::VERSION) != Gem::Version.new('2.3.1') raise 'New version of sidekiq-cron detected, please remove or update this patch' end diff --git a/spec/sidekiq/cron/job_gem_dependency_spec.rb b/spec/sidekiq/cron/job_gem_dependency_spec.rb index a12608c961fb43133dd8136703248dfff6aeddbf..7235eb80518803900e28f1258a598265c8cb8aaa 100644 --- a/spec/sidekiq/cron/job_gem_dependency_spec.rb +++ b/spec/sidekiq/cron/job_gem_dependency_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' # Only Sidekiq.redis interacts with cron jobs so unrouted calls are allowed. -RSpec.describe Sidekiq::Cron::Job, :allow_unrouted_sidekiq_calls do +RSpec.describe Sidekiq::Cron::Job, :allow_unrouted_sidekiq_calls, feature_category: :sidekiq do describe 'cron jobs' do context 'when Fugit depends on ZoTime or EoTime' do before do @@ -15,7 +15,7 @@ end it 'does not get any errors' do - expect { described_class.all.first.should_enque?(Time.now) }.not_to raise_error + expect { described_class.all.first.should_enqueue?(Time.now) }.not_to raise_error end end end