Poll dual namespace for sidekiq by default
What does this MR do and why?
This MR enables dual namespace polling for sidekiq by default. We release this feature 1 release before deprecating namespace to enable zero-downtime deployments between minor version upgrades. See gitlab-com/gl-infra/scalability#2288 for more details on the plan for releasing the deprecation.
The purpose is to set up the eventual deprecation (next release) of namespace usage in Sidekiq.redis. The behaviour can be disabled via the SIDEKIQ_ENABLE_DUAL_NAMESPACE_POLLING envvar if required.
This MR releases the feature implemented and tested in !116379 (merged).
Screenshots or screen recordings
Screenshots are required for UI changes, and strongly recommended for all other merge requests.
| Before | After |
|---|---|
How to set up and validate locally
- Run
gdk restart rails
Check that keys are namespaced with resque:gitlab: using keys * in gdk redis-cli -n 1
- Stop backround jobs
gdk stop rails-background-jobs
- Enqueue a worker in non-namespaced queue using a rails console that has
SIDEKIQ_ENQUEUE_NON_NAMESPACEDenvvar set to true
SIDEKIQ_ENQUEUE_NON_NAMESPACED=true gdk rails c
Loading development environment (Rails 7.0.6)
[1] pry(main)> Chaos::SleepWorker.perform_async(100)
=> "489c0caa09f604880470f009"
Check the jobs in redis
redis /Users/sylvesterchin/work/gitlab-development-kit/redis/redis.socket[1]> lrange "queue:default" 0 -1
1) "{\"retry\":3,\"queue\":\"default\",\"backtrace\":true,\"version\":0,\"queue_namespace\":\"chaos\",\"args\":[100],\"class\":\"Chaos::SleepWorker\",\"jid\":\"489c0caa09f604880470f009\",\"created_at\":1694521674.112231,\"correlation_id\":\"880ecb12d0c55ed24c332e3d9e892b34\",\"worker_data_consistency\":\"always\",\"idempotency_key\":\"resque:gitlab:duplicate:default:b636855eb030c46b2e40c1c07d1955780f5af4b288f6dc4c0451b6a609dcb24d\",\"size_limiter\":\"validated\",\"enqueued_at\":1694521674.120758}"
- Repeat step 3 using a worker in namespaced queue.
gdk rails c
Loading development environment (Rails 7.0.6)
[1] pry(main)> Chaos::SleepWorker.perform_async(100)
=> "008a0ef6036c6da25c352571"
redis /Users/sylvesterchin/work/gitlab-development-kit/redis/redis.socket[1]> lrange "resque:gitlab:queue:default" 0 -1
1) "{\"retry\":3,\"queue\":\"default\",\"backtrace\":true,\"version\":0,\"queue_namespace\":\"chaos\",\"args\":[100],\"class\":\"Chaos::SleepWorker\",\"jid\":\"008a0ef6036c6da25c352571\",\"created_at\":1694521758.865268,\"correlation_id\":\"75e22735d429b8c4250af1e89b668549\",\"worker_data_consistency\":\"always\",\"idempotency_key\":\"resque:gitlab:duplicate:default:b636855eb030c46b2e40c1c07d1955780f5af4b288f6dc4c0451b6a609dcb24d\",\"duplicate-of\":\"489c0caa09f604880470f009\",\"size_limiter\":\"validated\",\"enqueued_at\":1694521758.874738}"
- Start background jobs with
gdk start rails-background-jobs. Check that both queues are emptied.
redis /Users/sylvesterchin/work/gitlab-development-kit/redis/redis.socket[1]> llen resque:gitlab:queue:default
(integer) 0
redis /Users/sylvesterchin/work/gitlab-development-kit/redis/redis.socket[1]> llen "queue:default"
(integer) 0
- Repeat step 1 to 6 with
export SIDEKIQ_ENABLE_DUAL_NAMESPACE_POLLING=falsein yourenv.runitin the gdk folder. This time, step 5 should show:
redis /Users/sylvesterchin/work/gitlab-development-kit/redis/redis.socket[1]> llen resque:gitlab:queue:default
(integer) 0
redis /Users/sylvesterchin/work/gitlab-development-kit/redis/redis.socket[1]> llen "queue:default"
(integer) 1
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.