osaf/services/saf/cpsv/cpd/cpd_proc.c |  54 +++++++++++++++++++++++++---------
 1 files changed, 39 insertions(+), 15 deletions(-)


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
@@ -148,6 +148,7 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB
        SaClmNodeIdT node_id;
        SaNameT ckpt_name;
        CPD_REP_KEY_INFO key_info;
+       bool noncoll_rep_on_payload = false;
 
        memset(&ckpt_name, 0, sizeof(SaNameT));
        memset(&cluster_node, 0, sizeof(SaClmClusterNodeT));
@@ -271,13 +272,34 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB
                }
 
                *o_ckpt_node = ckpt_node;
-                       if (reploc_info && create_reploc_node) {
-                       proc_rc = 
cpd_ckpt_reploc_node_add(&cb->ckpt_reploc_tree, reploc_info, cb->ha_state, 
cb->immOiHandle);
-                               if (proc_rc != NCSCC_RC_SUCCESS) {
-                             /* goto reploc_node_add_fail; */
-                             TRACE_4("cpd db add failed in db entry update");
-                               }
-                }
+               if (reploc_info && create_reploc_node) {
+                       /*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. */
+                       if 
(m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&(*io_map_info)->attributes)) {
+                               TRACE_4("Reploc node add  for collocated 
ckpt_id:%llx",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) {
+                                       /* goto reploc_node_add_fail; */
+                                       TRACE_4("cpd db add failed in db entry 
update");
+                               }
+                       } else if 
((cpd_get_slot_sub_id_from_mds_dest(*cpnd_dest) == cb->cpd_remote_id) ||
+                               (cpd_get_slot_sub_id_from_mds_dest(*cpnd_dest) 
== cb->cpd_self_id) ) {
+                               TRACE_4(" reploc node add for non-collocated on 
controller ckpt_id:%llx",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) {
+                                       /* goto reploc_node_add_fail; */
+                                       TRACE_4("cpd db add failed in db entry 
update");
+                               }
+                       } else {
+                               TRACE_4(" reploc node add for non-collocated on 
paylaod ckpt_id:%llx",ckpt_id);
+                               noncoll_rep_on_payload = true;
+                       }
+               }
        } else {
                /* Fill the Map Info */
                memset(map_info, 0, sizeof(CPD_CKPT_MAP_INFO));
@@ -342,15 +364,17 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB
                *o_ckpt_node = ckpt_node;
        }
 
-       /* Add the CPND Details (CPND reference) to the ckpt node */
-       memset(nref_info, 0, sizeof(CPD_NODE_REF_INFO));
-       nref_info->dest = *cpnd_dest;
-       cpd_node_ref_info_add(ckpt_node, nref_info);
+       if (noncoll_rep_on_payload != true) {
+               /* Add the CPND Details (CPND reference) to the ckpt node */
+               memset(nref_info, 0, sizeof(CPD_NODE_REF_INFO));
+               nref_info->dest = *cpnd_dest;
+               cpd_node_ref_info_add(ckpt_node, nref_info);
 
-       /* Add the ckpt reference to the CPND node info */
-       memset(cref_info, 0, sizeof(CPD_CKPT_REF_INFO));
-       cref_info->ckpt_node = ckpt_node;
-       cpd_ckpt_ref_info_add(node_info, cref_info);
+               /* Add the ckpt reference to the CPND node info */
+               memset(cref_info, 0, sizeof(CPD_CKPT_REF_INFO));
+               cref_info->ckpt_node = ckpt_node;
+               cpd_ckpt_ref_info_add(node_info, cref_info);
+       }
 
        TRACE_LEAVE();
        return NCSCC_RC_SUCCESS;

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to