Merge pull request #13690 from LabNConsulting/chopps/mgmtd-cleanup

Chopps/mgmtd cleanup
This commit is contained in:
Donald Sharp 2023-06-06 07:22:31 -04:00 committed by GitHub
commit da877b5ced
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 62 additions and 127 deletions

View file

@ -792,18 +792,19 @@ static void nb_update_candidate_changes(struct nb_config *candidate,
LYD_TREE_DFS_BEGIN (root, dnode) {
op = nb_lyd_diff_get_op(dnode);
switch (op) {
case 'c':
case 'c': /* create */
nb_config_diff_created(dnode, seq, cfg_chgs);
LYD_TREE_DFS_continue = 1;
break;
case 'd':
case 'd': /* delete */
nb_config_diff_deleted(dnode, seq, cfg_chgs);
LYD_TREE_DFS_continue = 1;
break;
case 'r':
case 'r': /* replace */
nb_config_diff_add_change(cfg_chgs, NB_OP_MODIFY, seq,
dnode);
break;
case 'n': /* none */
default:
break;
}

View file

@ -2420,6 +2420,7 @@ void vty_close(struct vty *vty)
vty->status = VTY_CLOSE;
if (mgmt_fe_client && vty->mgmt_session_id) {
MGMTD_FE_CLIENT_DBG("closing vty session");
mgmt_fe_destroy_client_session(mgmt_fe_client,
vty->mgmt_client_id);
vty->mgmt_session_id = 0;

View file

@ -564,8 +564,8 @@ mgmt_be_adapter_handle_msg(struct mgmt_be_client_adapter *adapter,
return 0;
}
static int mgmt_be_send_txn_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id, bool create)
int mgmt_be_send_txn_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id, bool create)
{
Mgmtd__BeMessage be_msg;
Mgmtd__BeTxnReq txn_req;
@ -584,11 +584,10 @@ static int mgmt_be_send_txn_req(struct mgmt_be_client_adapter *adapter,
return mgmt_be_adapter_send_msg(adapter, &be_msg);
}
static int
mgmt_be_send_cfgdata_create_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id, uint64_t batch_id,
Mgmtd__YangCfgDataReq **cfgdata_reqs,
size_t num_reqs, bool end_of_data)
int mgmt_be_send_cfgdata_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id, uint64_t batch_id,
Mgmtd__YangCfgDataReq **cfgdata_reqs,
size_t num_reqs, bool end_of_data)
{
Mgmtd__BeMessage be_msg;
Mgmtd__BeCfgDataCreateReq cfgdata_req;
@ -612,8 +611,8 @@ mgmt_be_send_cfgdata_create_req(struct mgmt_be_client_adapter *adapter,
return mgmt_be_adapter_send_msg(adapter, &be_msg);
}
static int mgmt_be_send_cfgapply_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id)
int mgmt_be_send_cfgapply_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id)
{
Mgmtd__BeMessage be_msg;
Mgmtd__BeCfgDataApplyReq apply_req;
@ -834,35 +833,6 @@ int mgmt_be_get_adapter_config(struct mgmt_be_client_adapter *adapter,
return 0;
}
int mgmt_be_create_txn(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id)
{
return mgmt_be_send_txn_req(adapter, txn_id, true);
}
int mgmt_be_destroy_txn(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id)
{
return mgmt_be_send_txn_req(adapter, txn_id, false);
}
int mgmt_be_send_cfg_data_create_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id, uint64_t batch_id,
struct mgmt_be_cfgreq *cfg_req,
bool end_of_data)
{
return mgmt_be_send_cfgdata_create_req(
adapter, txn_id, batch_id, cfg_req->cfgdata_reqs,
cfg_req->num_reqs, end_of_data);
}
extern int
mgmt_be_send_cfg_apply_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id)
{
return mgmt_be_send_cfgapply_req(adapter, txn_id);
}
void mgmt_be_get_subscr_info_for_xpath(
const char *xpath, struct mgmt_be_client_subscr_info *subscr_info)
{

View file

@ -115,13 +115,9 @@ mgmt_be_get_adapter_config(struct mgmt_be_client_adapter *adapter,
struct mgmt_ds_ctx *ds_ctx,
struct nb_config_cbs **cfg_chgs);
/* Create a transaction. */
extern int mgmt_be_create_txn(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id);
/* Destroy a transaction. */
extern int mgmt_be_destroy_txn(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id);
/* Create/destroy a transaction. */
extern int mgmt_be_send_txn_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id, bool create);
/*
* Send config data create request to backend client.
@ -135,8 +131,11 @@ extern int mgmt_be_destroy_txn(struct mgmt_be_client_adapter *adapter,
* batch_id
* Request batch ID.
*
* cfg_req
* Config data request.
* cfgdata_reqs
* An array of pointer to Mgmtd__YangCfgDataReq.
*
* num_reqs
* Length of the cfgdata_reqs array.
*
* end_of_data
* TRUE if the data from last batch, FALSE otherwise.
@ -144,37 +143,15 @@ extern int mgmt_be_destroy_txn(struct mgmt_be_client_adapter *adapter,
* Returns:
* 0 on success, -1 on failure.
*/
extern int mgmt_be_send_cfg_data_create_req(
struct mgmt_be_client_adapter *adapter, uint64_t txn_id,
uint64_t batch_id, struct mgmt_be_cfgreq *cfg_req, bool end_of_data);
/*
* Send config validate request to backend client.
*
* adaptr
* Backend adapter information.
*
* txn_id
* Unique transaction identifier.
*
* batch_ids
* List of request batch IDs.
*
* num_batch_ids
* Number of batch ids.
*
* Returns:
* 0 on success, -1 on failure.
*/
extern int
mgmt_be_send_cfg_validate_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id, uint64_t batch_ids[],
size_t num_batch_ids);
extern int mgmt_be_send_cfgdata_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id, uint64_t batch_id,
Mgmtd__YangCfgDataReq **cfgdata_reqs,
size_t num_reqs, bool end_of_data);
/*
* Send config apply request to backend client.
*
* adaptr
* adapter
* Backend adapter information.
*
* txn_id
@ -183,9 +160,8 @@ mgmt_be_send_cfg_validate_req(struct mgmt_be_client_adapter *adapter,
* Returns:
* 0 on success, -1 on failure.
*/
extern int
mgmt_be_send_cfg_apply_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id);
extern int mgmt_be_send_cfgapply_req(struct mgmt_be_client_adapter *adapter,
uint64_t txn_id);
/*
* Dump backend adapter status to vty.

View file

@ -635,7 +635,6 @@ static void mgmt_txn_process_set_cfg(struct event *thread)
txn->session_id);
FOREACH_TXN_REQ_IN_LIST (&txn->set_cfg_reqs, txn_req) {
error = false;
assert(txn_req->req_event == MGMTD_TXN_PROC_SETCFG);
ds_ctx = txn_req->req.set_cfg->ds_ctx;
if (!ds_ctx) {
@ -644,7 +643,6 @@ static void mgmt_txn_process_set_cfg(struct event *thread)
txn_req->req.set_cfg->ds_id, txn_req->req_id,
MGMTD_INTERNAL_ERROR, "No such datastore!",
txn_req->req.set_cfg->implicit_commit);
error = true;
goto mgmt_txn_process_set_cfg_done;
}
@ -656,7 +654,6 @@ static void mgmt_txn_process_set_cfg(struct event *thread)
MGMTD_INTERNAL_ERROR,
"Unable to retrieve DS Config Tree!",
txn_req->req.set_cfg->implicit_commit);
error = true;
goto mgmt_txn_process_set_cfg_done;
}
@ -713,7 +710,6 @@ static void mgmt_txn_process_set_cfg(struct event *thread)
"Failed to send SET_CONFIG_REPLY txn-id %" PRIu64
" session-id: %" PRIu64,
txn->txn_id, txn->session_id);
error = true;
}
mgmt_txn_process_set_cfg_done:
@ -1337,8 +1333,7 @@ static int mgmt_txn_send_be_txn_create(struct mgmt_txn_ctx *txn)
FOREACH_MGMTD_BE_CLIENT_ID (id) {
if (cmtcfg_req->subscr_info.xpath_subscr[id]) {
adapter = mgmt_be_get_adapter_by_id(id);
if (mgmt_be_create_txn(adapter, txn->txn_id)
!= 0) {
if (mgmt_be_send_txn_req(adapter, txn->txn_id, true)) {
(void)mgmt_txn_send_commit_cfg_reply(
txn, MGMTD_INTERNAL_ERROR,
"Could not send TXN_CREATE to backend adapter");
@ -1371,9 +1366,8 @@ static int mgmt_txn_send_be_txn_create(struct mgmt_txn_ctx *txn)
return 0;
}
static int
mgmt_txn_send_be_cfg_data(struct mgmt_txn_ctx *txn,
struct mgmt_be_client_adapter *adapter)
static int mgmt_txn_send_be_cfg_data(struct mgmt_txn_ctx *txn,
struct mgmt_be_client_adapter *adapter)
{
struct mgmt_commit_cfg_req *cmtcfg_req;
struct mgmt_txn_be_cfg_batch *cfg_btch;
@ -1395,10 +1389,10 @@ mgmt_txn_send_be_cfg_data(struct mgmt_txn_ctx *txn,
cfg_req.cfgdata_reqs = cfg_btch->cfg_datap;
cfg_req.num_reqs = cfg_btch->num_cfg_data;
indx++;
if (mgmt_be_send_cfg_data_create_req(
adapter, txn->txn_id, cfg_btch->batch_id, &cfg_req,
indx == num_batches ? true : false)
!= 0) {
if (mgmt_be_send_cfgdata_req(
adapter, txn->txn_id, cfg_btch->batch_id,
cfg_req.cfgdata_reqs, cfg_req.num_reqs,
indx == num_batches ? true : false)) {
(void)mgmt_txn_send_commit_cfg_reply(
txn, MGMTD_INTERNAL_ERROR,
"Internal Error! Could not send config data to backend!");
@ -1418,7 +1412,7 @@ mgmt_txn_send_be_cfg_data(struct mgmt_txn_ctx *txn,
}
/*
* This could ne the last Backend Client to send CFGDATA_CREATE_REQ to.
* This could be the last Backend Client to send CFGDATA_CREATE_REQ to.
* Try moving the commit to next phase.
*/
mgmt_try_move_commit_to_next_phase(txn, cmtcfg_req);
@ -1438,7 +1432,7 @@ mgmt_txn_send_be_txn_delete(struct mgmt_txn_ctx *txn,
cmtcfg_req = &txn->commit_cfg_req->req.commit_cfg;
if (cmtcfg_req->subscr_info.xpath_subscr[adapter->id]) {
adapter = mgmt_be_get_adapter_by_id(adapter->id);
(void)mgmt_be_destroy_txn(adapter, txn->txn_id);
(void)mgmt_be_send_txn_req(adapter, txn->txn_id, false);
FOREACH_TXN_CFG_BATCH_IN_LIST (
&txn->commit_cfg_req->req.commit_cfg
@ -1511,8 +1505,7 @@ static int mgmt_txn_send_be_cfg_apply(struct mgmt_txn_ctx *txn)
return -1;
btch_list = &cmtcfg_req->curr_batches[id];
if (mgmt_be_send_cfg_apply_req(adapter, txn->txn_id)
!= 0) {
if (mgmt_be_send_cfgapply_req(adapter, txn->txn_id)) {
(void)mgmt_txn_send_commit_cfg_reply(
txn, MGMTD_INTERNAL_ERROR,
"Could not send CFG_APPLY_REQ to backend adapter");
@ -2260,11 +2253,6 @@ uint64_t mgmt_create_txn(uint64_t session_id, enum mgmt_txn_type type)
return txn ? txn->txn_id : MGMTD_TXN_ID_NONE;
}
bool mgmt_txn_id_is_valid(uint64_t txn_id)
{
return mgmt_txn_id2ctx(txn_id) ? true : false;
}
void mgmt_destroy_txn(uint64_t *txn_id)
{
struct mgmt_txn_ctx *txn;
@ -2277,17 +2265,6 @@ void mgmt_destroy_txn(uint64_t *txn_id)
*txn_id = MGMTD_TXN_ID_NONE;
}
enum mgmt_txn_type mgmt_get_txn_type(uint64_t txn_id)
{
struct mgmt_txn_ctx *txn;
txn = mgmt_txn_id2ctx(txn_id);
if (!txn)
return MGMTD_TXN_TYPE_NONE;
return txn->type;
}
int mgmt_txn_send_set_config_req(uint64_t txn_id, uint64_t req_id,
Mgmtd__DatastoreId ds_id,
struct mgmt_ds_ctx *ds_ctx,

View file

@ -100,16 +100,6 @@ extern uint64_t mgmt_create_txn(uint64_t session_id, enum mgmt_txn_type type);
*/
extern void mgmt_destroy_txn(uint64_t *txn_id);
/*
* Check if transaction is valid given an ID.
*/
extern bool mgmt_txn_id_is_valid(uint64_t txn_id);
/*
* Returns the type of transaction given an ID.
*/
extern enum mgmt_txn_type mgmt_get_txn_type(uint64_t txn_id);
/*
* Send set-config request to be processed later in transaction.
*

View file

@ -42,8 +42,10 @@ def tgen(request):
tgen = Topogen(topodef, request.module.__name__)
tgen.start_topology()
prologue = open(f"{CWD}/r1/mgmtd.conf").read()
confpath = f"{tgen.gears['r1'].gearlogdir}/r1-late-big.conf"
start, end = write_big_route_conf("10.0.0.0/8", ROUTE_COUNT, confpath)
start, end = write_big_route_conf("10.0.0.0/8", ROUTE_COUNT, confpath, prologue)
ROUTE_RANGE[0] = start
ROUTE_RANGE[1] = end

View file

@ -42,8 +42,10 @@ def tgen(request):
tgen = Topogen(topodef, request.module.__name__)
tgen.start_topology()
prologue = open(f"{CWD}/r1/mgmtd.conf").read()
confpath = f"{tgen.gears['r1'].gearlogdir}/r1-late-big.conf"
start, end = write_big_route_conf("10.0.0.0/8", ROUTE_COUNT, confpath)
start, end = write_big_route_conf("10.0.0.0/8", ROUTE_COUNT, confpath, prologue)
ROUTE_RANGE[0] = start
ROUTE_RANGE[1] = end
@ -74,9 +76,23 @@ def test_staticd_latestart(tgen):
assert result is not None, "last route present and should not be"
step("Starting staticd")
t2 = Timeout(0)
r1.startDaemons(["staticd"])
result = check_kernel(r1, ROUTE_RANGE[0], retry_timeout=60)
assert result is None, "first route not present and should be"
result = check_kernel(r1, ROUTE_RANGE[1], retry_timeout=60)
logging.info("r1: elapsed time for first route %ss", t2.elapsed())
count = 0
ocount = 0
while count < ROUTE_COUNT:
rc, o, e = r1.net.cmd_status("ip -o route | wc -l")
if not rc:
if count > ocount + 100:
ocount = count
logging.info("r1: elapsed time for %d routes %s", count, t2.elapsed())
count = int(o)
result = check_kernel(r1, ROUTE_RANGE[1], retry_timeout=1200)
assert result is None, "last route not present and should be"
logging.info("r1: elapsed time for last route %ss", t2.elapsed())

View file

@ -50,11 +50,13 @@ def get_ip_networks(super_prefix, count):
return tuple(network.subnets(count_log2))[0:count]
def write_big_route_conf(super_prefix, count, confpath):
def write_big_route_conf(super_prefix, count, confpath, prologue=""):
start = None
end = None
with open(confpath, "w+", encoding="ascii") as f:
if prologue:
f.write(prologue + "\n")
for net in get_ip_networks(super_prefix, count):
end = net
if not start: