summaryrefslogtreecommitdiff
path: root/watchfrr
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <jafar@atcorp.com>2022-10-20 23:46:47 -0500
committerGitHub <noreply@github.com>2022-10-20 23:46:47 -0500
commitcd5649848dbeb52d615cf31a75b035c3003c9d2a (patch)
treea6a2d3f6214bfa30589a55472821947b7e116126 /watchfrr
parent4f40a902c026277621017b076df57abfb4605e3c (diff)
parent2ab760f0560172a1197c38fbf364eb104c690325 (diff)
Merge pull request #12140 from opensourcerouting/fix/watchfrr_dont_givup
watchfrr: Delay restart_kill if still reading configuration
Diffstat (limited to 'watchfrr')
-rw-r--r--watchfrr/watchfrr.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/watchfrr/watchfrr.c b/watchfrr/watchfrr.c
index 423f25faa2..4a3575ae75 100644
--- a/watchfrr/watchfrr.c
+++ b/watchfrr/watchfrr.c
@@ -112,6 +112,7 @@ static struct global_state {
long period;
long timeout;
long restart_timeout;
+ bool reading_configuration;
long min_restart_interval;
long max_restart_interval;
long operational_timeout;
@@ -365,6 +366,16 @@ static void restart_kill(struct thread *t_kill)
struct timeval delay;
time_elapsed(&delay, &restart->time);
+
+ if (gs.reading_configuration) {
+ zlog_err(
+ "%s %s child process appears to still be reading configuration, delaying for another %lu time",
+ restart->what, restart->name, gs.restart_timeout);
+ thread_add_timer(master, restart_kill, restart,
+ gs.restart_timeout, &restart->t_kill);
+ return;
+ }
+
zlog_warn(
"%s %s child process %d still running after %ld seconds, sending signal %d",
restart->what, restart->name, (int)restart->pid,
@@ -1059,6 +1070,8 @@ void watchfrr_status(struct vty *vty)
vty_out(vty, " Min Restart Interval: %ld\n", gs.min_restart_interval);
vty_out(vty, " Max Restart Interval: %ld\n", gs.max_restart_interval);
vty_out(vty, " Restart Timeout: %ld\n", gs.restart_timeout);
+ vty_out(vty, " Reading Configuration: %s\n",
+ gs.reading_configuration ? "yes" : "no");
if (gs.restart.pid)
vty_out(vty, " global restart running, pid %ld\n",
(long)gs.restart.pid);
@@ -1264,6 +1277,16 @@ static void netns_setup(const char *nsname)
}
#endif
+static void watchfrr_start_config(void)
+{
+ gs.reading_configuration = true;
+}
+
+static void watchfrr_end_config(void)
+{
+ gs.reading_configuration = false;
+}
+
static void watchfrr_init(int argc, char **argv)
{
const char *special = "zebra";
@@ -1558,6 +1581,7 @@ int main(int argc, char **argv)
master = frr_init();
watchfrr_error_init();
watchfrr_init(argc, argv);
+ cmd_init_config_callbacks(watchfrr_start_config, watchfrr_end_config);
watchfrr_vty_init();
frr_config_fork();