Commit 80e0b45e authored by Heinrich Lee Yu's avatar Heinrich Lee Yu

Fix Sidekiq sleep time for jobs that use replicas

We should sleep based on the time remaining to reach the minimum delay
and not based on the time elapsed from creation.

Changelog: fixed
parent 26e363f9
...@@ -61,8 +61,9 @@ module Gitlab ...@@ -61,8 +61,9 @@ module Gitlab
end end
def sleep_if_needed(job) def sleep_if_needed(job)
time_diff = Time.current.to_f - job['created_at'].to_f remaining_delay = MINIMUM_DELAY_INTERVAL - (Time.current.to_f - job['created_at'].to_f)
sleep time_diff if time_diff > 0 && time_diff < MINIMUM_DELAY_INTERVAL
sleep remaining_delay if remaining_delay > 0 && remaining_delay < MINIMUM_DELAY_INTERVAL
end end
def get_wal_locations(job) def get_wal_locations(job)
......
...@@ -152,7 +152,7 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqServerMiddleware, :clean_ ...@@ -152,7 +152,7 @@ RSpec.describe Gitlab::Database::LoadBalancing::SidekiqServerMiddleware, :clean_
let(:elapsed_time) { described_class::MINIMUM_DELAY_INTERVAL - 0.3 } let(:elapsed_time) { described_class::MINIMUM_DELAY_INTERVAL - 0.3 }
it 'sleeps until the minimum delay is reached' do it 'sleeps until the minimum delay is reached' do
expect(middleware).to receive(:sleep).with(be_within(0.01).of(elapsed_time)) expect(middleware).to receive(:sleep).with(be_within(0.01).of(described_class::MINIMUM_DELAY_INTERVAL - elapsed_time))
run_middleware run_middleware
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