osaf/libs/common/cpsv/include/cpd.h | 1 + osaf/libs/common/cpsv/include/cpd_cb.h | 17 +- osaf/libs/common/cpsv/include/cpd_imm.h | 4 +- osaf/libs/common/cpsv/include/cpd_mem.h | 25 ++- osaf/libs/common/cpsv/include/cpd_proc.h | 2 +- osaf/services/saf/cpsv/cpd/Makefile.am | 1 + osaf/services/saf/cpsv/cpd/cpd_amf.c | 7 +- osaf/services/saf/cpsv/cpd/cpd_db.c | 95 +++++----- osaf/services/saf/cpsv/cpd/cpd_evt.c | 103 +++++++---- osaf/services/saf/cpsv/cpd/cpd_imm.c | 268 +++++++++++++++++++++--------- osaf/services/saf/cpsv/cpd/cpd_main.c | 7 + osaf/services/saf/cpsv/cpd/cpd_mbcsv.c | 9 +- osaf/services/saf/cpsv/cpd/cpd_proc.c | 178 ++++++++++---------- osaf/services/saf/cpsv/cpd/cpd_red.c | 6 +- osaf/services/saf/cpsv/cpd/cpd_sbevt.c | 57 ++--- 15 files changed, 474 insertions(+), 306 deletions(-)
diff --git a/osaf/libs/common/cpsv/include/cpd.h b/osaf/libs/common/cpsv/include/cpd.h --- a/osaf/libs/common/cpsv/include/cpd.h +++ b/osaf/libs/common/cpsv/include/cpd.h @@ -33,6 +33,7 @@ #ifndef CPD_H #define CPD_H +#include "osaf_extended_name.h" #include "cpsv.h" #include "ncssysf_def.h" #include "ncs_main_papi.h" diff --git a/osaf/libs/common/cpsv/include/cpd_cb.h b/osaf/libs/common/cpsv/include/cpd_cb.h --- a/osaf/libs/common/cpsv/include/cpd_cb.h +++ b/osaf/libs/common/cpsv/include/cpd_cb.h @@ -78,7 +78,7 @@ typedef struct cpsv_node_ref_info { typedef struct cpd_ckpt_info_node { NCS_PATRICIA_NODE patnode; SaCkptCheckpointHandleT ckpt_id; - SaNameT ckpt_name; + SaConstStringT ckpt_name; uint32_t dest_cnt; CPD_NODE_REF_INFO *node_list; bool is_unlink_set; @@ -123,8 +123,7 @@ typedef struct cpd_cpnd_info_node { uint32_t timer_state; bool ckpt_cpnd_scxb_exist; /* for imm */ - SaNameT node_name; - SaNameT ckpt_name; + SaConstStringT node_name; uint32_t rep_type; } CPD_CPND_INFO_NODE; @@ -132,15 +131,15 @@ typedef struct cpd_cpnd_info_node { typedef struct cpd_ckpt_map_info { NCS_PATRICIA_NODE patnode; - SaNameT ckpt_name; + SaConstStringT ckpt_name; SaCkptCheckpointHandleT ckpt_id; SaCkptCheckpointCreationAttributesT attributes; SaVersionT client_version; } CPD_CKPT_MAP_INFO; typedef struct cpd_rep_key_info { - SaNameT ckpt_name; - SaNameT node_name; + SaConstStringT ckpt_name; + SaConstStringT node_name; } CPD_REP_KEY_INFO; typedef struct cpd_ckpt_reploc_info { @@ -219,7 +218,7 @@ typedef struct cpd_cb_tag { #define CPD_CB_NULL ((CPD_CB *)0) /* Function Declarations */ -CPD_CKPT_INFO_NODE *cpd_find_add_ckpt_name(CPD_CB *cpd_cb, SaNameT ckpt_name); +CPD_CKPT_INFO_NODE *cpd_find_add_ckpt_name(CPD_CB *cpd_cb, SaConstStringT ckpt_name); void cpd_free_ckpt_node(CPD_CB *gld_cb, CPD_CKPT_INFO_NODE *ckpt_info); @@ -248,9 +247,9 @@ void cpd_ckpt_reploc_tree_destroy(CPD_CB uint32_t cpd_ckpt_map_tree_init(CPD_CB *cb); uint32_t cpd_ckpt_map_node_get(NCS_PATRICIA_TREE *ckpt_map_tree, - SaNameT *ckpt_name, CPD_CKPT_MAP_INFO **ckpt_map_node); + SaConstStringT ckpt_name, CPD_CKPT_MAP_INFO **ckpt_map_node); void cpd_ckpt_map_node_getnext(NCS_PATRICIA_TREE *ckpt_map_tree, - SaNameT *ckpt_name, CPD_CKPT_MAP_INFO **ckpt_map_node); + SaConstStringT *ckpt_name, CPD_CKPT_MAP_INFO **ckpt_map_node); uint32_t cpd_ckpt_map_node_add(NCS_PATRICIA_TREE *ckpt_map_tree, CPD_CKPT_MAP_INFO *ckpt_map_node); uint32_t cpd_ckpt_map_node_delete(CPD_CB *cb, CPD_CKPT_MAP_INFO *ckpt_map_node); diff --git a/osaf/libs/common/cpsv/include/cpd_imm.h b/osaf/libs/common/cpsv/include/cpd_imm.h --- a/osaf/libs/common/cpsv/include/cpd_imm.h +++ b/osaf/libs/common/cpsv/include/cpd_imm.h @@ -4,7 +4,9 @@ extern SaAisErrorT cpd_imm_init(SaImmOiH extern void cpd_imm_reinit_bg(CPD_CB * cb); extern void cpd_imm_declare_implementer(SaImmOiHandleT* immOiHandle, SaSelectionObjectT* imm_sel_obj); extern SaAisErrorT create_runtime_ckpt_object(CPD_CKPT_INFO_NODE *ckpt_node, SaImmOiHandleT immOiHandle); +extern SaAisErrorT delete_runtime_ckpt_object(CPD_CKPT_INFO_NODE *ckpt_node, SaImmOiHandleT immOiHandle); extern SaAisErrorT create_runtime_replica_object(CPD_CKPT_REPLOC_INFO *ckpt_reploc_node, SaImmOiHandleT immOiHandle); -extern void cpd_create_association_class_dn(const SaNameT *child_dn, const SaNameT *parent_dn, const char *rdn_tag, SaNameT *dn); +extern SaAisErrorT delete_runtime_replica_object(CPD_CKPT_REPLOC_INFO *ckpt_reploc_node, SaImmOiHandleT immOiHandle); +extern void cpd_create_association_class_dn(const char *child_dn, const char *parent_dn, const char *rdn_tag, char **dn); extern SaAisErrorT cpd_clean_checkpoint_objects(CPD_CB *cb); extern SaUint32T cpd_get_scAbsenceAllowed_attr(); diff --git a/osaf/libs/common/cpsv/include/cpd_mem.h b/osaf/libs/common/cpsv/include/cpd_mem.h --- a/osaf/libs/common/cpsv/include/cpd_mem.h +++ b/osaf/libs/common/cpsv/include/cpd_mem.h @@ -79,18 +79,27 @@ typedef enum { NCS_SERVICE_ID_CPD, \ CPD_SVC_SUB_ID_CPD_CKPT_INFO_NODE) -#define m_MMGR_FREE_CPD_CKPT_INFO_NODE(p) m_NCS_MEM_FREE(p,\ +#define m_MMGR_FREE_CPD_CKPT_INFO_NODE(p) \ + if(p->ckpt_name != 0) free((void*)p->ckpt_name);\ + m_NCS_MEM_FREE(p, \ NCS_MEM_REGION_PERSISTENT, \ NCS_SERVICE_ID_CPD, \ CPD_SVC_SUB_ID_CPD_CKPT_INFO_NODE) +#define m_MMGR_ZERO_CPD_CKPT_INFO_NODE(p) \ + if(p->ckpt_name != 0) free((void*)p->ckpt_name);\ + memset(p, 0, sizeof(CPD_CKPT_INFO_NODE)) + #define m_MMGR_ALLOC_CPD_CKPT_MAP_INFO (CPD_CKPT_MAP_INFO*) \ m_NCS_MEM_ALLOC(sizeof(CPD_CKPT_MAP_INFO), \ NCS_MEM_REGION_PERSISTENT, \ NCS_SERVICE_ID_CPD, \ CPD_SVC_SUB_ID_CPD_CKPT_MAP_INFO) -#define m_MMGR_FREE_CPD_CKPT_MAP_INFO(p) m_NCS_MEM_FREE(p,\ +#define m_MMGR_FREE_CPD_CKPT_MAP_INFO(p) \ + if (p->ckpt_name != NULL) \ + free((void *)p->ckpt_name); \ + m_NCS_MEM_FREE(p,\ NCS_MEM_REGION_PERSISTENT, \ NCS_SERVICE_ID_CPD, \ CPD_SVC_SUB_ID_CPD_CKPT_MAP_INFO) @@ -101,7 +110,12 @@ typedef enum { NCS_SERVICE_ID_CPD, \ CPD_SVC_SUB_ID_CPD_CKPT_REPLOC_INFO) -#define m_MMGR_FREE_CPD_CKPT_REPLOC_INFO(p) m_NCS_MEM_FREE(p, \ +#define m_MMGR_FREE_CPD_CKPT_REPLOC_INFO(p) \ + if (p->rep_key.node_name != 0) \ + free((void *)p->rep_key.node_name); \ + if (p->rep_key.ckpt_name != 0) \ + free((void *)p->rep_key.ckpt_name); \ + m_NCS_MEM_FREE(p, \ NCS_MEM_REGION_PERSISTENT, \ NCS_SERVICE_ID_CPD, \ CPD_SVC_SUB_ID_CPD_CKPT_REPLOC_INFO) @@ -112,7 +126,10 @@ typedef enum { NCS_SERVICE_ID_CPD, \ CPD_SVC_SUB_ID_CPD_CPND_INFO_NODE) -#define m_MMGR_FREE_CPD_CPND_INFO_NODE(p) m_NCS_MEM_FREE(p,\ +#define m_MMGR_FREE_CPD_CPND_INFO_NODE(p) \ + if (p->node_name != 0) \ + free((void *)p->node_name); \ + m_NCS_MEM_FREE(p,\ NCS_MEM_REGION_PERSISTENT, \ NCS_SERVICE_ID_CPD, \ CPD_SVC_SUB_ID_CPD_CPND_INFO_NODE) diff --git a/osaf/libs/common/cpsv/include/cpd_proc.h b/osaf/libs/common/cpsv/include/cpd_proc.h --- a/osaf/libs/common/cpsv/include/cpd_proc.h +++ b/osaf/libs/common/cpsv/include/cpd_proc.h @@ -75,7 +75,7 @@ uint32_t cpd_proc_retention_set(CPD_CB * SaTimeT reten_time, CPD_CKPT_INFO_NODE **ckpt_node); uint32_t cpd_proc_unlink_set(CPD_CB *cb, CPD_CKPT_INFO_NODE **ckpt_node, - CPD_CKPT_MAP_INFO *map_info, SaNameT *ckpt_name); + CPD_CKPT_MAP_INFO *map_info, SaConstStringT ckpt_name); void cpd_proc_broadcast_rdset_stop(SaCkptCheckpointHandleT ckpt_id, CPD_CB *cb); diff --git a/osaf/services/saf/cpsv/cpd/Makefile.am b/osaf/services/saf/cpsv/cpd/Makefile.am --- a/osaf/services/saf/cpsv/cpd/Makefile.am +++ b/osaf/services/saf/cpsv/cpd/Makefile.am @@ -26,6 +26,7 @@ osaf_execbin_PROGRAMS = osafckptd osafckptd_CPPFLAGS = \ -DSA_CLM_B01=1 \ -DNCS_CPD=1 \ + -DSA_EXTENDED_NAME_SOURCE \ $(AM_CPPFLAGS) \ -I$(top_srcdir)/osaf/libs/common/cpsv/include \ -I$(top_srcdir)/osaf/libs/common/immsv/include diff --git a/osaf/services/saf/cpsv/cpd/cpd_amf.c b/osaf/services/saf/cpsv/cpd/cpd_amf.c --- a/osaf/services/saf/cpsv/cpd/cpd_amf.c +++ b/osaf/services/saf/cpsv/cpd/cpd_amf.c @@ -334,10 +334,10 @@ uint32_t cpd_amf_register(CPD_CB *cpd_cb } if (saAmfComponentRegister(cpd_cb->amf_hdl, &cpd_cb->comp_name, (SaNameT *)NULL) == SA_AIS_OK) { - TRACE_LEAVE2("cpd amf register success for %s",cpd_cb->comp_name.value); + TRACE_LEAVE2("cpd amf register success for %s", osaf_extended_name_borrow(&cpd_cb->comp_name)); return NCSCC_RC_SUCCESS; } else { - TRACE_LEAVE2("cpd Amf component register failed for %s",cpd_cb->comp_name.value); + TRACE_LEAVE2("cpd Amf component register failed for %s",osaf_extended_name_borrow(&cpd_cb->comp_name)); return NCSCC_RC_FAILURE; } } @@ -355,7 +355,8 @@ uint32_t cpd_amf_register(CPD_CB *cpd_cb *****************************************************************************/ uint32_t cpd_amf_deregister(CPD_CB *cpd_cb) { - SaNameT comp_name = { 5, "CPD" }; + SaNameT comp_name; + osaf_extended_name_lend("CPD", &comp_name); if (saAmfComponentUnregister(cpd_cb->amf_hdl, &comp_name, (SaNameT *)NULL) == SA_AIS_OK) return NCSCC_RC_SUCCESS; else 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 @@ -114,10 +114,8 @@ uint32_t cpd_ckpt_node_add(NCS_PATRICIA_ TRACE_4("cpd ckpt info node add failed ckpt_id:%llx",ckpt_node->ckpt_id); /* delete imm ckpt runtime object */ if (ha_state == SA_AMF_HA_ACTIVE) { - if (immutil_saImmOiRtObjectDelete(immOiHandle, &ckpt_node->ckpt_name) != SA_AIS_OK) { - LOG_ER("Deleting run time object %s FAILED",ckpt_node->ckpt_name.value); + if (delete_runtime_ckpt_object(ckpt_node, immOiHandle) != SA_AIS_OK) return NCSCC_RC_FAILURE; - } } return NCSCC_RC_FAILURE; } @@ -155,10 +153,8 @@ uint32_t cpd_ckpt_node_delete(CPD_CB *cb /* delete imm ckpt runtime object */ if ((cb->ha_state == SA_AMF_HA_ACTIVE) && (ckpt_node->is_unlink_set != true)) { - if (immutil_saImmOiRtObjectDelete(cb->immOiHandle, &ckpt_node->ckpt_name) != SA_AIS_OK) { - LOG_ER("Deleting run time object %s FAILED", ckpt_node->ckpt_name.value); - rc = NCSCC_RC_FAILURE; - } + if (delete_runtime_ckpt_object(ckpt_node, cb->immOiHandle) != SA_AIS_OK) + return NCSCC_RC_FAILURE; } if (ncs_patricia_tree_del(&cb->ckpt_tree, &ckpt_node->patnode) != NCSCC_RC_SUCCESS) { @@ -305,7 +301,6 @@ uint32_t cpd_ckpt_reploc_tree_init(CPD_C { NCS_PATRICIA_PARAMS param; memset(¶m, 0, sizeof(NCS_PATRICIA_PARAMS)); - /* param.key_size = 2 *sizeof(SaNameT); */ param.key_size = sizeof(CPD_REP_KEY_INFO); if (ncs_patricia_tree_init(&cb->ckpt_reploc_tree, ¶m) != NCSCC_RC_SUCCESS) { LOG_ER("CPD_CKPT_REPLOC_TREE_INIT FAILED"); @@ -328,10 +323,23 @@ uint32_t cpd_ckpt_reploc_tree_init(CPD_C uint32_t cpd_ckpt_reploc_get(NCS_PATRICIA_TREE *ckpt_reploc_tree, CPD_REP_KEY_INFO *key_info, CPD_CKPT_REPLOC_INFO **ckpt_reploc_node) { - key_info->ckpt_name.length = m_NCS_OS_HTONS(key_info->ckpt_name.length); - key_info->node_name.length = m_NCS_OS_HTONS(key_info->node_name.length); + CPD_CKPT_REPLOC_INFO *reploc_info = NULL; + *ckpt_reploc_node = NULL; - *ckpt_reploc_node = (CPD_CKPT_REPLOC_INFO *)ncs_patricia_tree_get(ckpt_reploc_tree, (uint8_t *)key_info); + if ((key_info->ckpt_name == NULL) || (key_info->node_name == NULL)) + return NCSCC_RC_SUCCESS; + + cpd_ckpt_reploc_getnext(ckpt_reploc_tree, NULL, &reploc_info); + while (reploc_info) { + if ((strcmp(key_info->ckpt_name, reploc_info->rep_key.ckpt_name) == 0) && + (strcmp(key_info->node_name, reploc_info->rep_key.node_name) == 0)) { + *ckpt_reploc_node = reploc_info; + break; + } + + cpd_ckpt_reploc_getnext(ckpt_reploc_tree, &reploc_info->rep_key, &reploc_info); + } + return NCSCC_RC_SUCCESS; } @@ -348,8 +356,6 @@ void cpd_ckpt_reploc_getnext(NCS_PATRICI CPD_REP_KEY_INFO *key_info, CPD_CKPT_REPLOC_INFO **ckpt_reploc_node) { if (key_info) { - key_info->ckpt_name.length = m_NCS_OS_HTONS(key_info->ckpt_name.length); - key_info->node_name.length = m_NCS_OS_HTONS(key_info->node_name.length); *ckpt_reploc_node = (CPD_CKPT_REPLOC_INFO *)ncs_patricia_tree_getnext(ckpt_reploc_tree, (uint8_t *)key_info); } else { @@ -370,9 +376,7 @@ uint32_t cpd_ckpt_reploc_node_add(NCS_PA SaAmfHAStateT ha_state, SaImmOiHandleT immOiHandle) { SaAisErrorT err = SA_AIS_OK; - SaNameT replica_dn; TRACE_ENTER(); - memset(&replica_dn, 0, sizeof(SaNameT)); /* Add the imm runtime object */ if (ha_state == SA_AMF_HA_ACTIVE) { @@ -383,24 +387,15 @@ uint32_t cpd_ckpt_reploc_node_add(NCS_PA return NCSCC_RC_FAILURE; } } - ckpt_reploc_node->rep_key.ckpt_name.length = m_NCS_OS_HTONS(ckpt_reploc_node->rep_key.ckpt_name.length); - /* node name is obtained from cluster info which always returns in network order, so no need of the conversion for the node_name length */ - ckpt_reploc_node->rep_key.node_name.length = m_NCS_OS_HTONS(ckpt_reploc_node->rep_key.node_name.length); ckpt_reploc_node->patnode.key_info = (uint8_t *)&ckpt_reploc_node->rep_key; if (ncs_patricia_tree_add(ckpt_reploc_tree, &ckpt_reploc_node->patnode) != NCSCC_RC_SUCCESS) { /* delete reploc imm runtime object */ if (ha_state == SA_AMF_HA_ACTIVE) { - cpd_create_association_class_dn(&ckpt_reploc_node->rep_key.node_name, - &ckpt_reploc_node->rep_key.ckpt_name, "safReplica", &replica_dn); - - if (immutil_saImmOiRtObjectDelete(immOiHandle, &replica_dn) != SA_AIS_OK) { - TRACE_4("Deleting run time object %s Failed",replica_dn.value); + if (delete_runtime_replica_object(ckpt_reploc_node, immOiHandle) != SA_AIS_OK) { TRACE_LEAVE(); return NCSCC_RC_FAILURE; } - TRACE_LEAVE(); - return NCSCC_RC_FAILURE; } } @@ -445,8 +440,9 @@ uint32_t cpd_ckpt_reploc_node_delete(CPD } /* Free the Client Node */ - if (ckpt_reploc_node) + if (ckpt_reploc_node) { m_MMGR_FREE_CPD_CKPT_REPLOC_INFO(ckpt_reploc_node); + } return rc; } @@ -512,7 +508,7 @@ uint32_t cpd_ckpt_map_tree_init(CPD_CB * { NCS_PATRICIA_PARAMS param; memset(¶m, 0, sizeof(NCS_PATRICIA_PARAMS)); - param.key_size = sizeof(SaNameT); + param.key_size = sizeof(SaConstStringT); if (ncs_patricia_tree_init(&cb->ckpt_map_tree, ¶m) != NCSCC_RC_SUCCESS) { return NCSCC_RC_FAILURE; } @@ -529,17 +525,23 @@ uint32_t cpd_ckpt_map_tree_init(CPD_CB * NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE Notes : The caller takes the cb lock before calling this function ******************************************************************************/ -uint32_t cpd_ckpt_map_node_get(NCS_PATRICIA_TREE *ckpt_map_tree, SaNameT *ckpt_name, CPD_CKPT_MAP_INFO **ckpt_map_node) +uint32_t cpd_ckpt_map_node_get(NCS_PATRICIA_TREE *ckpt_map_tree, SaConstStringT ckpt_name, CPD_CKPT_MAP_INFO **ckpt_map_node) { + CPD_CKPT_MAP_INFO *map_info = NULL; - /* stuffing the key with NULL as patricia tries to match the max keylen */ - ckpt_name->length = m_NCS_OS_HTONS(ckpt_name->length); + *ckpt_map_node = NULL; -/* ckpt_name->length = m_NCS_OS_HTONS(ckpt_name->length); */ - *ckpt_map_node = (CPD_CKPT_MAP_INFO *) - ncs_patricia_tree_get(ckpt_map_tree, (uint8_t *)ckpt_name); + if (ckpt_name == NULL) + return NCSCC_RC_SUCCESS; - ckpt_name->length = m_NCS_OS_NTOHS(ckpt_name->length); + cpd_ckpt_map_node_getnext(ckpt_map_tree, NULL, &map_info); + while (map_info) { + if (strcmp(ckpt_name, map_info->ckpt_name) == 0) { + *ckpt_map_node = map_info; + break; + } + cpd_ckpt_map_node_getnext(ckpt_map_tree, &map_info->ckpt_name, &map_info); + } return NCSCC_RC_SUCCESS; } @@ -553,16 +555,12 @@ uint32_t cpd_ckpt_map_node_get(NCS_PATRI NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE Notes : The caller takes the cb lock before calling this function ******************************************************************************/ -void cpd_ckpt_map_node_getnext(NCS_PATRICIA_TREE *ckpt_map_tree, SaNameT *ckpt_name, CPD_CKPT_MAP_INFO **ckpt_map_node) +void cpd_ckpt_map_node_getnext(NCS_PATRICIA_TREE *ckpt_map_tree, SaConstStringT *ckpt_name, CPD_CKPT_MAP_INFO **ckpt_map_node) { if (ckpt_name) { - ckpt_name->length = m_NCS_OS_HTONS(ckpt_name->length); *ckpt_map_node = (CPD_CKPT_MAP_INFO *)ncs_patricia_tree_getnext(ckpt_map_tree, (uint8_t *)ckpt_name); - ckpt_name->length = m_NCS_OS_NTOHS(ckpt_name->length); - } - - else { + } else { *ckpt_map_node = (CPD_CKPT_MAP_INFO *)ncs_patricia_tree_getnext(ckpt_map_tree, (uint8_t *)NULL); } @@ -579,12 +577,11 @@ void cpd_ckpt_map_node_getnext(NCS_PATRI ******************************************************************************/ uint32_t cpd_ckpt_map_node_add(NCS_PATRICIA_TREE *ckpt_map_tree, CPD_CKPT_MAP_INFO *ckpt_map_node) { - ckpt_map_node->ckpt_name.length = m_NCS_OS_HTONS(ckpt_map_node->ckpt_name.length); ckpt_map_node->patnode.key_info = (uint8_t *)&ckpt_map_node->ckpt_name; if (ncs_patricia_tree_add(ckpt_map_tree, &ckpt_map_node->patnode) != NCSCC_RC_SUCCESS) { - LOG_ER("cpd ckpt map info add failed ckpt_name %s",ckpt_map_node->ckpt_name.value); + LOG_ER("cpd ckpt map info add failed ckpt_name %s",ckpt_map_node->ckpt_name); return NCSCC_RC_FAILURE; } @@ -603,16 +600,20 @@ uint32_t cpd_ckpt_map_node_delete(CPD_CB { uint32_t rc = NCSCC_RC_SUCCESS; + TRACE_ENTER(); + /* Remove the Node from the client tree */ if (ncs_patricia_tree_del(&cb->ckpt_map_tree, &ckpt_map_node->patnode) != NCSCC_RC_SUCCESS) { - LOG_ER("cpd map node delete failed ckpt_name:%s",ckpt_map_node->ckpt_name.value); + LOG_ER("cpd map node delete failed ckpt_name:%s",ckpt_map_node->ckpt_name); rc = NCSCC_RC_FAILURE; } /* Free the Client Node */ - if (ckpt_map_node) + if (ckpt_map_node) { m_MMGR_FREE_CPD_CKPT_MAP_INFO(ckpt_map_node); + } + TRACE_LEAVE(); return rc; } @@ -627,9 +628,7 @@ uint32_t cpd_ckpt_map_node_delete(CPD_CB void cpd_ckpt_map_tree_cleanup(CPD_CB *cb) { CPD_CKPT_MAP_INFO *ckpt_map_node; - SaNameT name; - - memset(&name, 0, sizeof(SaNameT)); + SaConstStringT name = NULL; /* Get the First Node */ ckpt_map_node = (CPD_CKPT_MAP_INFO *)ncs_patricia_tree_getnext(&cb->ckpt_map_tree, (uint8_t *)&name); @@ -1179,7 +1178,7 @@ uint32_t cpd_process_cpnd_del(CPD_CB *cb } if (ckpt_node->dest_cnt == 0) { - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckpt_node->ckpt_name, &map_info); + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, ckpt_node->ckpt_name, &map_info); if (map_info) { cpd_ckpt_map_node_delete(cb, map_info); } diff --git a/osaf/services/saf/cpsv/cpd/cpd_evt.c b/osaf/services/saf/cpsv/cpd/cpd_evt.c --- a/osaf/services/saf/cpsv/cpd/cpd_evt.c +++ b/osaf/services/saf/cpsv/cpd/cpd_evt.c @@ -26,6 +26,7 @@ #include "cpd.h" #include "immutil.h" +#include "cpd_imm.h" uint32_t cpd_evt_proc_cb_dump(CPD_CB *cb); static uint32_t cpd_evt_proc_ckpt_create(CPD_CB *cb, CPD_EVT *evt, CPSV_SEND_INFO *sinfo); @@ -41,6 +42,7 @@ static uint32_t cpd_evt_proc_ckpt_destro static uint32_t cpd_evt_proc_ckpt_destroy_byname(CPD_CB *cb, CPD_EVT *evt, CPSV_SEND_INFO *sinfo); static uint32_t cpd_evt_proc_timer_expiry(CPD_CB *cb, CPD_EVT *evt); static uint32_t cpd_evt_proc_mds_evt(CPD_CB *cb, CPD_EVT *evt); +static void cpd_evt_free(CPSV_EVT *evt); static uint32_t cpd_evt_mds_quiesced_ack_rsp(CPD_CB *cb, CPD_EVT *evt, CPSV_SEND_INFO *sinfo); static uint32_t cpd_evt_proc_ckpt_info_upd(CPD_CB *cb, CPD_EVT *evt, CPSV_SEND_INFO *sinfo); @@ -150,7 +152,7 @@ void cpd_process_evt(CPSV_EVT *evt) ncshm_give_hdl(cb_hdl); /* Free the Event */ - m_MMGR_FREE_CPSV_EVT(evt, NCS_SERVICE_ID_CPD); + cpd_evt_free(evt); TRACE_LEAVE(); return; } @@ -177,6 +179,7 @@ static uint32_t cpd_evt_proc_ckpt_create CPD_CKPT_MAP_INFO *map_info = NULL; CPSV_ND2D_CKPT_CREATE *ckpt_create = &evt->info.ckpt_create; bool is_first_rep = false, is_new_noncol = false; + SaConstStringT ckpt_name = osaf_extended_name_borrow(&ckpt_create->ckpt_name); TRACE_ENTER(); @@ -187,21 +190,20 @@ static uint32_t cpd_evt_proc_ckpt_create goto send_rsp; } - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckpt_create->ckpt_name, &map_info); + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, ckpt_name, &map_info); if (map_info) { - /* ckpt_create->ckpt_name.length = m_NCS_OS_NTOHS(ckpt_create->ckpt_name.length); */ if (m_CPA_VER_IS_ABOVE_B_1_1(&ckpt_create->client_version)) { if ((ckpt_create->ckpt_flags & SA_CKPT_CHECKPOINT_CREATE) && (!m_COMPARE_CREATE_ATTR(&ckpt_create->attributes, &map_info->attributes))) { - TRACE_4("cpd ckpt create failure ckpt name,dest :%s,%"PRIu64,ckpt_create->ckpt_name.value, sinfo->dest); + TRACE_4("cpd ckpt create failure ckpt name,dest :%s,%"PRIu64, ckpt_name, sinfo->dest); rc = SA_AIS_ERR_EXIST; goto send_rsp; } } else { if ((ckpt_create->ckpt_flags & SA_CKPT_CHECKPOINT_CREATE) && (!m_COMPARE_CREATE_ATTR_B_1_1(&ckpt_create->attributes, &map_info->attributes))) { - TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64,ckpt_create->ckpt_name.value, sinfo->dest); + TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64, ckpt_name, sinfo->dest); rc = SA_AIS_ERR_EXIST; goto send_rsp; } @@ -209,13 +211,12 @@ static uint32_t cpd_evt_proc_ckpt_create } else { SaCkptCheckpointCreationAttributesT ckpt_local_attrib; memset(&ckpt_local_attrib, 0, sizeof(SaCkptCheckpointCreationAttributesT)); - /* ckpt_create->ckpt_name.length = m_NCS_OS_NTOHS(ckpt_create->ckpt_name.length); */ is_first_rep = true; if (m_CPA_VER_IS_ABOVE_B_1_1(&ckpt_create->client_version)) { if (!(ckpt_create->ckpt_flags & SA_CKPT_CHECKPOINT_CREATE) && (m_COMPARE_CREATE_ATTR(&ckpt_create->attributes, &ckpt_local_attrib))) { - TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64,ckpt_create->ckpt_name.value, sinfo->dest); + TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64, ckpt_name, sinfo->dest); rc = SA_AIS_ERR_NOT_EXIST; goto send_rsp; } @@ -223,7 +224,7 @@ static uint32_t cpd_evt_proc_ckpt_create if (!(ckpt_create->ckpt_flags & SA_CKPT_CHECKPOINT_CREATE) && (m_COMPARE_CREATE_ATTR_B_1_1(&ckpt_create->attributes, &ckpt_local_attrib))) { - TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64,ckpt_create->ckpt_name.value, sinfo->dest); + TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64, ckpt_name, sinfo->dest); rc = SA_AIS_ERR_NOT_EXIST; goto send_rsp; } @@ -233,12 +234,12 @@ static uint32_t cpd_evt_proc_ckpt_create /* Add/Update the entries in ckpt DB, ckpt_map DB, ckpt_node DB */ proc_rc = cpd_ckpt_db_entry_update(cb, &sinfo->dest, ckpt_create, &ckpt_node, &map_info); if (proc_rc == NCSCC_RC_OUT_OF_MEM) { - TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64,ckpt_create->ckpt_name.value, sinfo->dest); + TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64, ckpt_name, sinfo->dest); rc = SA_AIS_ERR_NO_MEMORY; goto send_rsp; } else if (proc_rc != NCSCC_RC_SUCCESS) { - TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64,ckpt_create->ckpt_name.value, sinfo->dest); + TRACE_4("cpd ckpt create failure ckpt name,dest : %s, %"PRIu64, ckpt_name, sinfo->dest); rc = SA_AIS_ERR_LIBRARY; goto send_rsp; } @@ -273,9 +274,9 @@ static uint32_t cpd_evt_proc_ckpt_create && (!m_CPND_IS_ON_SCXB(cb->cpd_self_id, cpd_get_slot_sub_id_from_mds_dest(sinfo->dest)))) { proc_rc = cpd_noncolloc_ckpt_rep_create(cb, &cb->loc_cpnd_dest, ckpt_node, map_info); if (proc_rc == NCSCC_RC_SUCCESS) - TRACE_1("cpd non coloc ckpt create success ckpt name %s, loc_cpnd_dest:%"PRIu64,ckpt_create->ckpt_name.value, cb->loc_cpnd_dest); + TRACE_1("cpd non coloc ckpt create success ckpt name %s, loc_cpnd_dest:%"PRIu64, ckpt_name, cb->loc_cpnd_dest); else - TRACE_2("cpd non coloc ckpt create failure ckpt name %s, loc_cpnd_dest:%"PRIu64,ckpt_create->ckpt_name.value, cb->loc_cpnd_dest); + TRACE_2("cpd non coloc ckpt create failure ckpt name %s, loc_cpnd_dest:%"PRIu64, ckpt_name, cb->loc_cpnd_dest); } /* if(cb->is_rem_cpnd_up && (cpd_get_slot_sub_id_from_mds_dest(sinfo->dest) != ckpt_node->ckpt_on_scxb2)) */ @@ -283,9 +284,9 @@ static uint32_t cpd_evt_proc_ckpt_create && (!m_CPND_IS_ON_SCXB(cb->cpd_remote_id, cpd_get_slot_sub_id_from_mds_dest(sinfo->dest)))) { proc_rc = cpd_noncolloc_ckpt_rep_create(cb, &cb->rem_cpnd_dest, ckpt_node, map_info); if (proc_rc == NCSCC_RC_SUCCESS) - TRACE_1("cpd non coloc ckpt create success ckpt_name %s and rem_cpnd %"PRIu64,ckpt_create->ckpt_name.value,cb->rem_cpnd_dest); + TRACE_1("cpd non coloc ckpt create success ckpt_name %s and rem_cpnd %"PRIu64, ckpt_name,cb->rem_cpnd_dest); else - TRACE_4("cpd non coloc ckpt create failure ckpt_name %s and rem_cpnd %"PRIu64,ckpt_create->ckpt_name.value,cb->rem_cpnd_dest); + TRACE_4("cpd non coloc ckpt create failure ckpt_name %s and rem_cpnd %"PRIu64, ckpt_name,cb->rem_cpnd_dest); } /* ND on SCXB has created the same checkpoint, so is_new_noncol must be made to true */ is_new_noncol = true; @@ -346,7 +347,7 @@ static uint32_t cpd_evt_proc_ckpt_create m_MMGR_FREE_CPSV_CPND_DEST_INFO(send_evt.info.cpnd.info.ckpt_info.dest_list); if (proc_rc != NCSCC_RC_SUCCESS) - TRACE_4("cpd ckpt create failure for ckpt_name :%s,dest :%"PRIu64,ckpt_create->ckpt_name.value,sinfo->dest); + TRACE_4("cpd ckpt create failure for ckpt_name :%s,dest :%"PRIu64, ckpt_name,sinfo->dest); if ((proc_rc != NCSCC_RC_SUCCESS) || (rc != SA_AIS_OK)) return proc_rc; @@ -554,7 +555,7 @@ static uint32_t cpd_evt_proc_ckpt_unlink { CPD_CKPT_INFO_NODE *ckpt_node = NULL; CPD_CKPT_MAP_INFO *map_info = NULL; - SaNameT *ckpt_name = &evt->info.ckpt_ulink.ckpt_name; + SaConstStringT ckpt_name = osaf_extended_name_borrow(&evt->info.ckpt_ulink.ckpt_name); SaAisErrorT rc = SA_AIS_OK; SaAisErrorT proc_rc = SA_AIS_OK; CPSV_EVT send_evt; @@ -585,15 +586,11 @@ static uint32_t cpd_evt_proc_ckpt_unlink send_evt.info.cpnd.info.ckpt_ulink.ckpt_id = ckpt_node->ckpt_id; proc_rc = cpd_mds_bcast_send(cb, &send_evt, NCSMDS_SVC_ID_CPND); - TRACE_2("cpd evt unlink success for ckpt_name:%s,dest :%"PRIu64,evt->info.ckpt_ulink.ckpt_name.value, sinfo->dest); + TRACE_2("cpd evt unlink success for ckpt_name:%s,dest :%"PRIu64, ckpt_name, sinfo->dest); /* delete imm ckpt runtime object */ - if (cb->ha_state == SA_AMF_HA_ACTIVE) { - if (immutil_saImmOiRtObjectDelete(cb->immOiHandle, &ckpt_node->ckpt_name) != SA_AIS_OK) { - TRACE_4("Deleting run time object %s failed",ckpt_node->ckpt_name.value); - /* Free the Client Node */ - } - } + if (cb->ha_state == SA_AMF_HA_ACTIVE) + delete_runtime_ckpt_object(ckpt_node, cb->immOiHandle); } memset(&send_evt, 0, sizeof(CPSV_EVT)); @@ -840,7 +837,7 @@ static uint32_t cpd_evt_proc_ckpt_destro static uint32_t cpd_evt_proc_ckpt_destroy_byname(CPD_CB *cb, CPD_EVT *evt, CPSV_SEND_INFO *sinfo) { CPD_CKPT_MAP_INFO *map_info = NULL; - SaNameT *ckpt_name = &evt->info.ckpt_destroy_byname.ckpt_name; + SaConstStringT ckpt_name = osaf_extended_name_borrow(&evt->info.ckpt_destroy_byname.ckpt_name); CPD_EVT destroy_evt; CPSV_EVT send_evt; uint32_t proc_rc = NCSCC_RC_SUCCESS; @@ -1202,12 +1199,10 @@ static uint32_t cpd_evt_proc_mds_evt(CPD CPD_CKPT_MAP_INFO *map_info = NULL; SaCkptCheckpointHandleT prev_ckpt_hdl; bool flag = false; - SaNameT ckpt_name; uint32_t phy_slot_sub_slot; bool add_flag = true; TRACE_ENTER(); - memset(&ckpt_name, 0, sizeof(SaNameT)); mds_info = &evt->info.mds_info; memset(&phy_slot_sub_slot, 0, sizeof(uint32_t)); @@ -1263,7 +1258,7 @@ static uint32_t cpd_evt_proc_mds_evt(CPD } if (flag == false) { cpd_ckpt_map_node_get(&cb->ckpt_map_tree, - &ckpt_node->ckpt_name, &map_info); + ckpt_node->ckpt_name, &map_info); if (map_info) { cpd_noncolloc_ckpt_rep_create(cb, &cb-> @@ -1325,7 +1320,7 @@ static uint32_t cpd_evt_proc_mds_evt(CPD } if (flag == false) { cpd_ckpt_map_node_get(&cb->ckpt_map_tree, - &ckpt_node->ckpt_name, &map_info); + ckpt_node->ckpt_name, &map_info); if (map_info) { cpd_noncolloc_ckpt_rep_create(cb, &cb-> @@ -1362,7 +1357,7 @@ static uint32_t cpd_evt_proc_mds_evt(CPD } if (flag == false) { cpd_ckpt_map_node_get(&cb->ckpt_map_tree, - &ckpt_node->ckpt_name, &map_info); + ckpt_node->ckpt_name, &map_info); if (map_info) { cpd_noncolloc_ckpt_rep_create(cb, &cb-> @@ -1476,6 +1471,39 @@ static uint32_t cpd_evt_proc_mds_evt(CPD } /**************************************************************************** + * Name : cpd_evt_free + * + * Description : Function to free data allocated for event + * + * Arguments : CPSV_EVT *evt - Received Event structure + * + * Return Values : None. + * + * Notes : None. + *****************************************************************************/ +static void cpd_evt_free(CPSV_EVT *evt) +{ + switch (evt->info.cpd.type) { + case CPD_EVT_ND2D_CKPT_CREATE: + if (osaf_is_an_extended_name(&evt->info.cpd.info.ckpt_create.ckpt_name)) + free((void *)osaf_extended_name_borrow(&evt->info.cpd.info.ckpt_create.ckpt_name)); + break; + case CPD_EVT_ND2D_CKPT_UNLINK: + if (osaf_is_an_extended_name(&evt->info.cpd.info.ckpt_ulink.ckpt_name)) + free((void *)osaf_extended_name_borrow(&evt->info.cpd.info.ckpt_ulink.ckpt_name)); + break; + case CPD_EVT_ND2D_CKPT_DESTROY_BYNAME: + if (osaf_is_an_extended_name(&evt->info.cpd.info.ckpt_destroy_byname.ckpt_name)) + free((void *)osaf_extended_name_borrow(&evt->info.cpd.info.ckpt_destroy_byname.ckpt_name)); + break; + default: + break; + } + + m_MMGR_FREE_CPSV_EVT(evt, NCS_SERVICE_ID_CPD); +} + +/**************************************************************************** * Name : cpd_evt_proc_ckpt_info_upd * * Description : Function to process update ckpt info receiving from CPND. @@ -1496,6 +1524,7 @@ static uint32_t cpd_evt_proc_ckpt_info_u CPD_CKPT_MAP_INFO *map_info = NULL; CPSV_ND2D_CKPT_INFO_UPD *ckpt_info = &evt->info.ckpt_info; bool is_first_rep = false, is_new_noncol = false; + SaConstStringT ckpt_name = osaf_extended_name_borrow(&ckpt_info->ckpt_name); TRACE_ENTER(); @@ -1507,12 +1536,12 @@ static uint32_t cpd_evt_proc_ckpt_info_u } /* Verify if the checkpoint exist in the database */ - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckpt_info->ckpt_name, &map_info); + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, ckpt_name, &map_info); if (map_info) { if (!m_COMPARE_CREATE_ATTR(&ckpt_info->attributes, &map_info->attributes)) { /* TODO: There is difference in checkpoint attribute betweent replicas. * This should never happen */ - LOG_ER("cpd ckpt update - Difference in checkpoint attribute, ckpt name,dest :%s,%"PRIu64,ckpt_info->ckpt_name.value, sinfo->dest); + LOG_ER("cpd ckpt update - Difference in checkpoint attribute, ckpt name,dest :%s,%"PRIu64 ,ckpt_name, sinfo->dest); rc = SA_AIS_ERR_EXIST; goto send_rsp; } @@ -1523,11 +1552,11 @@ static uint32_t cpd_evt_proc_ckpt_info_u /* Add/Update the entries in ckpt DB, ckpt_map DB, ckpt_node DB */ proc_rc = cpd_ckpt_db_update_after_headless(cb, &sinfo->dest, ckpt_info, &ckpt_node, &map_info); if (proc_rc == NCSCC_RC_OUT_OF_MEM) { - LOG_ER("cpd ckpt update failure ckpt name,dest : %s, %"PRIu64,ckpt_info->ckpt_name.value, sinfo->dest); + LOG_ER("cpd ckpt update failure ckpt name,dest : %s, %"PRIu64, ckpt_name, sinfo->dest); rc = SA_AIS_ERR_NO_MEMORY; goto send_rsp; } else if (proc_rc != NCSCC_RC_SUCCESS) { - LOG_ER("cpd ckpt update failure ckpt name,dest : %s, %"PRIu64,ckpt_info->ckpt_name.value, sinfo->dest); + LOG_ER("cpd ckpt update failure ckpt name,dest : %s, %"PRIu64, ckpt_name, sinfo->dest); rc = SA_AIS_ERR_LIBRARY; goto send_rsp; } @@ -1570,18 +1599,18 @@ static uint32_t cpd_evt_proc_ckpt_info_u && (!m_CPND_IS_ON_SCXB(cb->cpd_self_id, cpd_get_slot_sub_id_from_mds_dest(sinfo->dest)))) { proc_rc = cpd_noncolloc_ckpt_rep_create(cb, &cb->loc_cpnd_dest, ckpt_node, map_info); if (proc_rc == NCSCC_RC_SUCCESS) - LOG_IN("cpd non coloc ckpt update success ckpt name %s, loc_cpnd_dest:%"PRIu64,ckpt_info->ckpt_name.value, cb->loc_cpnd_dest); + LOG_IN("cpd non coloc ckpt update success ckpt name %s, loc_cpnd_dest:%"PRIu64, ckpt_name, cb->loc_cpnd_dest); else - LOG_ER("cpd non coloc ckpt update failure ckpt name %s, loc_cpnd_dest:%"PRIu64,ckpt_info->ckpt_name.value, cb->loc_cpnd_dest); + LOG_ER("cpd non coloc ckpt update failure ckpt name %s, loc_cpnd_dest:%"PRIu64, ckpt_name, cb->loc_cpnd_dest); } /* if(cb->is_rem_cpnd_up && (cpd_get_slot_sub_id_from_mds_dest(sinfo->dest) != ckpt_node->ckpt_on_scxb2)) */ if (cb->is_rem_cpnd_up && (!m_CPND_IS_ON_SCXB(cb->cpd_remote_id, cpd_get_slot_sub_id_from_mds_dest(sinfo->dest)))) { proc_rc = cpd_noncolloc_ckpt_rep_create(cb, &cb->rem_cpnd_dest, ckpt_node, map_info); if (proc_rc == NCSCC_RC_SUCCESS) - LOG_IN("cpd non coloc ckpt update success ckpt_name %s and rem_cpnd %"PRIu64,ckpt_info->ckpt_name.value,cb->rem_cpnd_dest); + LOG_IN("cpd non coloc ckpt update success ckpt_name %s and rem_cpnd %"PRIu64, ckpt_name,cb->rem_cpnd_dest); else - LOG_ER("cpd non coloc ckpt update failure ckpt_name %s and rem_cpnd %"PRIu64,ckpt_info->ckpt_name.value,cb->rem_cpnd_dest); + LOG_ER("cpd non coloc ckpt update failure ckpt_name %s and rem_cpnd %"PRIu64, ckpt_name,cb->rem_cpnd_dest); } /* ND on SCXB has created the same checkpoint, so is_new_noncol must be made to true */ is_new_noncol = true; diff --git a/osaf/services/saf/cpsv/cpd/cpd_imm.c b/osaf/services/saf/cpsv/cpd/cpd_imm.c --- a/osaf/services/saf/cpsv/cpd/cpd_imm.c +++ b/osaf/services/saf/cpsv/cpd/cpd_imm.c @@ -41,7 +41,7 @@ static SaAisErrorT cpd_saImmOiRtAttrUpda const SaNameT *objectName, const SaImmAttrNameT *attributeNames); static uint32_t cpd_fetch_used_size(CPD_CKPT_INFO_NODE *ckpt_node, CPD_CB *cb); static uint32_t cpd_fetch_num_sections(CPD_CKPT_INFO_NODE *ckpt_node, CPD_CB *cb); -static void ckpt_replica_extract_node_name(SaNameT *nodeName, char *src); +static void extract_node_name_from_replica_name(const char *replica_name, const char *ckpt_name, char **node_name); SaImmOiCallbacksT_2 oi_cbks = { .saImmOiAdminOperationCallback = NULL, @@ -83,17 +83,10 @@ static SaAisErrorT cpd_saImmOiRtAttrUpda const SaImmAttrModificationT_2 *attrMods[10]; CPD_CKPT_REPLOC_INFO *rep_info = NULL; CPD_REP_KEY_INFO key_info; - SaNameT replica_dn, ckptName, clm_node_name, nodeName; - char *ckpt_name, *node_name; + char *replica_dn = NULL, *ckpt_name = NULL, *node_name = NULL; + SaConstStringT object_name; SaAisErrorT rc = SA_AIS_ERR_FAILED_OPERATION; - TRACE_ENTER(); - memset(&replica_dn, 0, sizeof(SaNameT)); - memset(&ckptName, 0, sizeof(ckptName)); - memset(&nodeName, 0, sizeof(SaNameT)); - strcpy((char *)ckptName.value, (char *)objectName->value); - ckptName.length = objectName->length; - SaImmAttrValueT ckptSizeUpdateValue[] = { &ckpt_size }; SaImmAttrValueT ckptUsedSizeUpdateValue[] = { &ckpt_used_size }; SaImmAttrValueT ckptRetDurationUpdateValue[] = { &ckpt_ret_duration }; @@ -103,8 +96,9 @@ static SaAisErrorT cpd_saImmOiRtAttrUpda SaImmAttrValueT ckptNumReplicasUpdateValue[] = { &num_replicas }; SaImmAttrValueT ckptNumSectionsUpdateValue[] = { &num_sections }; SaImmAttrValueT ckptNumCorruptSectionsUpdateValue[] = { &num_corrupt_sections }; + SaImmAttrValueT ckptReplicaIsActiveUpdateValue[] = { &replicaIsActive }; - SaImmAttrValueT ckptReplicaIsActiveUpdateValue[] = { &replicaIsActive }; + TRACE_ENTER(); /* Get CPD CB Handle. */ m_CPD_RETRIEVE_CB(cb); @@ -112,47 +106,50 @@ static SaAisErrorT cpd_saImmOiRtAttrUpda return SA_AIS_ERR_FAILED_OPERATION; } - if (strncmp((char *)objectName->value, "safReplica=", 11) == 0) { - ckpt_name = strchr((char *)objectName->value, ','); - if (ckpt_name) { - ckpt_name++; /*escaping first ',' of the associated class DN name */ - ckpt_name = strchr((char *)ckpt_name, ','); - if (ckpt_name) { - ckpt_name++; - memset(&ckptName, 0, sizeof(ckptName)); - strcpy((char *)ckptName.value, ckpt_name); - ckptName.length = strlen(ckpt_name); + object_name = osaf_extended_name_borrow(objectName); + + /* Extract ckpt_name and node_name */ + if (strncmp(object_name, "safReplica=", 11) == 0) { + /* Extract ckpt_name */ + char *p_char = strchr(object_name, ','); + if (p_char) { + p_char++; /* escaping first ',' of the associated class DN name */ + p_char = strchr(p_char, ','); + if (p_char) { + p_char++; + ckpt_name = malloc(strlen(p_char) + 1); /*1 extra byte for \0 char*/ + strcpy(ckpt_name, p_char); } } - node_name = (char*)malloc((objectName->length-ckptName.length)*sizeof(char)); - memset(node_name,0,(objectName->length-ckptName.length)); - node_name = (char*)memcpy(node_name,(char*)objectName->value,objectName->length-ckptName.length-1); - ckpt_replica_extract_node_name(&nodeName, node_name); - free(node_name); + /* Extract node_name */ + extract_node_name_from_replica_name(object_name, ckpt_name, &node_name); + } else { + ckpt_name = strdup(object_name); } - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckptName, &map_info); + TRACE_4("ckpt_name: %s", ckpt_name); + TRACE_4("node_name: %s", node_name); + + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, ckpt_name, &map_info); if (map_info) { cpd_ckpt_node_get(&cb->ckpt_tree, &map_info->ckpt_id, &ckpt_node); if (ckpt_node) { - key_info.ckpt_name = ckpt_node->ckpt_name; - key_info.node_name = nodeName; - cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, &rep_info); + key_info.ckpt_name = ckpt_node->ckpt_name; + key_info.node_name = node_name; + cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, &rep_info); if (rep_info) { - clm_node_name.length = m_NCS_OS_NTOHS(rep_info->rep_key.node_name.length); - strncpy((char *)clm_node_name.value, (char *)rep_info->rep_key.node_name.value, - clm_node_name.length); /* escapes rdn's ',' with '\' */ - cpd_create_association_class_dn(&clm_node_name, - &rep_info->rep_key.ckpt_name, "safReplica", + cpd_create_association_class_dn(rep_info->rep_key.node_name, + rep_info->rep_key.ckpt_name, "safReplica", &replica_dn); - if (m_CMP_HORDER_SANAMET(*objectName, replica_dn) == 0) { + TRACE("replica_dn: %s", replica_dn); + if (strcmp(object_name, replica_dn) == 0){ /* Walk through the attribute Name list */ while ((attributeName = attributeNames[i]) != NULL) { @@ -189,7 +186,7 @@ static SaAisErrorT cpd_saImmOiRtAttrUpda } - if (m_CMP_HORDER_SANAMET(*objectName, ckpt_node->ckpt_name) == 0) { + if (strcmp(object_name, ckpt_node->ckpt_name) == 0){ /* Walk through the attribute Name list */ while ((attributeName = attributeNames[i]) != NULL) { if (strcmp(attributeName, "saCkptCheckpointSize") == 0) { @@ -313,6 +310,15 @@ static SaAisErrorT cpd_saImmOiRtAttrUpda } done: + if (ckpt_name != NULL) + free(ckpt_name); + + if (node_name != NULL) + free(node_name); + + if (replica_dn != NULL) + free(replica_dn); + ncshm_give_hdl(cb->cpd_hdl); TRACE_LEAVE(); return rc; @@ -337,13 +343,16 @@ SaAisErrorT create_runtime_replica_objec SaImmAttrValuesT_2 replica_dn; SaAisErrorT rc = SA_AIS_OK; const SaImmAttrValuesT_2 *attrValues[2]; + char* replica_name = NULL; SaNameT replica_rdn; SaNameT ckpt_name; memset(&ckpt_name, 0, sizeof(SaNameT)); TRACE_ENTER(); /* escapes rdn's ',' with '\' */ - cpd_create_association_class_dn(&ckpt_reploc_node->rep_key.node_name, NULL, "safReplica", &replica_rdn); + cpd_create_association_class_dn(ckpt_reploc_node->rep_key.node_name, NULL, "safReplica", &replica_name); + + osaf_extended_name_lend(replica_name, &replica_rdn); dn[0] = &replica_rdn; replica_dn.attrName = "safReplica"; @@ -354,15 +363,52 @@ SaAisErrorT create_runtime_replica_objec attrValues[0] = &replica_dn; attrValues[1] = NULL; - strcpy((char *)ckpt_name.value, (char *)ckpt_reploc_node->rep_key.ckpt_name.value); - ckpt_name.length = strlen((char *)ckpt_name.value); + osaf_extended_name_lend(ckpt_reploc_node->rep_key.ckpt_name, &ckpt_name); rc = immutil_saImmOiRtObjectCreate_2(immOiHandle, "SaCkptReplica", &ckpt_name, attrValues); + if (rc != SA_AIS_OK) + LOG_ER("create_runtime_replica_object - saImmOiRtObjectCreate_2 failed with error = %u", rc); + + free(replica_name); TRACE_LEAVE2("Ret val %d",rc); return rc; } /**************************************************************************** + * Name : delete_runtime_replica_object + * + * Description : This function is invoked to delete a replica runtime object + * + * Arguments : ckpt_reploc_node - Checkpoint reploc node + * immOiHandle - IMM handle + * + * Return Values : SaAisErrorT + * + * Notes : None. + *****************************************************************************/ +SaAisErrorT delete_runtime_replica_object(CPD_CKPT_REPLOC_INFO *ckpt_reploc_node, SaImmOiHandleT immOiHandle) +{ + SaNameT replica_name; + char* replica_dn = NULL; + SaAisErrorT rc; + + TRACE_ENTER(); + + cpd_create_association_class_dn(ckpt_reploc_node->rep_key.node_name, + ckpt_reploc_node->rep_key.ckpt_name, "safReplica", &replica_dn); + + osaf_extended_name_lend(replica_dn, &replica_name); + rc = immutil_saImmOiRtObjectDelete(immOiHandle, &replica_name); + if (rc != SA_AIS_OK) { + LOG_ER("Deleting run time object %s Failed - rc = %d",replica_dn, rc); + } + + free(replica_dn); + + TRACE_LEAVE(); + return rc; +} +/**************************************************************************** * Name : create_runtime_ckpt_object * * Description : This function is invoked to create a checkpoint runtime object @@ -379,8 +425,8 @@ SaAisErrorT create_runtime_ckpt_object(C { SaNameT parentName; SaAisErrorT rc = SA_AIS_OK; - char *dndup = strdup((char *)ckpt_node->ckpt_name.value); - char *parent_name = strchr((char *)ckpt_node->ckpt_name.value, ','); + char *dndup = strdup(ckpt_node->ckpt_name); + char *parent_name = strchr(ckpt_node->ckpt_name, ','); char *rdnstr; const SaImmAttrValuesT_2 *attrValues[7]; SaImmAttrValueT dn[1], create_time[1], creat_flags[1], max_sections[1], @@ -395,10 +441,10 @@ SaAisErrorT create_runtime_ckpt_object(C if (parent_name != NULL) { rdnstr = strtok(dndup, ","); parent_name++; - strcpy((char *)parentName.value, parent_name); - parentName.length = strlen((char *)parent_name); + + osaf_extended_name_lend(parent_name, &parentName); } else - rdnstr = (char *)ckpt_node->ckpt_name.value; + rdnstr = (char *)ckpt_node->ckpt_name; dn[0] = &rdnstr; create_time_sec = ckpt_node->create_time * SA_TIME_ONE_SECOND; @@ -448,7 +494,7 @@ SaAisErrorT create_runtime_ckpt_object(C rc = immutil_saImmOiRtObjectCreate_2(immOiHandle, "SaCkptCheckpoint", &parentName, attrValues); if (rc != SA_AIS_OK) - LOG_ER("saImmOiRtObjectCreate_2 failed with error = %u", rc); + LOG_ER("create_runtime_ckpt_object - saImmOiRtObjectCreate_2 failed with error = %u", rc); free(dndup); TRACE_LEAVE2("Ret val %d",rc); @@ -457,6 +503,32 @@ SaAisErrorT create_runtime_ckpt_object(C } /* End create_runtime_object() */ /**************************************************************************** + * Name : delete_runtime_ckpt_object + * + * Description : This function is invoked to delete a checkpoint runtime object + * + * Arguments : ckpt_node - Checkpoint Node + * immOiHandle - IMM handle + * + * Return Values : SaAisErrorT + * + * Notes : None. + *****************************************************************************/ +SaAisErrorT delete_runtime_ckpt_object(CPD_CKPT_INFO_NODE *ckpt_node, SaImmOiHandleT immOiHandle) +{ + SaNameT ckpt_name; + SaAisErrorT rc; + + osaf_extended_name_lend(ckpt_node->ckpt_name, &ckpt_name); + + rc = immutil_saImmOiRtObjectDelete(immOiHandle, &ckpt_name); + if (rc != SA_AIS_OK) + LOG_ER("Deleting run time object %s failed - rc = %d", ckpt_node->ckpt_name, rc); + + return rc; +} + +/**************************************************************************** * Name : cpd_imm_init * * Description : Initialize the OI and get selection object @@ -532,31 +604,60 @@ void cpd_imm_declare_implementer(SaImmOi TRACE_LEAVE(); } +/**************************************************************************** + * Name : cpd_create_association_class_dn + * + * Description : This function is invoked to create a + * dn = rdn_tag + '=' + child_dn + parent_dn + * User must free() the dn after using + * + * Arguments : + * + * Return Values : SaAisErrorT + * + * Notes : None. + *****************************************************************************/ +void cpd_create_association_class_dn(const char *child_dn, const char *parent_dn, + const char *rdn_tag, char **dn) +{ + int i; + size_t child_dn_length = 0; + size_t parent_dn_length = 0; + size_t rdn_tag_length = 0; + size_t class_dn_length = 0; -void cpd_create_association_class_dn(const SaNameT *child_dn, const SaNameT *parent_dn, - const char *rdn_tag, SaNameT *dn) -{ - char *p = (char *)dn->value; - int i; + if (child_dn != NULL) + child_dn_length = strlen(child_dn); - memset(dn, 0, sizeof(SaNameT)); + if (parent_dn != NULL) + parent_dn_length = strlen(parent_dn); - p += sprintf((char *)dn->value, "%s=", rdn_tag); + if (rdn_tag != NULL) + rdn_tag_length = strlen(rdn_tag); + + class_dn_length = child_dn_length + parent_dn_length + rdn_tag_length + 10; + + char *class_dn = malloc(class_dn_length); + memset(class_dn, 0, class_dn_length); + + char *p = class_dn; + + p += sprintf(class_dn, "%s=", rdn_tag); /* copy child DN and escape commas */ - for (i = 0; i < child_dn->length; i++) { - if (child_dn->value[i] == ',') + for (i = 0; i < child_dn_length; i++) { + if (child_dn[i] == ',') *p++ = 0x5c; /* backslash */ - *p++ = child_dn->value[i]; + *p++ = child_dn[i]; } if (parent_dn != NULL) { *p++ = ','; - strcpy(p, (char *)parent_dn->value); + strcpy(p, parent_dn); } - dn->length = strlen((char *)dn->value); + *dn = class_dn; } static uint32_t cpd_fetch_used_size(CPD_CKPT_INFO_NODE *ckpt_node, CPD_CB *cb) @@ -648,30 +749,41 @@ static uint32_t cpd_fetch_num_sections(C return rc; } +/**************************************************************************** + * Name : extract_node_name_from_replica_name + * + * Description : This function extract node_name without '/' from replica + * name. The user must free() the node_name after using + * + * Arguments : + * + * Return Values : SaAisErrorT + * + * Notes : None. + *****************************************************************************/ +static void extract_node_name_from_replica_name(const char *replica_name, const char *ckpt_name, char **node_name) +{ + char *dest = NULL; + SaUint32T i = 0, k = 0; + + if (replica_name == NULL || ckpt_name == NULL) + return; + /* Remove slash '/' , the ',' right before the ckpt_name and ckpt_name */ + int node_name_length = strlen(replica_name) - strlen(ckpt_name) - strlen("safReplica=") - 1; + dest = malloc(node_name_length); + memset(dest, 0, node_name_length); -static void ckpt_replica_extract_node_name(SaNameT *nodeName, char *src) -{ - char *dest = NULL, *dest_name; - SaUint32T len_src = 0; - SaUint32T i = 0, k = 0; + const char* src = replica_name + strlen("safReplica="); - len_src = strlen(src); - dest = (char *) malloc(sizeof(char) * len_src + 1); - memset(dest, 0, sizeof(char) * len_src + 1); - for (i = 0; i < len_src; i++) { + for (i = 0; i < node_name_length; i++) { if (src[i] != '\\') { dest[k] = src[i]; k++; } } - /* 11 is the length of "safReplica=" */ - dest_name = dest + 11; - strcpy((char*)nodeName->value, dest_name); - nodeName->length = strlen(dest_name); - - free(dest); + *node_name = dest; return; } @@ -780,8 +892,7 @@ SaAisErrorT cpd_clean_checkpoint_objects searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; searchParam.searchOneAttr.attrValue = &class_name; SaNameT root_name; - root_name.value[0] = '\0'; - root_name.length = 1; + osaf_extended_name_lend("\0", &root_name); rc = immutil_saImmOmSearchInitialize_2( immOmHandle, @@ -806,10 +917,10 @@ SaAisErrorT cpd_clean_checkpoint_objects /* Delete the runtime object and its children. */ rc = immutil_saImmOiRtObjectDelete(cb->immOiHandle, &object_name); if (rc == SA_AIS_OK) { - TRACE("Object \"%s\" deleted", (char *) object_name.value); + TRACE("Object \"%s\" deleted", (char *) osaf_extended_name_borrow(&object_name)); } else { LOG_ER("%s saImmOiRtObjectDelete for \"%s\" FAILED %d", - __FUNCTION__, (char *) object_name.value, rc); + __FUNCTION__, (char *) osaf_extended_name_borrow(&object_name), rc); } } @@ -866,8 +977,7 @@ SaUint32T cpd_get_scAbsenceAllowed_attr( char object_name_str[] = "opensafImm=opensafImm,safApp=safImmService"; SaNameT object_name; - strncpy((char *) object_name.value, object_name_str, SA_MAX_NAME_LENGTH); - object_name.length = strlen((char *) object_name.value) + 1; + osaf_extended_name_lend(object_name_str, &object_name); /* Save immutil settings and reconfigure */ struct ImmutilWrapperProfile tmp_immutilWrapperProfile; diff --git a/osaf/services/saf/cpsv/cpd/cpd_main.c b/osaf/services/saf/cpsv/cpd/cpd_main.c --- a/osaf/services/saf/cpsv/cpd/cpd_main.c +++ b/osaf/services/saf/cpsv/cpd/cpd_main.c @@ -15,6 +15,7 @@ * */ +#include <stdlib.h> #include <ncssysf_tsk.h> #include <logtrace.h> @@ -26,6 +27,12 @@ static int __init_cpd(void) { NCS_LIB_REQ_INFO lib_create; + /* Enable extended SaNameT */ + if (setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1) != 0) { + LOG_ER("Failed to set environment variable: SA_ENABLE_EXTENDED_NAMES"); + return m_LEAP_DBG_SINK(NCSCC_RC_FAILURE); + } + /* Init LIB_CREATE request for Server */ memset(&lib_create, 0, sizeof(lib_create)); lib_create.i_op = NCS_LIB_REQ_CREATE; diff --git a/osaf/services/saf/cpsv/cpd/cpd_mbcsv.c b/osaf/services/saf/cpsv/cpd/cpd_mbcsv.c --- a/osaf/services/saf/cpsv/cpd/cpd_mbcsv.c +++ b/osaf/services/saf/cpsv/cpd/cpd_mbcsv.c @@ -532,7 +532,7 @@ uint32_t cpd_mbcsv_enc_msg_resp(CPD_CB * nref_info = ckpt_node->node_list; /* Populate the A2S_CKPT_CREATE structure */ - ckpt_create.ckpt_name = ckpt_node->ckpt_name; + osaf_extended_name_lend(ckpt_node->ckpt_name, &ckpt_create.ckpt_name); ckpt_create.ckpt_id = ckpt_node->ckpt_id; ckpt_create.ckpt_attrib = ckpt_node->attributes; ckpt_create.is_unlink_set = ckpt_node->is_unlink_set; @@ -790,6 +790,10 @@ uint32_t cpd_mbcsv_dec_async_update(CPD_ TRACE_4("cpd standby create evt failed"); goto end; } + + if (osaf_is_an_extended_name(&ckpt_create->ckpt_name)) + free((void *)osaf_extended_name_borrow(&ckpt_create->ckpt_name)); + if (ckpt_create->dest_list) m_MMGR_FREE_CPSV_SYS_MEMORY(ckpt_create->dest_list); m_MMGR_FREE_CPD_A2S_CKPT_CREATE(ckpt_create); @@ -812,6 +816,9 @@ uint32_t cpd_mbcsv_dec_async_update(CPD_ goto end; } + if (osaf_is_an_extended_name(&ckpt_unlink->ckpt_name)) + free((void *)osaf_extended_name_borrow(&ckpt_unlink->ckpt_name)); + break; case CPD_A2S_MSG_CKPT_RDSET: 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 @@ -44,10 +44,8 @@ uint32_t cpd_noncolloc_ckpt_rep_create(C CPSV_EVT send_evt; uint32_t rc; CPSV_D2ND_CKPT_INFO *d2nd_info = NULL; - SaNameT ckpt_name; TRACE_ENTER(); - memset(&ckpt_name, 0, sizeof(SaNameT)); /* Update the database with new replica */ rc = cpd_ckpt_db_entry_update(cb, cpnd_dest, NULL, &ckpt_node, &map_info); @@ -65,9 +63,7 @@ uint32_t cpd_noncolloc_ckpt_rep_create(C send_evt.type = CPSV_EVT_TYPE_CPND; send_evt.info.cpnd.type = CPND_EVT_D2ND_CKPT_CREATE; - ckpt_name = map_info->ckpt_name; - ckpt_name.length = m_NCS_OS_NTOHS(ckpt_name.length); - send_evt.info.cpnd.info.ckpt_create.ckpt_name = ckpt_name; + osaf_extended_name_lend(map_info->ckpt_name, &send_evt.info.cpnd.info.ckpt_create.ckpt_name); d2nd_info = &send_evt.info.cpnd.info.ckpt_create.ckpt_info; @@ -144,13 +140,13 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB SaClmClusterNodeT cluster_node; NODE_ID key; SaClmNodeIdT node_id; - SaNameT ckpt_name; + SaConstStringT 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)); memset(&key_info, 0, sizeof(CPD_REP_KEY_INFO)); + /* Upfront allocate all the memory required for this ckpt */ if (*io_map_info == NULL) { map_info = m_MMGR_ALLOC_CPD_CKPT_MAP_INFO; @@ -158,11 +154,14 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB LOG_ER("CPD CPD_CKPT_MAP_INFO alloc failed"); goto free_mem; } + memset(map_info, 0, sizeof(CPD_CKPT_MAP_INFO)); + ckpt_node = m_MMGR_ALLOC_CPD_CKPT_INFO_NODE; if (ckpt_node == NULL) { LOG_ER("CPD_CKPT_INFO_NODE alloc failed "); goto free_mem; } + memset(ckpt_node, 0, sizeof(CPD_CKPT_INFO_NODE)); } else { map_info = *io_map_info; } @@ -177,7 +176,8 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB key = m_NCS_NODE_ID_FROM_MDS_DEST(*cpnd_dest); node_id = key; -/* Processing for the Node name , with CLM */ + + /* Processing for the Node name , with CLM */ if (saClmClusterNodeGet(cb->clm_hdl, node_id, CPD_CLM_API_TIMEOUT, &cluster_node) != SA_AIS_OK) { proc_rc = NCSCC_RC_FAILURE; @@ -185,14 +185,15 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB goto free_mem; } - node_info->node_name = cluster_node.nodeName; + /* Allocate node_name for node_info */ + if (node_info->node_name == NULL) + node_info->node_name = strdup(osaf_extended_name_borrow(&cluster_node.nodeName)); - key_info.node_name = cluster_node.nodeName; + key_info.node_name = osaf_extended_name_borrow(&cluster_node.nodeName); if (ckpt_create != NULL) { - key_info.ckpt_name = ckpt_create->ckpt_name; + key_info.ckpt_name = osaf_extended_name_borrow(&ckpt_create->ckpt_name); } else { ckpt_name = (*io_map_info)->ckpt_name; - ckpt_name.length = m_NCS_OS_NTOHS(ckpt_name.length); key_info.ckpt_name = ckpt_name; } @@ -204,10 +205,12 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB memset(reploc_info, 0, sizeof(CPD_CKPT_REPLOC_INFO)); - reploc_info->rep_key.node_name = cluster_node.nodeName; + /* Allocate node_name for reploc_info */ + reploc_info->rep_key.node_name = strdup(osaf_extended_name_borrow(&cluster_node.nodeName)); if ((ckpt_create != NULL) && (ckpt_create->attributes.creationFlags != 0)) { - reploc_info->rep_key.ckpt_name = ckpt_create->ckpt_name; + /* Allocate ckpt_name for reploc_info */ + reploc_info->rep_key.ckpt_name = strdup(osaf_extended_name_borrow(&ckpt_create->ckpt_name)); if (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&ckpt_create->attributes)) reploc_info->rep_type = REP_NONCOLL; @@ -224,10 +227,10 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB reploc_info->rep_type = REP_NOTACTIVE; } } else { - if (ckpt_create != NULL) - reploc_info->rep_key.ckpt_name = ckpt_create->ckpt_name; + if (ckpt_create != NULL) + reploc_info->rep_key.ckpt_name = strdup(osaf_extended_name_borrow(&ckpt_create->ckpt_name)); else - reploc_info->rep_key.ckpt_name = ckpt_name; + reploc_info->rep_key.ckpt_name = strdup(ckpt_name); if (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&(*io_map_info)->attributes)) reploc_info->rep_type = REP_NONCOLL; @@ -292,21 +295,20 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB } else { /* Fill the Map Info */ memset(map_info, 0, sizeof(CPD_CKPT_MAP_INFO)); - /* memcpy(&map_info->ckpt_name,&ckpt_create->ckpt_name,sizeof(ckpt_create->ckpt_name.length)); */ - map_info->ckpt_name = ckpt_create->ckpt_name; + map_info->ckpt_name = strdup(osaf_extended_name_borrow(&ckpt_create->ckpt_name)); map_info->attributes = ckpt_create->attributes; map_info->client_version = ckpt_create->client_version; map_info->ckpt_id = cb->nxt_ckpt_id++; proc_rc = cpd_ckpt_map_node_add(&cb->ckpt_map_tree, map_info); if (proc_rc != NCSCC_RC_SUCCESS) { - TRACE_4("cpd db add failed for ckpt_id:%llx",map_info->ckpt_id); + LOG_ER("cpd db add map_node failed for ckpt_id:%llx",map_info->ckpt_id); goto map_node_add_fail; } - memset(ckpt_node, 0, sizeof(CPD_CKPT_INFO_NODE)); + m_MMGR_ZERO_CPD_CKPT_INFO_NODE(ckpt_node); ckpt_node->ckpt_id = map_info->ckpt_id; - ckpt_node->ckpt_name = ckpt_create->ckpt_name; + ckpt_node->ckpt_name = strdup(osaf_extended_name_borrow(&ckpt_create->ckpt_name)); ckpt_node->is_unlink_set = false; ckpt_node->attributes = ckpt_create->attributes; if (ckpt_node->attributes.maxSections == 1) @@ -338,7 +340,7 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB } proc_rc = cpd_ckpt_node_add(&cb->ckpt_tree, ckpt_node, cb->ha_state, cb->immOiHandle); if (proc_rc != NCSCC_RC_SUCCESS) { - TRACE_4("cpd db add failed for ckpt_id:%llx",ckpt_node->ckpt_id); + LOG_ER("cpd db add ckpt_node failed for ckpt_id:%llx",ckpt_node->ckpt_id); goto ckpt_node_add_fail; } if (reploc_info && create_reploc_node) { @@ -366,20 +368,26 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB return NCSCC_RC_SUCCESS; ckpt_node_add_fail: + cpd_ckpt_map_node_delete(cb, map_info); + map_info = NULL; + map_node_add_fail: - /* This is the unexpected failure case, (Process TBD ) */ - TRACE("UNEXPECTED FAILURE"); - TRACE_LEAVE(); - return proc_rc; - free_mem: if (*io_map_info == NULL) { - if (ckpt_node) + if (ckpt_node) { m_MMGR_FREE_CPD_CKPT_INFO_NODE(ckpt_node); + } - if (map_info) + if (map_info) { m_MMGR_FREE_CPD_CKPT_MAP_INFO(map_info); + } } + + if (node_info) { + m_MMGR_FREE_CPD_CPND_INFO_NODE(node_info); + + } + TRACE_LEAVE(); return proc_rc; @@ -388,7 +396,7 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB /**************************************************************************** * Name : cpd_noncolloc_ckpt_rep_delete * - * Description : This routine will run the policy to create the non-collacated + * Description : This routine will run the policy to delete the non-collacated * ckpt replicas. * * Return Values : NCSCC_RC_SUCCESS/Error. @@ -403,13 +411,11 @@ uint32_t cpd_noncolloc_ckpt_rep_delete(C CPD_CPND_INFO_NODE *node_info = NULL; uint32_t rc = NCSCC_RC_SUCCESS; bool ckptid_flag = false; - SaNameT ckpt_name, node_name; + SaConstStringT ckpt_name = NULL, node_name = NULL; CPD_REP_KEY_INFO key_info; CPD_CKPT_REPLOC_INFO *rep_info = NULL; TRACE_ENTER(); - memset(&ckpt_name, 0, sizeof(SaNameT)); - memset(&node_name, 0, sizeof(SaNameT)); memset(&key_info, 0, sizeof(CPD_REP_KEY_INFO)); /* Only the created replicas are present, need to delete them */ @@ -429,13 +435,11 @@ uint32_t cpd_noncolloc_ckpt_rep_delete(C } } memset(&key_info, 0, sizeof(CPD_REP_KEY_INFO)); - memset(&ckpt_name, 0, sizeof(SaNameT)); - memset(&node_name, 0, sizeof(SaNameT)); ckpt_name = ckpt_node->ckpt_name; key_info.ckpt_name = ckpt_name; - node_name = node_info->node_name; + node_name = strdup(node_info->node_name); cpd_a2s_ckpt_dest_del(cb, ckpt_node->ckpt_id, &nref_info->dest, ckptid_flag); @@ -456,12 +460,14 @@ uint32_t cpd_noncolloc_ckpt_rep_delete(C } key_info.node_name = node_name; - /* key_info.node_name.length = m_NCS_OS_NTOHS(node_name.length); */ cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, &rep_info); if (rep_info) { cpd_ckpt_reploc_node_delete(cb, rep_info, ckpt_node->is_unlink_set); } + if (node_name != NULL) + free((void *)node_name); + m_MMGR_FREE_CPD_NODE_REF_INFO(nref_info); nref_info = nref_next; } @@ -494,18 +500,16 @@ uint32_t cpd_process_ckpt_delete(CPD_CB CPD_CKPT_MAP_INFO *map_info = NULL; CPD_CPND_INFO_NODE *node_info = NULL; SaCkptCheckpointCreationAttributesT create_attr; - SaNameT ckpt_name, node_name; + SaConstStringT ckpt_name = NULL, node_name = NULL; CPD_REP_KEY_INFO key_info; CPD_CKPT_REPLOC_INFO *rep_info = NULL; TRACE_ENTER(); - memset(&ckpt_name, 0, sizeof(SaNameT)); - memset(&node_name, 0, sizeof(SaNameT)); memset(&key_info, 0, sizeof(CPD_REP_KEY_INFO)); memset(&create_attr, 0, sizeof(SaCkptCheckpointCreationAttributesT)); if (ckpt_node->is_unlink_set != true) { - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckpt_node->ckpt_name, &map_info); + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, ckpt_node->ckpt_name, &map_info); if (map_info == NULL) { TRACE_4("cpd db del failed for ckpt_id:%llu",ckpt_node->ckpt_id); TRACE_LEAVE(); @@ -602,7 +606,7 @@ uint32_t cpd_process_ckpt_delete(CPD_CB cpd_cpnd_info_node_get(&cb->cpnd_tree, &sinfo->dest, &node_info); if (node_info) { - node_name = node_info->node_name; + node_name = strdup(node_info->node_name); /* Remove the ckpt reference from the node_info */ for (cref_info = node_info->ckpt_ref_list; cref_info != NULL; cref_info = cref_info->next) { if (cref_info->ckpt_node == ckpt_node) { @@ -633,6 +637,9 @@ uint32_t cpd_process_ckpt_delete(CPD_CB cpd_ckpt_reploc_node_delete(cb, rep_info, ckpt_node->is_unlink_set); } + if (node_name != NULL) + free((void *)node_name); + if (ckpt_node->dest_cnt == 0) { *o_ckpt_node_deleted = false; *o_is_active_changed = false; @@ -698,8 +705,8 @@ uint32_t cpd_process_cpnd_down(CPD_CB *c } } - key_info.ckpt_name = ckpt_node->ckpt_name; - key_info.node_name = cpnd_info->node_name; + key_info.ckpt_name = strdup(ckpt_node->ckpt_name); + key_info.node_name = strdup(cpnd_info->node_name); if (match_found == true) { /* Remove the node reference from the ckpt_node */ @@ -809,7 +816,7 @@ uint32_t cpd_process_cpnd_down(CPD_CB *c send_evt.info.cpnd.info.ckpt_del.mds_dest = *cpnd_dest; if (ckpt_node->dest_cnt == 0) { TRACE_1("cpd ckpt del success for ckpt_id:%llx",ckpt_node->ckpt_id); - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckpt_node->ckpt_name, &map_info); + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, ckpt_node->ckpt_name, &map_info); /* Remove the ckpt_node */ (void)cpd_ckpt_node_delete(cb, ckpt_node); @@ -879,6 +886,9 @@ uint32_t cpd_process_cpnd_down(CPD_CB *c cpd_ckpt_reploc_node_delete(cb, rep_info, ckpt_node->is_unlink_set); } + free((void *)key_info.ckpt_name); + free((void *)key_info.node_name); + m_MMGR_FREE_CPD_CKPT_REF_INFO(cref_info); cref_info = cpnd_info->ckpt_ref_list; @@ -994,7 +1004,7 @@ uint32_t cpd_proc_retention_set(CPD_CB * * Notes : None **************************************************************************************/ -uint32_t cpd_proc_unlink_set(CPD_CB *cb, CPD_CKPT_INFO_NODE **ckpt_node, CPD_CKPT_MAP_INFO *map_info, SaNameT *ckpt_name) +uint32_t cpd_proc_unlink_set(CPD_CB *cb, CPD_CKPT_INFO_NODE **ckpt_node, CPD_CKPT_MAP_INFO *map_info, SaConstStringT ckpt_name) { SaAisErrorT rc = SA_AIS_OK; @@ -1005,7 +1015,7 @@ uint32_t cpd_proc_unlink_set(CPD_CB *cb, if (map_info) { cpd_ckpt_node_get(&cb->ckpt_tree, &map_info->ckpt_id, ckpt_node); } else { - TRACE_4("cpd proc unlink set failed for ckpt_name:%s",ckpt_name->value); + TRACE_4("cpd proc unlink set failed for ckpt_name:%s",ckpt_name); /* There is no checkpoint opened with this name */ return SA_AIS_ERR_NOT_EXIST; } @@ -1013,7 +1023,7 @@ uint32_t cpd_proc_unlink_set(CPD_CB *cb, if ((*ckpt_node) == 0) { /* This should not happen, Incorrect CPD database Handling, TBD */ - TRACE_4("cpd proc unlink set faile for ckpt_name:%s",ckpt_name->value); + LOG_ER("cpd proc unlink set failed - there is no ckpt_node for ckpt_name:%s",ckpt_name); return SA_AIS_ERR_NOT_EXIST; } @@ -1128,16 +1138,12 @@ void cpd_cb_dump(void) (uint8_t *)&prev_ckpt_id); while (ckpt_node) { - uint32_t i = 0; prev_ckpt_id = ckpt_node->ckpt_id; TRACE("------------------------------------------------------"); TRACE(" CKPT ID: = %d", (uint32_t)ckpt_node->ckpt_id); - TRACE(" CKPT Name len = %d", ckpt_node->ckpt_name.length); - TRACE(" CKPT Name: "); - for (i = 0; i < ckpt_node->ckpt_name.length; i++) { - TRACE("%c", ckpt_node->ckpt_name.value[i]); - } + TRACE(" CKPT Name len = %lu", strlen(ckpt_node->ckpt_name)); + TRACE(" CKPT Name: %s", ckpt_node->ckpt_name); TRACE(" UNLINK = %d, Active Exists = %d", ckpt_node->is_unlink_set, ckpt_node->is_active_exists); @@ -1182,24 +1188,16 @@ void cpd_cb_dump(void) /* Print the CKPT Details */ if (cb->ckpt_map_tree.n_nodes > 0) { CPD_CKPT_MAP_INFO *ckpt_map_node = NULL; - SaNameT name; - - memset(&name, 0, sizeof(SaNameT)); + SaConstStringT name; /* Get the First Node */ - ckpt_map_node = (CPD_CKPT_MAP_INFO *)ncs_patricia_tree_getnext(&cb->ckpt_map_tree, - (uint8_t *)name.value); + ckpt_map_node = (CPD_CKPT_MAP_INFO *)ncs_patricia_tree_getnext(&cb->ckpt_map_tree, (uint8_t *)&name); while (ckpt_map_node != NULL) { - uint32_t i; - name = ckpt_map_node->ckpt_name; TRACE("------------------------------------------------------"); - TRACE(" CKPT Name len = %d", ckpt_map_node->ckpt_name.length); - TRACE(" CKPT Name: "); - for (i = 0; i < ckpt_map_node->ckpt_name.length; i++) { - TRACE("%c", ckpt_map_node->ckpt_name.value[i]); - } + TRACE(" CKPT Name len = %lu", strlen(name)); + TRACE(" CKPT Name: %s", name); TRACE(" CKPT ID: = %d", (uint32_t)ckpt_map_node->ckpt_id); @@ -1212,7 +1210,7 @@ void cpd_cb_dump(void) TRACE(" maxSectionIdSize: %d, ", (uint32_t)ckpt_map_node->attributes.maxSectionIdSize); ckpt_map_node = (CPD_CKPT_MAP_INFO *)ncs_patricia_tree_getnext(&cb->ckpt_map_tree, - (uint8_t *)name.value); + (uint8_t *)name); } TRACE(" End of CKPT Info"); } @@ -1234,20 +1232,21 @@ void cpd_cb_dump(void) uint32_t cpd_ckpt_reploc_imm_object_delete(CPD_CB *cb, CPD_CKPT_REPLOC_INFO *ckpt_reploc_node, bool is_unlink_set) { - SaNameT replica_dn, node_name; - memset(&replica_dn, 0, sizeof(SaNameT)); - memset(&node_name, 0, sizeof(SaNameT)); + char *replica_dn = NULL; + SaNameT replica_sanamet; + /* delete imm runtime object */ if ((cb->ha_state == SA_AMF_HA_ACTIVE) && (is_unlink_set != true)) { /* escapes rdn's ',' with '\' */ - node_name.length = m_NCS_OS_NTOHS(ckpt_reploc_node->rep_key.node_name.length); - strcpy((char *)node_name.value, (char *)ckpt_reploc_node->rep_key.node_name.value); - cpd_create_association_class_dn(&node_name, - &ckpt_reploc_node->rep_key.ckpt_name, "safReplica", &replica_dn); - if (immutil_saImmOiRtObjectDelete(cb->immOiHandle, &replica_dn) != SA_AIS_OK) { - LOG_ER("Deleting run time object %s FAILED", replica_dn.value); + cpd_create_association_class_dn(ckpt_reploc_node->rep_key.node_name, + ckpt_reploc_node->rep_key.ckpt_name, "safReplica", &replica_dn); + osaf_extended_name_lend(replica_dn, &replica_sanamet); + if (immutil_saImmOiRtObjectDelete(cb->immOiHandle, &replica_sanamet) != SA_AIS_OK) { + LOG_ER("Deleting run time object %s FAILED", replica_dn); + free(replica_dn); return NCSCC_RC_FAILURE; } + free(replica_dn); } return NCSCC_RC_SUCCESS; } @@ -1306,7 +1305,7 @@ uint32_t cpd_ckpt_db_update_after_headle } memset(map_info, 0, sizeof(CPD_CKPT_MAP_INFO)); - map_info->ckpt_name = ckpt_info->ckpt_name; + map_info->ckpt_name = strdup(osaf_extended_name_borrow(&ckpt_info->ckpt_name)); map_info->attributes = ckpt_info->attributes; map_info->client_version = ckpt_info->client_version; map_info->ckpt_id = ckpt_info->ckpt_id; @@ -1330,7 +1329,7 @@ uint32_t cpd_ckpt_db_update_after_headle memset(ckpt_node, 0, sizeof(CPD_CKPT_INFO_NODE)); ckpt_node->ckpt_id = map_info->ckpt_id; - ckpt_node->ckpt_name = ckpt_info->ckpt_name; + ckpt_node->ckpt_name = strdup(osaf_extended_name_borrow(&ckpt_info->ckpt_name)); ckpt_node->is_unlink_set = ckpt_info->is_unlink; ckpt_node->attributes = ckpt_info->attributes; if (ckpt_node->attributes.maxSections == 1) @@ -1404,9 +1403,9 @@ uint32_t cpd_ckpt_db_update_after_headle goto free_mem; } - node_info->node_name = cluster_node.nodeName; - key_info.node_name = cluster_node.nodeName; - key_info.ckpt_name = ckpt_info->ckpt_name; + node_info->node_name = strdup(osaf_extended_name_borrow(&cluster_node.nodeName)); + key_info.node_name = osaf_extended_name_borrow(&cluster_node.nodeName); + key_info.ckpt_name = osaf_extended_name_borrow(&ckpt_info->ckpt_name); /* Create and add the reploc node into ckpt_reploc_tree if it doesn't exist */ /* Only create reploc_node for Collocated and Non-collocated active replica */ @@ -1423,8 +1422,8 @@ uint32_t cpd_ckpt_db_update_after_headle /* Initialize the reploc info node */ memset(reploc_info, 0, sizeof(CPD_CKPT_REPLOC_INFO)); - reploc_info->rep_key.node_name = cluster_node.nodeName; - reploc_info->rep_key.ckpt_name = ckpt_info->ckpt_name; + reploc_info->rep_key.node_name = strdup(osaf_extended_name_borrow(&cluster_node.nodeName)); + reploc_info->rep_key.ckpt_name = strdup(osaf_extended_name_borrow(&ckpt_info->ckpt_name)); if (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&ckpt_info->attributes)) reploc_info->rep_type = REP_NONCOLL; @@ -1465,22 +1464,25 @@ uint32_t cpd_ckpt_db_update_after_headle cpd_ckpt_node_get(&cb->ckpt_tree, &ckpt_info->ckpt_id, &tmp_ckpt_node); if (tmp_ckpt_node) /* The ckpt_node was added into the tree */ cpd_ckpt_node_delete(cb, ckpt_node); - else + else { m_MMGR_FREE_CPD_CKPT_INFO_NODE(ckpt_node); + } } if (map_info) { CPD_CKPT_MAP_INFO *tmp_map_info; - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckpt_info->ckpt_name, &tmp_map_info); + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, osaf_extended_name_borrow(&ckpt_info->ckpt_name), &tmp_map_info); if (tmp_map_info) /* The map info was added into the tree */ cpd_ckpt_map_node_delete(cb, map_info); - else + else { m_MMGR_FREE_CPD_CKPT_MAP_INFO(map_info); + } } } - if (reploc_info) + if (reploc_info) { m_MMGR_FREE_CPD_CKPT_REPLOC_INFO(reploc_info); + } TRACE_LEAVE(); return proc_rc; diff --git a/osaf/services/saf/cpsv/cpd/cpd_red.c b/osaf/services/saf/cpsv/cpd/cpd_red.c --- a/osaf/services/saf/cpsv/cpd/cpd_red.c +++ b/osaf/services/saf/cpsv/cpd/cpd_red.c @@ -46,7 +46,7 @@ uint32_t cpd_a2s_ckpt_create(CPD_CB *cb, memset(&cpd_msg, '\0', sizeof(CPD_MBCSV_MSG)); cpd_msg.type = CPD_A2S_MSG_CKPT_CREATE; - cpd_msg.info.ckpt_create.ckpt_name = ckpt_node->ckpt_name; + osaf_extended_name_lend(ckpt_node->ckpt_name, &cpd_msg.info.ckpt_create.ckpt_name); cpd_msg.info.ckpt_create.ckpt_id = ckpt_node->ckpt_id; cpd_msg.info.ckpt_create.ckpt_attrib = ckpt_node->attributes; cpd_msg.info.ckpt_create.is_unlink_set = ckpt_node->is_unlink_set; @@ -115,12 +115,12 @@ void cpd_a2s_ckpt_unlink_set(CPD_CB *cb, memset(&cpd_msg, '\0', sizeof(CPD_MBCSV_MSG)); cpd_msg.type = CPD_A2S_MSG_CKPT_UNLINK; cpd_msg.info.ckpt_ulink.is_unlink_set = ckpt_node->is_unlink_set; - cpd_msg.info.ckpt_ulink.ckpt_name = ckpt_node->ckpt_name; + osaf_extended_name_lend(ckpt_node->ckpt_name, &cpd_msg.info.ckpt_ulink.ckpt_name); /* send it to MBCSv */ rc = cpd_mbcsv_async_update(cb, &cpd_msg); if (rc != SA_AIS_OK) - TRACE_4("cpd A2S ckpt unlink async failed %s",ckpt_node->ckpt_name.value); + LOG_ER("cpd A2S ckpt unlink async failed %s",ckpt_node->ckpt_name); else TRACE_1("cpd A2S ckpt unlink async successfull "); TRACE_LEAVE(); diff --git a/osaf/services/saf/cpsv/cpd/cpd_sbevt.c b/osaf/services/saf/cpsv/cpd/cpd_sbevt.c --- a/osaf/services/saf/cpsv/cpd/cpd_sbevt.c +++ b/osaf/services/saf/cpsv/cpd/cpd_sbevt.c @@ -22,6 +22,7 @@ ******************************************************************************/ +#include <string.h> #include "cpd.h" /* This is the function prototype for event handling */ @@ -103,8 +104,7 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB memset(&key_info, 0, sizeof(CPD_REP_KEY_INFO)); /* 1. check if the checkpoint already exist (this should not happen ) */ - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &msg->info.ckpt_create.ckpt_name, &map_info); -/* msg->info.ckpt_create.ckpt_name.length = m_NCS_OS_NTOHS(msg->info.ckpt_create.ckpt_name.length); */ + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, osaf_extended_name_borrow(&msg->info.ckpt_create.ckpt_name), &map_info); if (map_info == NULL) { /* Checkpoint does not exist, so allocate memory */ map_info = m_MMGR_ALLOC_CPD_CKPT_MAP_INFO; if (map_info == NULL) { @@ -127,7 +127,7 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB /* Fill the Map info structure */ memset(map_info, 0, sizeof(CPD_CKPT_MAP_INFO)); - map_info->ckpt_name = msg->info.ckpt_create.ckpt_name; + map_info->ckpt_name = strdup(osaf_extended_name_borrow(&msg->info.ckpt_create.ckpt_name)); map_info->ckpt_id = msg->info.ckpt_create.ckpt_id; map_info->attributes = msg->info.ckpt_create.ckpt_attrib; cb->nxt_ckpt_id = map_info->ckpt_id + 1; @@ -142,7 +142,7 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB /* Fill the CKPT_NODE structure */ memset(ckpt_node, 0, sizeof(CPD_CKPT_INFO_NODE)); ckpt_node->ckpt_id = msg->info.ckpt_create.ckpt_id; - ckpt_node->ckpt_name = msg->info.ckpt_create.ckpt_name; + ckpt_node->ckpt_name = strdup(osaf_extended_name_borrow(&msg->info.ckpt_create.ckpt_name)); dest_cnt = msg->info.ckpt_create.dest_cnt; ckpt_node->is_unlink_set = msg->info.ckpt_create.is_unlink_set; ckpt_node->attributes = msg->info.ckpt_create.ckpt_attrib; @@ -175,18 +175,18 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB goto cluster_node_get_fail; } - node_info->node_name = cluster_node.nodeName; + node_info->node_name = strdup(osaf_extended_name_borrow(&cluster_node.nodeName)); - key_info.ckpt_name = msg->info.ckpt_create.ckpt_name; - key_info.node_name = cluster_node.nodeName; + key_info.ckpt_name = osaf_extended_name_borrow(&msg->info.ckpt_create.ckpt_name); + key_info.node_name = osaf_extended_name_borrow(&cluster_node.nodeName); cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, &reploc_info); if (reploc_info == NULL) { reploc_info = m_MMGR_ALLOC_CPD_CKPT_REPLOC_INFO; memset(reploc_info, 0, sizeof(CPD_CKPT_REPLOC_INFO)); - reploc_info->rep_key.node_name = cluster_node.nodeName; - reploc_info->rep_key.ckpt_name = msg->info.ckpt_create.ckpt_name; + reploc_info->rep_key.node_name = strdup(osaf_extended_name_borrow(&cluster_node.nodeName)); + reploc_info->rep_key.ckpt_name = strdup(osaf_extended_name_borrow(&msg->info.ckpt_create.ckpt_name)); if (!m_IS_SA_CKPT_CHECKPOINT_COLLOCATED(&msg->info.ckpt_create.ckpt_attrib)) reploc_info->rep_type = REP_NONCOLL; @@ -218,7 +218,7 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB goto cpd_ckpt_node_add_fail; } - TRACE_1("cpd ckpt node added successfully ckpt name:%s, ckpt_id:%llx ",map_info->ckpt_name.value,map_info->ckpt_id); + TRACE_1("cpd ckpt node added successfully ckpt name:%s, ckpt_id:%llx ",map_info->ckpt_name, map_info->ckpt_id); goto end; @@ -269,14 +269,11 @@ uint32_t cpd_sb_proc_ckpt_dest_del(CPD_C CPD_NODE_REF_INFO *nref_info = NULL; CPD_CKPT_MAP_INFO *map_info = NULL; uint32_t proc_rc = NCSCC_RC_SUCCESS; - SaNameT ckpt_name, node_name; CPD_REP_KEY_INFO key_info; CPD_CKPT_REPLOC_INFO *rep_info = NULL; TRACE_ENTER(); memset(&key_info, 0, sizeof(CPD_REP_KEY_INFO)); - memset(&ckpt_name, 0, sizeof(SaNameT)); - memset(&node_name, 0, sizeof(SaNameT)); /* IF CPND IS DOWN THEN CKPT_ID = 0 , DELETE THAT NODE INFO */ if (msg->info.dest_del.ckpt_id == 0) { @@ -292,8 +289,7 @@ uint32_t cpd_sb_proc_ckpt_dest_del(CPD_C } if (ckpt_node->is_unlink_set != true) { - cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckpt_node->ckpt_name, &map_info); - /* ckpt_node->ckpt_name.length = m_NCS_OS_NTOHS(ckpt_node->ckpt_name.length); */ + cpd_ckpt_map_node_get(&cb->ckpt_map_tree, ckpt_node->ckpt_name, &map_info); if (map_info == NULL) { TRACE_4("cpd standby dest del evt failed"); return NCSCC_RC_FAILURE; @@ -308,21 +304,18 @@ uint32_t cpd_sb_proc_ckpt_dest_del(CPD_C } } - ckpt_name = ckpt_node->ckpt_name; - key_info.ckpt_name = ckpt_name; - node_name = node_info->node_name; + key_info.ckpt_name = ckpt_node->ckpt_name; + key_info.node_name = node_info->node_name; + + cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, &rep_info); + if (rep_info) { + cpd_ckpt_reploc_node_delete(cb, rep_info,ckpt_node->is_unlink_set); + } /* No check point ref in this node */ if (node_info->ckpt_cnt == 0) { cpd_cpnd_info_node_delete(cb, node_info); } - - key_info.node_name = node_name; - /* key_info.node_name.length = m_NCS_OS_NTOHS(node_name.length); */ - cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, &rep_info); - if (rep_info) { - cpd_ckpt_reploc_node_delete(cb, rep_info,ckpt_node->is_unlink_set); - } } else { TRACE_4("cpd standby dest del evt failed for mdsdest: %"PRIu64,msg->info.dest_del.mds_dest); proc_rc = NCSCC_RC_FAILURE; @@ -366,16 +359,16 @@ uint32_t cpd_sb_proc_ckpt_unlink(CPD_CB { CPD_CKPT_INFO_NODE *ckpt_node = NULL; CPD_CKPT_MAP_INFO *map_info = NULL; - SaNameT *ckpt_name = &msg->info.ckpt_ulink.ckpt_name; + SaConstStringT ckpt_name = osaf_extended_name_borrow(&msg->info.ckpt_ulink.ckpt_name); uint32_t proc_rc = SA_AIS_OK; uint32_t rc = NCSCC_RC_SUCCESS; proc_rc = cpd_proc_unlink_set(cb, &ckpt_node, map_info, ckpt_name); if (proc_rc != SA_AIS_OK) { - TRACE_4("cpd standby unlink evt failed"); + LOG_ER("cpd standby unlink evt failed"); rc = NCSCC_RC_FAILURE; } - TRACE_1("cpd evt unlink success ckpt_name: %s ",msg->info.ckpt_ulink.ckpt_name.value); + TRACE_1("cpd evt unlink success ckpt_name: %s ", ckpt_name); return rc; } @@ -492,9 +485,9 @@ uint32_t cpd_sb_proc_ckpt_dest_add(CPD_C goto free_mem; } - node_info->node_name = cluster_node.nodeName; + node_info->node_name = strdup(osaf_extended_name_borrow(&cluster_node.nodeName)); - key_info.node_name = cluster_node.nodeName; + key_info.node_name = osaf_extended_name_borrow(&cluster_node.nodeName); key_info.ckpt_name = ckpt_node->ckpt_name; cpd_ckpt_reploc_get(&cb->ckpt_reploc_tree, &key_info, &reploc_info); if (reploc_info == NULL) { @@ -502,8 +495,8 @@ uint32_t cpd_sb_proc_ckpt_dest_add(CPD_C memset(reploc_info, 0, sizeof(CPD_CKPT_REPLOC_INFO)); - reploc_info->rep_key.node_name = cluster_node.nodeName; - reploc_info->rep_key.ckpt_name = ckpt_node->ckpt_name; + 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)) reploc_info->rep_type = REP_NONCOLL; else { ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel