diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-02 07:04:07 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-02 07:04:07 +0300 |
commit | 90d76d8023038c2f5d1587e0a70b85256ea0f08a (patch) | |
tree | 6efc4f0f17e015b58f16aeb48bebe05f2ef3f166 | |
parent | e6b6ac769bd034aeb14d312db923fc5a2ae1fb89 (diff) |
Add latest changes from gitlab-org/gitlab@16-7-stable-ee
-rw-r--r-- | lib/gitlab/sidekiq_config.rb | 38 | ||||
-rw-r--r-- | spec/initializers/sidekiq_spec.rb | 2 | ||||
-rw-r--r-- | spec/lib/gitlab/sidekiq_config_spec.rb | 8 |
3 files changed, 29 insertions, 19 deletions
diff --git a/lib/gitlab/sidekiq_config.rb b/lib/gitlab/sidekiq_config.rb index 33a15d95d22..b2ff80b2357 100644 --- a/lib/gitlab/sidekiq_config.rb +++ b/lib/gitlab/sidekiq_config.rb @@ -40,6 +40,7 @@ module Gitlab class << self include Gitlab::SidekiqConfig::CliMethods + include Gitlab::Utils::StrongMemoize def redis_queues # Not memoized, because this can change during the life of the application @@ -54,28 +55,27 @@ module Gitlab end def cron_jobs - @cron_jobs ||= begin - Gitlab.config.load_dynamic_cron_schedules! - - jobs = Gitlab.config.cron_jobs.to_hash - - jobs.delete('poll_interval') # Would be interpreted as a job otherwise - - # Settingslogic (former gem used for yaml configuration) didn't allow 'class' key - # Therefore, we configure cron jobs with `job_class` as a workaround. - required_keys = %w[job_class cron] - jobs.each do |k, v| - if jobs[k] && required_keys.all? { |s| jobs[k].key?(s) } - jobs[k]['class'] = jobs[k].delete('job_class') - else - jobs.delete(k) - Gitlab::AppLogger.error("Invalid cron_jobs config key: '#{k}'. Check your gitlab config file.") - end - end + Gitlab.config.load_dynamic_cron_schedules! + + jobs = Gitlab.config.cron_jobs.to_hash + + jobs.delete('poll_interval') # Would be interpreted as a job otherwise - jobs + # Settingslogic (former gem used for yaml configuration) didn't allow 'class' key + # Therefore, we configure cron jobs with `job_class` as a workaround. + required_keys = %w[job_class cron] + jobs.each do |k, v| + if jobs[k] && required_keys.all? { |s| jobs[k].key?(s) } + jobs[k]['class'] = jobs[k].delete('job_class') + else + jobs.delete(k) + Gitlab::AppLogger.error("Invalid cron_jobs config key: '#{k}'. Check your gitlab config file.") + end end + + jobs end + strong_memoize_attr :cron_jobs def cron_workers @cron_workers ||= cron_jobs.map { |job_name, options| options['class'].constantize } diff --git a/spec/initializers/sidekiq_spec.rb b/spec/initializers/sidekiq_spec.rb index a034e628d25..fb1377244d2 100644 --- a/spec/initializers/sidekiq_spec.rb +++ b/spec/initializers/sidekiq_spec.rb @@ -78,11 +78,13 @@ RSpec.describe 'sidekiq', feature_category: :build do end around do |example| + Gitlab::SidekiqConfig.clear_memoization(:cron_jobs) original_settings = Gitlab.config['cron_jobs'] Gitlab.config['cron_jobs'] = cron_jobs_settings example.run + Gitlab::SidekiqConfig.clear_memoization(:cron_jobs) Gitlab.config['cron_jobs'] = original_settings end diff --git a/spec/lib/gitlab/sidekiq_config_spec.rb b/spec/lib/gitlab/sidekiq_config_spec.rb index 00b1666106f..5885151ecb5 100644 --- a/spec/lib/gitlab/sidekiq_config_spec.rb +++ b/spec/lib/gitlab/sidekiq_config_spec.rb @@ -18,6 +18,14 @@ RSpec.describe Gitlab::SidekiqConfig do end describe '.cron_jobs' do + around do |example| + described_class.clear_memoization(:cron_jobs) + + example.run + + described_class.clear_memoization(:cron_jobs) + end + it 'renames job_class to class and removes incomplete jobs' do expect(Gitlab) .to receive(:config) |