Back to Sidekiq

Sidekiq 7.0 API Migration Guide

docs/7.0-API-Migration.md

8.1.32.8 KB
Original Source

Sidekiq 7.0 API Migration Guide

Sidekiq 7.0 has some significant API refactoring, meaning an upgrade can be harder than usual for people who are touching Sidekiq's APIs in their initializer.

Logging

ruby
# broken, logger is no longer a top-level attribute
Sidekiq.logger = ...

# fixed
Sidekiq.configure_server do |cfg|
  cfg.logger = ...
end

Custom log formatter is a part of new logger API

ruby
# broken
Sidekiq.configure_server do |cfg|
  cfg.log_formatter = ...
end

# fixed
Sidekiq.configure_server do |cfg|
  cfg.logger.formatter = ...
end

Connection Pools

Sidekiq no longer allows raw ConnectionPools as people were often undersizing the pool leading to terrible performance. This way Sidekiq will automatically tune the size based on concurrency settings. Pools are lazy-loaded so they do not create connections until the system actually needs them.

ruby
# broken, can't pass connection pools directly anymore
POOL1 = ConnectionPool.new(size: 5) { Redis.new(ENV['MY_REDIS_URL']) }
Sidekiq.configure_server do |cfg|
  cfg.redis = POOL1
end

# fixed
Sidekiq.configure_server do |cfg|
  cfg.redis = { url: ENV['MY_REDIS_URL'] }
end

Redis sentinels

Due to Sidekiq's use of the new redis-client gem for connections, the configuration for it has changed. More details - https://github.com/redis-rb/redis-client#sentinel-support

ruby
# broken - missing name keyword argument
Sidekiq.configure_server do |cfg|
  cfg.redis = {
    url: "redis://myredis/0",
    sentinels: [
      {host: "host1", port: 26379},
      {host: "host2", port: 26379},
      {host: "host3", port: 26379}
    ]
  }
end

# fixed - don't forget to fix connection settings for both client and server
Sidekiq.configure_server do |cfg|
  cfg.redis = {
    url: "redis://myredis/0",
    name: "primary",
    sentinels: [
      {host: "host1", port: 26379},
      {host: "host2", port: 26379},
      {host: "host3", port: 26379}
    ]
  }
end

Reading Configuration

ruby
Sidekiq.configure_server do |cfg|
  cfg[:average_scheduled_poll_interval] = 5
end

# broken, can not read configuration directly anymore
Sidekiq[:average_scheduled_poll_interval] # NoMethodError: undefined method '[]' for Sidekiq:Module

# fixed
Sidekiq.default_configuration[:average_scheduled_poll_interval] # 5

Delayed Extensions

Delayed Extensions were disabled in Sidekiq 5 and removed in Sidekiq 7.

If you were still using them by explicitly enabling:

ruby
Sidekiq::DelayExtensions.enable_delay!

This will no longer work. Either migrate code to use Sidekiq::Job or use the 3rd party gem sidekiq-delay_extensions

Have more APIs which need a migration tip? Edit this file and open a PR!