Commit e2afebc1 authored by Heinrich Lee Yu's avatar Heinrich Lee Yu

Remove use of Redis multi in Sidekiq client

When pushing jobs to Redis, Sidekiq client uses a Redis multi call. For
scheduled jobs, this is actually not needed because we're only executing
one Redis command. For other jobs, the commands don't need to be atomic.

This reduces the work the Redis server needs to do.

Changelog: performance
parent 8f114bde
......@@ -114,3 +114,5 @@ Sidekiq.configure_client do |config|
config.client_middleware(&Gitlab::SidekiqMiddleware.client_configurator)
end
Sidekiq::Client.prepend Gitlab::Patch::SidekiqClient
# frozen_string_literal: true
module Gitlab
module Patch
module SidekiqClient
private
# This is a copy of https://github.com/mperham/sidekiq/blob/v6.2.2/lib/sidekiq/client.rb#L187-L194
# but using `conn.pipelined` instead of `conn.multi`. The multi call isn't needed here because in
# the case of scheduled jobs, only one Redis call is made. For other jobs, we don't really need
# the commands to be atomic.
def raw_push(payloads)
@redis_pool.with do |conn| # rubocop:disable Gitlab/ModuleWithInstanceVariables
conn.pipelined do
atomic_push(conn, payloads)
end
end
true
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment