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

  1. Run gdk restart rails

Check that keys are namespaced with resque:gitlab: using keys * in gdk redis-cli -n 1

  1. Stop backround jobs
gdk stop rails-background-jobs
  1. Enqueue a worker in non-namespaced queue using a rails console that has SIDEKIQ_ENQUEUE_NON_NAMESPACED envvar 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}"
  1. 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}"
  1. 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
  1. Repeat step 1 to 6 with export SIDEKIQ_ENABLE_DUAL_NAMESPACE_POLLING=false in your env.runit in 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.

Edited by Sylvester Chin

Merge request reports

Loading