Merge pull request #13632 from LabNConsulting/chopps/mgmt-avoid-race

mgmtd: fix possible race btw read config and backend connection
This commit is contained in:
Donald Sharp 2023-05-31 07:28:50 -04:00 committed by GitHub
commit 7470509390
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 42 deletions

View File

@ -49,20 +49,22 @@ void mgmt_init(void)
/* Initialize MGMTD Transaction module */
mgmt_txn_init(mm, mm->master);
/* Initialize the MGMTD Backend Adapter Module */
mgmt_be_adapter_init(mm->master);
/* Initialize the MGMTD Frontend Adapter Module */
mgmt_fe_adapter_init(mm->master);
/*
* Allocates some vital data structures used by peer commands in
* vty_init
*/
/* Initialize the CLI frontend client */
vty_init_mgmt_fe();
/* MGMTD VTY commands installation. */
mgmt_vty_init();
/*
* Initialize the MGMTD Backend Adapter Module
*
* We do this after the FE stuff so that we always read our config file
* prior to any BE connection.
*/
mgmt_be_adapter_init(mm->master);
}
void mgmt_terminate(void)

View File

@ -454,44 +454,11 @@ DEFPY(debug_mgmt, debug_mgmt_cmd,
return CMD_SUCCESS;
}
/*
* We need an event driven file reader for reading in config files.
*/
static void mgmt_config_read_in(struct event *event)
{
mgmt_vty_read_configs();
}
#if 0
/*
* Analog of `frr_config_read_in()`, instead of our config file though we loop
* over all daemons that have transitioned to mgmtd, loading their configs
*/
static int mgmt_config_pre_hook(struct event_loop *loop)
{
FILE *confp;
char *p;
for (uint i = 0; i < mgmt_daemons_count; i++) {
p = asprintfrr(MTYPE_TMP, "%s/%s.conf", frr_sysconfdir,
mgmt_daemons[i]);
confp = fopen(p, "r");
if (confp == NULL) {
if (errno != ENOENT)
zlog_err("%s: couldn't read config file %s: %s",
__func__, p, safe_strerror(errno));
} else {
zlog_info("mgmtd: reading daemon config from %s", p);
vty_read_file(vty_shared_candidate_config, confp);
fclose(confp);
}
XFREE(MTYPE_TMP, p);
}
return 0;
}
#endif
void mgmt_vty_init(void)
{
/*
@ -505,8 +472,6 @@ void mgmt_vty_init(void)
static_vty_init();
#endif
// hook_register(frr_config_pre, mgmt_config_pre_hook);
event_add_event(mm->master, mgmt_config_read_in, NULL, 0,
&mgmt_daemon_info->read_in);