Re: [devel] [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat for non-colcated ckpt above 3 replicas[#2253]

2017-01-17 Thread A V Mahesh
Hi Hoang,

Thanks for the comments i will incorporate these two comments while pushing.

-AVM


On 1/18/2017 10:17 AM, Vo Minh Hoang wrote:
> 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(_node.nodeName));
>   reploc_info->rep_key.ckpt_name =
> strdup(ckpt_node->ckpt_name);
> - if
> (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_node->attributes))
> + if
> (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_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(>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(_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(_node->attributes)))
>   reploc_info->rep_type = REP_NOTACTIVE;
> - }
>   
> - proc_rc = cpd_ckpt_reploc_node_add(>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 =
> 

Re: [devel] [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat for non-colcated ckpt above 3 replicas[#2253]

2017-01-17 Thread Vo Minh Hoang
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(_node.nodeName));
reploc_info->rep_key.ckpt_name =
strdup(ckpt_node->ckpt_name);
-   if
(!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_node->attributes))
+   if
(!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_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(>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(_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(_node->attributes)))
reploc_info->rep_type = REP_NOTACTIVE;
-   }
 
-   proc_rc = cpd_ckpt_reploc_node_add(>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(>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 

Re: [devel] [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat for non-colcated ckpt above 3 replicas[#2253]

2017-01-17 Thread A V Mahesh

Hi Hoang

I just cloned http://hg.code.sf.net/p/opensaf/staging and applied ,
dint find nay issue  , so attaching the patch for your reference .
let me know if you still find the issue , i will republish the patch.

-AVM

On 1/18/2017 9:12 AM, Vo Minh Hoang wrote:

Dear Mahesh,

Would you please rebase this patch, it seems a little bit out date.
---
patching file src/ckpt/ckptd/cpd_sbevt.c
Hunk #2 FAILED at 497
Hunk #3 FAILED at 511
2 out of 3 hunks FAILED
---

Sincerely,
Hoang

-Original Message-
From: A V Mahesh [mailto:mahesh.va...@oracle.com]
Sent: Tuesday, January 17, 2017 10:45 AM
To: hoang.m...@dektech.com.au
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [devel] [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat
for non-colcated ckpt above 3 replicas[#2253]

Hi Hoang,

It seem you missed to see this, can you please review.

-AVM


On 1/6/2017 5:47 PM, mahesh.va...@oracle.com wrote:

   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(_node.nodeName));

reploc_info->rep_key.ckpt_name =

strdup(ckpt_node->ckpt_name);

-   if

(!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_node->attributes))

+   if

(!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_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(>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(_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(_node->attributes)))

reploc_info->rep_type = REP_NOTACTIVE;
-   }
   
-		proc_rc = cpd_ckpt_reploc_node_

Re: [devel] [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat for non-colcated ckpt above 3 replicas[#2253]

2017-01-17 Thread Vo Minh Hoang
Dear Mahesh,

Would you please rebase this patch, it seems a little bit out date.
---
patching file src/ckpt/ckptd/cpd_sbevt.c
Hunk #2 FAILED at 497
Hunk #3 FAILED at 511
2 out of 3 hunks FAILED
---

Sincerely,
Hoang

-Original Message-
From: A V Mahesh [mailto:mahesh.va...@oracle.com] 
Sent: Tuesday, January 17, 2017 10:45 AM
To: hoang.m...@dektech.com.au
Cc: opensaf-devel@lists.sourceforge.net
Subject: Re: [devel] [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat
for non-colcated ckpt above 3 replicas[#2253]

Hi Hoang,

It seem you missed to see this, can you please review.

-AVM


On 1/6/2017 5:47 PM, mahesh.va...@oracle.com wrote:
>   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(_node.nodeName));
>   reploc_info->rep_key.ckpt_name =
strdup(ckpt_node->ckpt_name);
> - if
(!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_node->attributes))
> + if
(!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_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(>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(_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(_node->attributes)))
>   reploc_info->rep_type = REP_NOTACTIVE;
> - }
>   
> - proc_rc = cpd_ckpt_reploc_node_add(>ckpt_reploc_tree,
reploc_info, cb->ha_state

Re: [devel] [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat for non-colcated ckpt above 3 replicas[#2253]

2017-01-16 Thread A V Mahesh
Hi Hoang,

It seem you missed to see this, can you please review.

-AVM


On 1/6/2017 5:47 PM, mahesh.va...@oracle.com wrote:
>   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(_node.nodeName));
>   reploc_info->rep_key.ckpt_name = strdup(ckpt_node->ckpt_name);
> - if (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_node->attributes))
> + if 
> (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_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(>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(_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(_node->attributes)))
>   reploc_info->rep_type = REP_NOTACTIVE;
> - }
>   
> - proc_rc = cpd_ckpt_reploc_node_add(>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(>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, 

[devel] [PATCH 1 of 1] cpd: syncup active standby mbcsv dtat for non-colcated ckpt above 3 replicas[#2253]

2017-01-06 Thread mahesh . valla
 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(_node.nodeName));
reploc_info->rep_key.ckpt_name = strdup(ckpt_node->ckpt_name);
-   if (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_node->attributes))
+   if 
(!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(_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(>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(_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(_node->attributes)))
reploc_info->rep_type = REP_NOTACTIVE;
-   }
 
-   proc_rc = cpd_ckpt_reploc_node_add(>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(>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