Ack.
I would suggest(up to you) 'switchover', failover tests too after running
the adminop test.
Mathi.

On Thu, May 3, 2018 at 5:30 PM, Alex Jones <ajo...@rbbn.com> wrote:

> 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