src/ckpt/ckptd/cpd_proc.c |  11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)


problem:
In case failover multiple times, the cpnd is down for a moment so there is no
cpnd opening specific checkpoint. This lead to retention timer is trigger.
When cpnd is up again but has different pid so retention timer is not stoped.
Repica is deleted at retention while its information still be in ckpt database.
That cause problem

Fix:
- Stop timer of removed node.
- Update data in patricia trees (for retention value consistence).

diff --git a/src/ckpt/ckptd/cpd_proc.c b/src/ckpt/ckptd/cpd_proc.c
--- a/src/ckpt/ckptd/cpd_proc.c
+++ b/src/ckpt/ckptd/cpd_proc.c
@@ -679,7 +679,8 @@ uint32_t cpd_process_cpnd_down(CPD_CB *c
        cpd_cpnd_info_node_find_add(&cb->cpnd_tree, cpnd_dest, &cpnd_info, 
&add_flag);
        if (!cpnd_info)
                return NCSCC_RC_SUCCESS;
-
+       /* Stop timer before processing down */
+       cpd_tmr_stop(&cpnd_info->cpnd_ret_timer);
        cref_info = cpnd_info->ckpt_ref_list;
 
        while (cref_info) {
@@ -989,6 +990,14 @@ uint32_t cpd_proc_retention_set(CPD_CB *
 
        /* Update the retention Time */
        (*ckpt_node)->ret_time = reten_time;
+       (*ckpt_node)->attributes.retentionDuration = reten_time;
+
+       /* Update the related patricia tree */
+       CPD_CKPT_MAP_INFO *map_info = NULL;
+       cpd_ckpt_map_node_get(&cb->ckpt_map_tree, (*ckpt_node)->ckpt_name, 
&map_info);
+       if (map_info) {
+               map_info->attributes.retentionDuration = reten_time;
+       }
        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