Skip to content

Commit 99de247

Browse files
authored
Merge pull request #2418 from pqarmitage/updates
vrrp: Handle a reload before vrrp_delayed_start has expired
2 parents c636903 + 58483b2 commit 99de247

File tree

1 file changed

+19
-5
lines changed

1 file changed

+19
-5
lines changed

keepalived/vrrp/vrrp_daemon.c

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -608,10 +608,24 @@ start_vrrp(data_t *prev_global_data)
608608
/* Init & start the VRRP packet dispatcher */
609609
thread_add_event(master, vrrp_dispatcher_init, NULL, 0);
610610

611-
if (!reload && global_data->vrrp_startup_delay) {
612-
vrrp_delayed_start_time = timer_add_long(time_now, global_data->vrrp_startup_delay);
613-
thread_add_timer(master, delayed_start_clear_thread, NULL, global_data->vrrp_startup_delay);
614-
log_message(LOG_INFO, "Delaying startup for %g seconds", global_data->vrrp_startup_delay / TIMER_HZ_DOUBLE);
611+
if (global_data->vrrp_startup_delay) {
612+
if (!reload) {
613+
vrrp_delayed_start_time = timer_add_long(time_now, global_data->vrrp_startup_delay);
614+
thread_add_timer(master, delayed_start_clear_thread, NULL, global_data->vrrp_startup_delay);
615+
log_message(LOG_INFO, "Delaying startup for %g seconds", global_data->vrrp_startup_delay / TIMER_HZ_DOUBLE);
616+
} else if (vrrp_delayed_start_time.tv_sec) {
617+
if (time_now.tv_sec > vrrp_delayed_start_time.tv_sec ||
618+
(time_now.tv_sec == vrrp_delayed_start_time.tv_sec &&
619+
time_now.tv_usec >= vrrp_delayed_start_time.tv_usec))
620+
vrrp_delayed_start_time.tv_sec = 0;
621+
else {
622+
unsigned delay_left;
623+
delay_left = (vrrp_delayed_start_time.tv_sec - time_now.tv_sec) * 1000000UL
624+
+ vrrp_delayed_start_time.tv_usec - time_now.tv_usec;
625+
thread_add_timer(master, delayed_start_clear_thread, NULL, delay_left);
626+
log_message(LOG_INFO, "Delaying startup for a further %g seconds", delay_left / TIMER_HZ_DOUBLE);
627+
}
628+
}
615629
}
616630

617631
if (!reload && global_data->disable_local_igmp)
@@ -979,6 +993,7 @@ register_vrrp_thread_addresses(void)
979993
register_thread_address("start_vrrp_termination_thread", start_vrrp_termination_thread);
980994
register_thread_address("send_reload_advert_thread", send_reload_advert_thread);
981995
#endif
996+
register_thread_address("delayed_start_clear_thread", delayed_start_clear_thread);
982997
register_thread_address("vrrp_shutdown_backstop_thread", vrrp_shutdown_backstop_thread);
983998
register_thread_address("vrrp_shutdown_timer_thread", vrrp_shutdown_timer_thread);
984999

@@ -1181,6 +1196,5 @@ register_vrrp_parent_addresses(void)
11811196
register_thread_address("vrrp_respawn_thread", vrrp_respawn_thread);
11821197
register_thread_address("delayed_restart_vrrp_child_thread", delayed_restart_vrrp_child_thread);
11831198
#endif
1184-
register_thread_address("delayed_start_clear_thread", delayed_start_clear_thread);
11851199
}
11861200
#endif

0 commit comments

Comments
 (0)