discourse/lib/sidekiq_migration.rb
2025-03-10 15:02:48 +01:00

40 lines
856 B
Ruby

# frozen_string_literal: true
# TODO: Remove this after the Discourse 3.5 release
class SidekiqMigration
delegate :old_pool, to: :Sidekiq
def self.call
new.call
end
def call
migrate_all_queues
migrate(klass: Sidekiq::RetrySet)
migrate(klass: Sidekiq::ScheduledSet)
end
private
def migrate_all_queues
migrate(
old_jobs: -> { Sidekiq::Queue.all.flat_map(&:to_a) },
enqueue_jobs: ->(job) { client.push(job.item) },
)
end
def migrate(
klass: nil,
old_jobs: -> { klass.new.to_a },
enqueue_jobs: ->(job) { klass.new.schedule(job.score, job.item) }
)
jobs_to_migrate = Sidekiq::Client.via(old_pool, &old_jobs)
jobs_to_migrate.each(&enqueue_jobs)
Sidekiq::Client.via(old_pool) { jobs_to_migrate.each(&:delete) }
end
def client
@client ||= Sidekiq::Client.new
end
end