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

Reply via email to