Search code examples
sidekiqcloud-foundrylong-running-processescontinuous-delivery

How can I prevent Sidekiq processing new jobs based on code version?


We are deploying versions of a sidekiq worker to Cloud Foundry as part of a continuous delivery pipeline. We need to stop workers processing new jobs if they are no longer the latest version. So:

  1. Worker v1 is running and performing a 30 min job.
  2. We deploy v2 of the worker code.
  3. v1 should continue with current jobs but not start any new ones.

CloudFoundry won't allow us to send USR1, so we need a solution that allows the workers to determine if they are the latest version before every job starts.


Solution

  • Use a new queue name in your V2 codebase

    e.g/

    class ImportantWorker
      include Sidekiq::Worker
      sidekiq_options queue: :new_queue_name
      ....
    end
    

    and make sure you update your sidekiq config to reflect the new queue name