Sometimes CLM will reboot a node which was locked with PLM admin command. admin_op and stat_change are not being cleared in COMPLETED step in PLM readiness callback.
Clear admin_op and stat_change. --- src/clm/clmd/clms.h | 2 +- src/clm/clmd/clms_plm.cc | 7 +++---- src/clm/clmd/clms_util.cc | 12 ++++++------ 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/clm/clmd/clms.h b/src/clm/clmd/clms.h index 1d9c8daf1..f7384aad0 100644 --- a/src/clm/clmd/clms.h +++ b/src/clm/clmd/clms.h @@ -100,7 +100,7 @@ extern uint32_t clms_mds_msg_bcast(CLMS_CB *cb, CLMSV_MSG *bcast_msg); extern SaAisErrorT clms_imm_activate(CLMS_CB *cb); extern uint32_t clms_node_trackresplist_empty(CLMS_CLUSTER_NODE *op_node); extern uint32_t clms_send_cbk_start_sub(CLMS_CB *cb, CLMS_CLUSTER_NODE *node); -extern void clms_clear_node_dep_list(CLMS_CLUSTER_NODE *node); +extern void clms_clear_node_dep_list(CLMS_CLUSTER_NODE *node, bool checkpoint); extern uint32_t clms_client_del_trackresp(SaUint32T client_id); extern CLMS_CLUSTER_NODE *clms_node_get_by_name(const SaNameT *name); extern CLMS_CLUSTER_NODE *clms_node_getnext_by_name(const SaNameT *name); diff --git a/src/clm/clmd/clms_plm.cc b/src/clm/clmd/clms_plm.cc index 9c3076aa9..1ca1e1c66 100644 --- a/src/clm/clmd/clms_plm.cc +++ b/src/clm/clmd/clms_plm.cc @@ -79,7 +79,7 @@ static void clms_plm_readiness_track_callback( step completed will come and we need to clear node list as we dont no the order of entity coming from plm, better to remove dependency list on each node */ - clms_clear_node_dep_list(node); + clms_clear_node_dep_list(node, true); if (node->nodeup && trackedEntities->entities[i].expectedReadinessStatus.readinessState == @@ -278,9 +278,8 @@ static void clms_plm_readiness_track_callback( * Don't checkpoint if this is COMPLETED and nodeup is 0. Node * has already been removed from standby. */ - if (step != SA_PLM_CHANGE_COMPLETED || node->nodeup) { - clms_clear_node_dep_list(node); - } + clms_clear_node_dep_list(node, + step != SA_PLM_CHANGE_COMPLETED || node->nodeup); if (step == SA_PLM_CHANGE_COMPLETED) { if (node->stat_change == SA_TRUE) { if ((node->disable_reboot == SA_FALSE) && diff --git a/src/clm/clmd/clms_util.cc b/src/clm/clmd/clms_util.cc index dde88788e..4b2dd19e2 100644 --- a/src/clm/clmd/clms_util.cc +++ b/src/clm/clmd/clms_util.cc @@ -601,18 +601,18 @@ done: /** * Clear the node dependency list,made for multiple nodes in the plm callback */ -void clms_clear_node_dep_list(CLMS_CLUSTER_NODE *node) { +void clms_clear_node_dep_list(CLMS_CLUSTER_NODE *node, bool checkpoint) { CLMS_CLUSTER_NODE *new_node = nullptr; node->admin_op = ADMIN_OP{}; node->stat_change = SA_FALSE; - ckpt_node_rec(node); + if (checkpoint) ckpt_node_rec(node); while (node->dep_node_list != nullptr) { new_node = node->dep_node_list; new_node->stat_change = SA_FALSE; new_node->admin_op = ADMIN_OP{}; new_node->change = SA_CLM_NODE_NO_CHANGE; - ckpt_node_rec(new_node); + if (checkpoint) ckpt_node_rec(new_node); node->dep_node_list = node->dep_node_list->next; new_node->next = nullptr; } @@ -670,7 +670,7 @@ uint32_t clms_clmresp_rejected(CLMS_CB *cb, CLMS_CLUSTER_NODE *node, CLMS_CLIENT_INFO *client = nullptr; SaAisErrorT ais_er; - clms_clear_node_dep_list(node); + clms_clear_node_dep_list(node, true); client = clms_client_get_by_id(trk->client_id); if (client != nullptr) { if (client->track_flags & SA_TRACK_VALIDATE_STEP) { @@ -775,7 +775,7 @@ uint32_t clms_clmresp_error(CLMS_CB *cb, CLMS_CLUSTER_NODE *node) { #ifdef ENABLE_AIS_PLM SaAisErrorT ais_er = SA_AIS_OK; - clms_clear_node_dep_list(node); + clms_clear_node_dep_list(node, true); ais_er = saPlmReadinessTrackResponse(cb->ent_group_hdl, node->plm_invid, SA_PLM_CALLBACK_RESPONSE_ERROR); if (ais_er != SA_AIS_OK) { @@ -856,7 +856,7 @@ uint32_t clms_clmresp_ok(CLMS_CB *cb, CLMS_CLUSTER_NODE *op_node, if (ncs_patricia_tree_size(&op_node->trackresp) == 0) { /*Clear the node dependency list */ - clms_clear_node_dep_list(op_node); + clms_clear_node_dep_list(op_node, true); ais_er = saPlmReadinessTrackResponse( cb->ent_group_hdl, op_node->plm_invid, SA_PLM_CALLBACK_RESPONSE_OK); if (ais_er != SA_AIS_OK) { -- 2.13.6 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel