diff --git a/Gemfile.lock b/Gemfile.lock index 8ce1a825b53..9bdbde635e5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -308,7 +308,7 @@ GEM rake formatador (0.2.5) foundation_emails (2.2.1.0) - fugit (1.6.0) + fugit (1.7.1) et-orbi (~> 1, >= 1.2.7) raabro (~> 1.4) geocoder (1.7.0) @@ -316,7 +316,7 @@ GEM ffi (~> 1.0) globalid (1.0.0) activesupport (>= 5.0) - good_job (3.4.4) + good_job (3.6.0) activejob (>= 6.0.0) activerecord (>= 6.0.0) concurrent-ruby (>= 1.0.2) @@ -729,7 +729,7 @@ GEM xpath (3.2.0) nokogiri (~> 1.8) yard (0.9.26) - zeitwerk (2.6.0) + zeitwerk (2.6.1) zonebie (0.6.1) zxcvbn (0.1.7) diff --git a/config/application.rb b/config/application.rb index f0a129044e2..bb9f84bcbd2 100644 --- a/config/application.rb +++ b/config/application.rb @@ -69,6 +69,8 @@ class Application < Rails::Application config.good_job.enable_cron = true config.good_job.max_threads = IdentityConfig.store.good_job_max_threads config.good_job.queues = IdentityConfig.store.good_job_queues + config.good_job.preserve_job_records = false + config.good_job.queue_select_limit = IdentityConfig.store.good_job_queue_select_limit # see config/initializers/job_configurations.rb for cron schedule includes_star_queue = config.good_job.queues.split(';').any? do |name_threads| diff --git a/config/application.yml.default b/config/application.yml.default index 7b625e2d834..aa7ab3f59a5 100644 --- a/config/application.yml.default +++ b/config/application.yml.default @@ -100,6 +100,7 @@ event_disavowal_expiration_hours: 240 geo_data_file_path: 'geo_data/GeoLite2-City.mmdb' good_job_max_threads: 5 good_job_queues: 'default:5;low:1;*' +good_job_queue_select_limit: 5_000 gpo_designated_receiver_pii: '{}' hide_phone_mfa_signup: false identity_pki_disabled: false diff --git a/db/worker_jobs_migrate/20221024144708_create_index_good_jobs_jobs_on_priority_created_at_when_unfinished.rb b/db/worker_jobs_migrate/20221024144708_create_index_good_jobs_jobs_on_priority_created_at_when_unfinished.rb new file mode 100644 index 00000000000..c05fe0b7e98 --- /dev/null +++ b/db/worker_jobs_migrate/20221024144708_create_index_good_jobs_jobs_on_priority_created_at_when_unfinished.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true +class CreateIndexGoodJobsJobsOnPriorityCreatedAtWhenUnfinished < ActiveRecord::Migration[7.0] + disable_ddl_transaction! + + def change + reversible do |dir| + dir.up do + # Ensure this incremental update migration is idempotent + # with monolithic install migration. + return if connection.index_name_exists?(:good_jobs, :index_good_jobs_jobs_on_priority_created_at_when_unfinished) + end + end + + add_index :good_jobs, [:priority, :created_at], order: { priority: "DESC NULLS LAST", created_at: :asc }, + where: "finished_at IS NULL", name: :index_good_jobs_jobs_on_priority_created_at_when_unfinished, + algorithm: :concurrently + end +end diff --git a/lib/identity_config.rb b/lib/identity_config.rb index 66c8245eb7b..bec9abfec42 100644 --- a/lib/identity_config.rb +++ b/lib/identity_config.rb @@ -177,6 +177,7 @@ def self.build_store(config_map) config.add(:geo_data_file_path, type: :string) config.add(:good_job_max_threads, type: :integer) config.add(:good_job_queues, type: :string) + config.add(:good_job_queue_select_limit, type: :integer) config.add(:gpo_designated_receiver_pii, type: :json, options: { symbolize_names: true }) config.add(:hide_phone_mfa_signup, type: :boolean) config.add(:hmac_fingerprinter_key, type: :string)