Hi Hoang, Additional TRACE will be removed after testing.
-AVM On 11/16/2016 2:28 PM, mahesh.va...@oracle.com wrote: > osaf/services/saf/cpsv/cpd/cpd_imm.c | 20 ++++++++++++-------- > osaf/services/saf/cpsv/cpd/cpd_proc.c | 9 ++++++++- > 2 files changed, 20 insertions(+), 9 deletions(-) > > > Bug : > While cpd processing cpnd down for COLLOCATED cktp and that checkpoint > only exist on the went down cpnd ( no others Node opened this checkpoint in > cluster) , > then cpd removes that checkpoint and replica completely. > > In such case the current logic has as bug, fist it removes ckpt node and > then replica, > this is causing deletion of parent object safCkpt=...,* first , then child > object safReplica=...,safCkpt=...,* next. > > as we know IMM removes child if parent is removed ,so this is causing the > issue out of > sequence remove of safReplica object and ERR_NOT_EXIST is returned. > > Fix : > While cpd removing that checkpoint and replica completely , > follow the sequence of child object safReplica=...,safCkpt=...,* fist then > parent object safCkpt=...,* next. > > This is focused fix , my be we need to review complete code for such > occurrences , if found > will be addressed in new ticket. > > diff --git a/osaf/services/saf/cpsv/cpd/cpd_imm.c > b/osaf/services/saf/cpsv/cpd/cpd_imm.c > --- a/osaf/services/saf/cpsv/cpd/cpd_imm.c > +++ b/osaf/services/saf/cpsv/cpd/cpd_imm.c > @@ -400,7 +400,9 @@ SaAisErrorT delete_runtime_replica_objec > osaf_extended_name_lend(replica_dn, &replica_name); > rc = immutil_saImmOiRtObjectDelete(immOiHandle, &replica_name); > if (rc != SA_AIS_OK) { > - LOG_ER("Deleting run time object %s Failed - rc = > %d",replica_dn, rc); > + LOG_ER("Deleting run time object %s Failed-1 - rc = > %d",replica_dn, rc); > + } else { > + TRACE("Deleting run time object %s Success-1 - rc = > %d",replica_dn, rc); > } > > free(replica_dn); > @@ -522,9 +524,11 @@ SaAisErrorT delete_runtime_ckpt_object(C > osaf_extended_name_lend(ckpt_node->ckpt_name, &ckpt_name); > > rc = immutil_saImmOiRtObjectDelete(immOiHandle, &ckpt_name); > - if (rc != SA_AIS_OK) > + if (rc != SA_AIS_OK) { > LOG_ER("Deleting run time object %s failed - rc = %d", > ckpt_node->ckpt_name, rc); > - > + } else { > + TRACE("Deleting run time object %s success - rc = %d", > ckpt_node->ckpt_name, rc); > + } > return rc; > } > > @@ -917,11 +921,11 @@ SaAisErrorT cpd_clean_checkpoint_objects > /* Delete the runtime object and its children. */ > rc = immutil_saImmOiRtObjectDelete(cb->immOiHandle, > &object_name); > if (rc == SA_AIS_OK) { > - TRACE("Object \"%s\" deleted", (char *) > osaf_extended_name_borrow(&object_name)); > - } else { > - LOG_ER("%s saImmOiRtObjectDelete for \"%s\" FAILED > %d", > - __FUNCTION__, (char *) > osaf_extended_name_borrow(&object_name), rc); > - } > + TRACE("saImmOiRtObjectDelete \"%s\" deleted > Successfully", (char *) osaf_extended_name_borrow(&object_name)); > + } else { > + LOG_ER("%s saImmOiRtObjectDelete for \"%s\" FAILED %d", > + __FUNCTION__, (char *) > osaf_extended_name_borrow(&object_name), rc); > + } > } > > if (rc != SA_AIS_ERR_NOT_EXIST) { > diff --git a/osaf/services/saf/cpsv/cpd/cpd_proc.c > b/osaf/services/saf/cpsv/cpd/cpd_proc.c > --- a/osaf/services/saf/cpsv/cpd/cpd_proc.c > +++ b/osaf/services/saf/cpsv/cpd/cpd_proc.c > @@ -809,6 +809,11 @@ uint32_t cpd_process_cpnd_down(CPD_CB *c > send_evt.info.cpnd.info.ckpt_del.mds_dest = *cpnd_dest; > if (ckpt_node->dest_cnt == 0) { > TRACE_1("cpd ckpt del success for > ckpt_id:%llx",ckpt_node->ckpt_id); > + /* Delete reploc fist*/ > + cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, > &key_info, &rep_info); > + if (rep_info) { > + cpd_ckpt_reploc_node_delete(cb, > rep_info, ckpt_node->is_unlink_set); > + } > cpd_ckpt_map_node_get(&cb->ckpt_map_tree, > ckpt_node->ckpt_name, &map_info); > > /* Remove the ckpt_node */ > @@ -875,7 +880,7 @@ uint32_t cpd_process_cpnd_down(CPD_CB *c > /* Send it to CPD(s), by sending ckpt_id = 0 */ > /* This is to delete the node from reploc_tree */ > cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, > &rep_info); > - if (rep_info) { > + if ((rep_info) && (ckpt_node)) { > cpd_ckpt_reploc_node_delete(cb, rep_info, > ckpt_node->is_unlink_set); > } > > @@ -1238,6 +1243,8 @@ uint32_t cpd_ckpt_reploc_imm_object_dele > LOG_ER("Deleting run time object %s FAILED", > replica_dn); > free(replica_dn); > return NCSCC_RC_FAILURE; > + } else { > + TRACE("Deleting run time object %s SUCCESS", > replica_dn); > } > free(replica_dn); > } > > ------------------------------------------------------------------------------ > _______________________________________________ > Opensaf-devel mailing list > Opensaf-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel