mirror of
https://github.com/systemd/systemd
synced 2024-07-21 18:24:38 +00:00
core/service: make restart delay increase more smoothly
Suggested in https://github.com/systemd/systemd/pull/26902#issuecomment-1620400583.
This commit is contained in:
parent
eade959b90
commit
ea792cacb9
|
@ -294,6 +294,7 @@ usec_t service_restart_usec_next(Service *s) {
|
|||
|
||||
if (n_restarts_next <= 1 ||
|
||||
s->restart_steps == 0 ||
|
||||
s->restart_usec == 0 ||
|
||||
s->restart_max_delay_usec == USEC_INFINITY ||
|
||||
s->restart_usec >= s->restart_max_delay_usec)
|
||||
value = s->restart_usec;
|
||||
|
@ -303,10 +304,15 @@ usec_t service_restart_usec_next(Service *s) {
|
|||
/* Enforced in service_verify() and above */
|
||||
assert(s->restart_max_delay_usec > s->restart_usec);
|
||||
|
||||
/* ((restart_max_delay_usec - restart_usec)^(1/restart_steps))^(n_restart_next - 1) */
|
||||
value = usec_add(s->restart_usec,
|
||||
(usec_t) powl(s->restart_max_delay_usec - s->restart_usec,
|
||||
(long double) (n_restarts_next - 1) / s->restart_steps));
|
||||
/* r_i / r_0 = (r_n / r_0) ^ (i / n)
|
||||
* where,
|
||||
* r_0 : initial restart usec (s->restart_usec),
|
||||
* r_i : i-th restart usec (value),
|
||||
* r_n : maximum restart usec (s->restart_max_delay_usec),
|
||||
* i : index of the next step (n_restarts_next - 1)
|
||||
* n : num maximum steps (s->restart_steps) */
|
||||
value = s->restart_usec * powl((long double) s->restart_max_delay_usec / s->restart_usec,
|
||||
(long double) (n_restarts_next - 1) / s->restart_steps);
|
||||
}
|
||||
|
||||
log_unit_debug(UNIT(s), "Next restart interval calculated as: %s", FORMAT_TIMESPAN(value, 0));
|
||||
|
|
Loading…
Reference in a new issue