Dear Mahesh, I have 2 comments. Please find with [Hoang] tag and consider.
Sincerely, Hoang -----Original Message----- From: mahesh.va...@oracle.com [mailto:mahesh.va...@oracle.com] Sent: Friday, January 6, 2017 7:17 PM To: hoang.m...@dektech.com.au Cc: opensaf-devel@lists.sourceforge.net Subject: [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat for non-colcated ckpt above 3 replicas[#2253] src/ckpt/ckptd/cpd_sbevt.c | 30 +++++++++++++++++++++--------- 1 files changed, 21 insertions(+), 9 deletions(-) Issue : According to Ckpt non-collocated ckpt implementation the cluster can have max 3 replicas and minimum of 2 replicas,if the non-collocated ckpt is opened on controller initially , by default cpsv service will create 2 replicas each one on controllers , else the non-collocated ckpt is opened on payload initially,by default cpsv service will create 3 replicas one on the payload and other each one on controllers,so any further opens form any other payload is not required to create replicas locally.All other node ckpt application will access the data form the default created active replica. In current code ha bug in active standby MBCSV checkpoint of CPD_CKPT_REF_INFO data is mismatching while creating replica node for non-collocated of a payload Fix : This patch address the issue by matching CPD_CKPT_REF_INFO data by not crating cpd_ckpt_reploc_node cpd_ckpt_ref_info , for the any further opens form any other payload opened the ckpt above max 3 replicas. diff --git a/src/ckpt/ckptd/cpd_sbevt.c b/src/ckpt/ckptd/cpd_sbevt.c --- a/src/ckpt/ckptd/cpd_sbevt.c +++ b/src/ckpt/ckptd/cpd_sbevt.c @@ -456,6 +456,7 @@ uint32_t cpd_sb_proc_ckpt_dest_add(CPD_C SaClmClusterNodeT cluster_node; CPD_REP_KEY_INFO key_info; CPD_NODE_REF_INFO *nref_info; + bool noncoll_rep_on_payload = false; TRACE_ENTER(); @@ -497,9 +498,20 @@ uint32_t cpd_sb_proc_ckpt_dest_add(CPD_C reploc_info->rep_key.node_name = strdup(osaf_extended_name_borrow(&cluster_node.nodeName)); reploc_info->rep_key.ckpt_name = strdup(ckpt_node->ckpt_name); - if (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&ckpt_node->attributes)) + if (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&ckpt_node->attributes)) { reploc_info->rep_type = REP_NONCOLL; - else { + if ((cpd_get_slot_sub_id_from_mds_dest(msg->info.dest_add.mds_dest) == cb->cpd_remote_id) || + (cpd_get_slot_sub_id_from_mds_dest(msg->info.dest_add.mds_dest) == cb->cpd_self_id) ) { + TRACE_4(" reploc node add for non-collocated on controller ckpt_id:%llx", msg->info.dest_add.ckpt_id); + proc_rc = cpd_ckpt_reploc_node_add(&cb->ckpt_reploc_tree, reploc_info, cb->ha_state, cb->immOiHandle); + if (proc_rc != NCSCC_RC_SUCCESS) { + TRACE_4("cpd standby dest add evt failed "); [Hoang] reploc_info is malloc in this scope, should free it here to avoid mem leak. So do LOC: 511 and 529. + } + } else { + TRACE_4(" reploc node add for non-collocated on paylaod ckpt_id:%llx",msg->info.dest_add.ckpt_id); [Hoang] consider changing trace message when we do not add anything here. Small typos " paylaod ". + noncoll_rep_on_payload = true; + } + } else { if ((ckpt_node->attributes.creationFlags & SA_CKPT_WR_ALL_REPLICAS) && (m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&ckpt_node->attributes))) reploc_info->rep_type = REP_SYNCUPD; @@ -511,17 +523,17 @@ uint32_t cpd_sb_proc_ckpt_dest_add(CPD_C if ((ckpt_node->attributes.creationFlags & SA_CKPT_WR_ACTIVE_REPLICA_WEAK) && (m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&ckpt_node->attributes))) reploc_info->rep_type = REP_NOTACTIVE; - } - proc_rc = cpd_ckpt_reploc_node_add(&cb->ckpt_reploc_tree, reploc_info, cb->ha_state, cb->immOiHandle); - if (proc_rc != NCSCC_RC_SUCCESS) { - TRACE_4("cpd standby dest add evt failed "); - /* goto free_mem; */ + proc_rc = cpd_ckpt_reploc_node_add(&cb->ckpt_reploc_tree, reploc_info, cb->ha_state, cb->immOiHandle); + if (proc_rc != NCSCC_RC_SUCCESS) { + TRACE_4("cpd standby dest add evt failed "); + } } } - cpd_ckpt_ref_info_add(node_info, ckpt_node); - + if (noncoll_rep_on_payload != true) { + cpd_ckpt_ref_info_add(node_info, ckpt_node); + } TRACE_1("cpd standby destadd evt success ckpt_id %llx mdsdest: %"PRIu64, msg->info.dest_add.ckpt_id, msg->info.dest_add.mds_dest); TRACE_LEAVE(); ------------------------------------------------------------------------------ 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