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 ");
+                               }
+                       } else {
+                               TRACE_4(" reploc node add for non-collocated on 
paylaod ckpt_id:%llx",msg->info.dest_add.ckpt_id);
+                               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

Reply via email to