mirror of
https://github.com/discourse/discourse.git
synced 2025-04-28 10:44:34 +08:00
40 lines
856 B
Ruby
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
|