From 7a6833d40bd4ca9b7cc007958671bc3e4de2487d Mon Sep 17 00:00:00 2001 From: Gregorius Marco Date: Tue, 7 Oct 2025 22:23:38 +0800 Subject: [PATCH 1/4] Upgrade sidekiq-cron to 2.3.x --- Gemfile | 2 +- Gemfile.checksum | 6 +++++- Gemfile.lock | 13 +++++++++---- Gemfile.next.checksum | 6 +++++- Gemfile.next.lock | 13 +++++++++---- 5 files changed, 29 insertions(+), 11 deletions(-) diff --git a/Gemfile b/Gemfile index 610c4e2296c073..355c3d0b0fed84 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 2ea5a4bfd2f168..bd4730739599dc 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 d808c4d2101593..9936d7804cef33 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 2ea5a4bfd2f168..bd4730739599dc 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 d808c4d2101593..9936d7804cef33 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) -- GitLab From 9b2af8a7e3d8a516d38dc3a6d3b0208c3f59413f Mon Sep 17 00:00:00 2001 From: Gabriel Mazetto Date: Mon, 8 Dec 2025 21:01:49 +0100 Subject: [PATCH 2/4] Update patch restriction to sidekiq-cron --- lib/gitlab/patch/sidekiq_cron_poller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gitlab/patch/sidekiq_cron_poller.rb b/lib/gitlab/patch/sidekiq_cron_poller.rb index 19359bcb0acd30..b96b4ba84801bf 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 -- GitLab From 3463008fb71dd90f450a9b6823327ad133bcd5c9 Mon Sep 17 00:00:00 2001 From: Gabriel Mazetto Date: Tue, 9 Dec 2025 21:20:52 +0100 Subject: [PATCH 3/4] Update specs due to enque! being renamed to enqueue! See: https://github.com/sidekiq-cron/sidekiq-cron/pull/494 Signed-off-by: Gabriel Mazetto --- spec/sidekiq/cron/job_gem_dependency_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/sidekiq/cron/job_gem_dependency_spec.rb b/spec/sidekiq/cron/job_gem_dependency_spec.rb index a12608c961fb43..7235eb80518803 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 -- GitLab From b23647492f8c953002de01184a40ec76c5c9ad8e Mon Sep 17 00:00:00 2001 From: Gabriel Mazetto Date: Tue, 16 Dec 2025 02:35:06 +0100 Subject: [PATCH 4/4] Update `cron_poll_interval` setting to be in `Sidekiq::Cron` Signed-off-by: Gabriel Mazetto --- config/initializers/sidekiq.rb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index a09e8a4f942dc9..5ca69d3b955e5f 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -32,6 +32,11 @@ def self.enabled? 'and update Gitlab::SidekiqSharding::ScheduledEnq is compatible.' end +Sidekiq::Cron.configure do |config| + 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 +end + Sidekiq.configure_server do |config| config[:strict] = false config[:scheduled_enq] = Gitlab::SidekiqSharding::ScheduledEnq @@ -104,9 +109,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' -- GitLab