2
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2025-10-03 17:21:20 +08:00
discourse/lib/sidekiq_migration.rb
Loïc Guitaut 0eab7daea4 DEV: Upgrade Rails to version 8.0.2
- Migrated from annotate to annotaterb as the former is not maintained
  anymore.
- Dropped our `fast_pluck` patch as the default `pluck` implementation
  seems now faster.
2025-07-22 09:59:44 +02:00

42 lines
880 B
Ruby

# frozen_string_literal: true
# TODO: Remove this after the Discourse 3.5 release
require "sidekiq/api"
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