Skip to content

Commit

Permalink
Apply start_worker_delay option to restarting
Browse files Browse the repository at this point in the history
Enable to prevent multiple workers from restarting at the same time
with this existing option as before.

Signed-off-by: Daijiro Fukuda <fukuda@clear-code.com>
  • Loading branch information
daipom committed May 25, 2022
1 parent 9b4e92a commit 528383d
Showing 1 changed file with 20 additions and 16 deletions.
36 changes: 20 additions & 16 deletions lib/serverengine/multi_worker_server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -135,35 +135,39 @@ def keepalive_workers
end

def start_new_worker(wid)
if @start_worker_delay > 0
delay = @start_worker_delay +
Kernel.rand * @start_worker_delay * @start_worker_delay_rand -
@start_worker_delay * @start_worker_delay_rand / 2

now = Time.now.to_f

wait = delay - (now - @last_start_worker_time)
sleep wait if wait > 0

@last_start_worker_time = now
end

start_worker(wid)
delayed_start_worker(wid)
end

def restart_worker(wid)
m = @monitors[wid]

if m.restarting?
@monitors[wid] = start_worker(wid) if m.delayed_restart_time_passed?
delayed_start_worker(wid) if m.delayed_restart_time_passed?
return
end

if @restart_worker_delay > 0
m.set_delayed_restart(@restart_worker_delay)
else
@monitors[wid] = start_worker(wid)
delayed_start_worker(wid)
end
end

def delayed_start_worker(wid)
if @start_worker_delay > 0
delay = @start_worker_delay +
Kernel.rand * @start_worker_delay * @start_worker_delay_rand -
@start_worker_delay * @start_worker_delay_rand / 2

now = Time.now.to_f

wait = delay - (now - @last_start_worker_time)
sleep wait if wait > 0

@last_start_worker_time = now
end

@monitors[wid] = start_worker(wid)
end
end

Expand Down

0 comments on commit 528383d

Please sign in to comment.