BUG/MINOR: clock: automatically adjust the internal clock with the boot time
This is a better and more general solution to the problem described in this commit: BUG/MINOR: checks: postpone the startup of health checks by the boot time Now we're updating the now_offset that is used to compute now_ms at the few points where we update the ready date during boot. This ensures that now_ms while being stable during all the boot process will be correct and will start with the boot value right after the boot is finished. As such the patch above is rolled back (we don't want to count the boot time twice). This must not be backported because it relies on the more flexible clock architecture in 2.8.
This commit is contained in:
parent
5345490b8e
commit
c7b9308f20
|
@ -1475,7 +1475,6 @@ int start_check_task(struct check *check, int mininter,
|
||||||
int nbcheck, int srvpos)
|
int nbcheck, int srvpos)
|
||||||
{
|
{
|
||||||
struct task *t;
|
struct task *t;
|
||||||
ulong boottime = tv_ms_remain(&start_date, &ready_date);
|
|
||||||
|
|
||||||
/* task for the check. Process-based checks exclusively run on thread 1. */
|
/* task for the check. Process-based checks exclusively run on thread 1. */
|
||||||
if (check->type == PR_O2_EXT_CHK)
|
if (check->type == PR_O2_EXT_CHK)
|
||||||
|
@ -1505,7 +1504,7 @@ int start_check_task(struct check *check, int mininter,
|
||||||
mininter = global.max_spread_checks;
|
mininter = global.max_spread_checks;
|
||||||
|
|
||||||
/* check this every ms */
|
/* check this every ms */
|
||||||
t->expire = tick_add(now_ms, MS_TO_TICKS(boottime + mininter * srvpos / nbcheck));
|
t->expire = tick_add(now_ms, MS_TO_TICKS(mininter * srvpos / nbcheck));
|
||||||
check->start = now_ns;
|
check->start = now_ns;
|
||||||
task_queue(t);
|
task_queue(t);
|
||||||
|
|
||||||
|
|
|
@ -2251,13 +2251,16 @@ static void init(int argc, char **argv)
|
||||||
* during config checks (e.g. to schedule certain tasks if needed)
|
* during config checks (e.g. to schedule certain tasks if needed)
|
||||||
*/
|
*/
|
||||||
clock_update_date(0, 1);
|
clock_update_date(0, 1);
|
||||||
|
clock_adjust_now_offset();
|
||||||
ready_date = date;
|
ready_date = date;
|
||||||
|
|
||||||
|
|
||||||
/* Note: global.nbthread will be initialized as part of this call */
|
/* Note: global.nbthread will be initialized as part of this call */
|
||||||
err_code |= check_config_validity();
|
err_code |= check_config_validity();
|
||||||
|
|
||||||
/* update the ready date to also account for the check time */
|
/* update the ready date to also account for the check time */
|
||||||
clock_update_date(0, 1);
|
clock_update_date(0, 1);
|
||||||
|
clock_adjust_now_offset();
|
||||||
ready_date = date;
|
ready_date = date;
|
||||||
|
|
||||||
for (px = proxies_list; px; px = px->next) {
|
for (px = proxies_list; px; px = px->next) {
|
||||||
|
@ -3521,6 +3524,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
/* update the ready date a last time to also account for final setup time */
|
/* update the ready date a last time to also account for final setup time */
|
||||||
clock_update_date(0, 1);
|
clock_update_date(0, 1);
|
||||||
|
clock_adjust_now_offset();
|
||||||
ready_date = date;
|
ready_date = date;
|
||||||
|
|
||||||
if (global.mode & (MODE_DAEMON | MODE_MWORKER | MODE_MWORKER_WAIT)) {
|
if (global.mode & (MODE_DAEMON | MODE_MWORKER | MODE_MWORKER_WAIT)) {
|
||||||
|
|
Loading…
Reference in New Issue