Hi Nhat Pham/Hoang,

Can you please clarify following :

>>Solution:
>>---------
>> The solution is to remove replica location node of that checkpoint from the 
>> ckpt_reploc_tree
>> when unlinking the checkpoint.

If replica location node of that checkpoint from the ckpt_reploc_tree remove
how will be existing application still accessing will behave ?

say for example :

Cpa-1 on node-A  did unlinking a ckpt-1
Cpa-2 on node-A still accessing reading/writing/creating sections/ect .. for 
the unlinked ckpt-1

Can you please test this case

-AVM

On 1/6/2016 9:42 AM, Nhat Pham wrote:
>   osaf/services/saf/cpsv/cpd/cpd_db.c   |   4 ++++
>   osaf/services/saf/cpsv/cpd/cpd_proc.c |  30 ++++++++++++++++++++++++++++++
>   2 files changed, 34 insertions(+), 0 deletions(-)
>
>
> Problem:
> --------
> The replica IMM objects are not created after opening a checkpoint in 
> following scenario:
>
> 1. Open a checkpoint with flag SA_CKPT_CHECKPOINT_CREATE
> 2. Unlink the checkpoint ( the checkpoint is still being used)
> 3. Open a checkpoint with flag SA_CKPT_CHECKPOINT_CREATE with same name as 
> the one in 1.
>
> After step 3. although the checkpoint is opened successfully, the replica IMM 
> objects
> are not created.
>
> The problem happens because the CPD does not delete relating nodes from 
> ckpt_reploc_tree
> when it unlinks the checkpoint in step 2.
>
> Solution:
> ---------
> The solution is to remove replica location node of that checkpoint from the 
> ckpt_reploc_tree
> when unlinking the checkpoint.
>
> diff --git a/osaf/services/saf/cpsv/cpd/cpd_db.c 
> b/osaf/services/saf/cpsv/cpd/cpd_db.c
> --- a/osaf/services/saf/cpsv/cpd/cpd_db.c
> +++ b/osaf/services/saf/cpsv/cpd/cpd_db.c
> @@ -420,6 +420,8 @@ uint32_t cpd_ckpt_reploc_node_delete(CPD
>   {
>       uint32_t rc = NCSCC_RC_SUCCESS;
>   
> +     TRACE_ENTER();
> +
>       if (cb->ha_state == SA_AMF_HA_ACTIVE) {
>   
>               rc = cpd_ckpt_reploc_imm_object_delete(cb, ckpt_reploc_node, 
> is_unlink_set);
> @@ -441,6 +443,7 @@ uint32_t cpd_ckpt_reploc_node_delete(CPD
>                       TRACE_4("cpd db node add failed ");
>               }
>   
> +             TRACE_LEAVE();
>               return NCSCC_RC_FAILURE;
>       }
>   
> @@ -448,6 +451,7 @@ uint32_t cpd_ckpt_reploc_node_delete(CPD
>       if (ckpt_reploc_node)
>               m_MMGR_FREE_CPD_CKPT_REPLOC_INFO(ckpt_reploc_node);
>   
> +     TRACE_LEAVE();
>       return rc;
>   }
>   
> 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
> @@ -1021,6 +1021,36 @@ uint32_t cpd_proc_unlink_set(CPD_CB *cb,
>       (*ckpt_node)->attributes = map_info->attributes;
>       /* Delete the MAP Info */
>       rc = cpd_ckpt_map_node_delete(cb, map_info);
> +
> +     /* Delete replica location of the unlinked checkpoint from the 
> ckpt_reploc_tree */
> +     CPD_NODE_REF_INFO *nref_info = (*ckpt_node)->node_list;
> +
> +     while (nref_info) {
> +             SaClmNodeIdT node_id = 
> m_NCS_NODE_ID_FROM_MDS_DEST(nref_info->dest);
> +             SaClmClusterNodeT cluster_node;
> +             CPD_REP_KEY_INFO key_info;
> +             CPD_CKPT_REPLOC_INFO *reploc_info = NULL;
> +             
> +             memset(&cluster_node, 0, sizeof(SaClmClusterNodeT));
> +             memset(&key_info, 0, sizeof(CPD_REP_KEY_INFO));
> +
> +             if (saClmClusterNodeGet(cb->clm_hdl, node_id, 
> CPD_CLM_API_TIMEOUT, &cluster_node) != SA_AIS_OK) {
> +                     LOG_ER("cpd unlink set - saClmClusterNodeGet failed for 
> node_id %u",node_id);
> +                     rc = SA_AIS_ERR_LIBRARY;
> +                     break;
> +             }
> +
> +             key_info.node_name = cluster_node.nodeName;
> +             key_info.ckpt_name = *ckpt_name;
> +
> +             cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, 
> &reploc_info);
> +             if (reploc_info) {
> +                     cpd_ckpt_reploc_node_delete(cb, reploc_info, 
> (*ckpt_node)->is_unlink_set);
> +             }
> +
> +             nref_info = nref_info->next;
> +     }
> +
>       TRACE_LEAVE();
>       return rc;
>   }


------------------------------------------------------------------------------
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