osaf/libs/common/cpsv/include/cpd_cb.h | 5 +- osaf/services/saf/cpsv/cpd/cpd_db.c | 38 +++++++++++++++-------- osaf/services/saf/cpsv/cpd/cpd_imm.c | 39 ++++++++++++++--------- osaf/services/saf/cpsv/cpd/cpd_proc.c | 32 +------------------ osaf/services/saf/cpsv/cpd/cpd_sbevt.c | 55 +++++++++------------------------ 5 files changed, 68 insertions(+), 101 deletions(-)
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 @@ -267,10 +267,9 @@ uint32_t cpd_cb_db_init(CPD_CB *cb); uint32_t cpd_cb_db_destroy(CPD_CB *cb); -void cpd_ckpt_ref_info_add(CPD_CPND_INFO_NODE *node_info, CPD_CKPT_REF_INFO *cref_info); - +void cpd_ckpt_ref_info_add(CPD_CPND_INFO_NODE *node_info, CPD_CKPT_INFO_NODE *ckpt_node); void cpd_ckpt_ref_info_del(CPD_CPND_INFO_NODE *node_info, CPD_CKPT_REF_INFO *cref_info); -void cpd_node_ref_info_add(CPD_CKPT_INFO_NODE *ckpt_node, CPD_NODE_REF_INFO *nref_info); +void cpd_node_ref_info_add(CPD_CKPT_INFO_NODE *ckpt_node, MDS_DEST *mds_dest); void cpd_node_ref_info_del(CPD_CKPT_INFO_NODE *ckpt_node, CPD_NODE_REF_INFO *nref_info); void cpd_clm_cluster_track_cb(const SaClmClusterNotificationBufferT *notificationBuffer, 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 @@ -439,7 +439,8 @@ uint32_t cpd_ckpt_reploc_node_delete(CPD /* goto reploc_node_add_fail; */ TRACE_4("cpd db node add failed "); } - rc = NCSCC_RC_FAILURE; + + return NCSCC_RC_FAILURE; } /* Free the Client Node */ @@ -981,20 +982,25 @@ uint32_t cpd_cb_db_destroy(CPD_CB *cb) * Description : CPD_CKPT_REF_INFO Linked list manipulation function * *****************************************************************************/ -void cpd_ckpt_ref_info_add(CPD_CPND_INFO_NODE *node_info, CPD_CKPT_REF_INFO *cref_info) +void cpd_ckpt_ref_info_add(CPD_CPND_INFO_NODE *node_info, CPD_CKPT_INFO_NODE *ckpt_node) { + CPD_CKPT_REF_INFO *cref_info = NULL; - CPD_CKPT_REF_INFO *cref = NULL; TRACE_ENTER(); - cref = node_info->ckpt_ref_list; - while (cref) { - if (cref->ckpt_node->ckpt_id == cref_info->ckpt_node->ckpt_id) + cref_info = node_info->ckpt_ref_list; + while (cref_info) { + if (cref_info->ckpt_node->ckpt_id == ckpt_node->ckpt_id) return; - cref = cref->next; + cref_info = cref_info->next; } + cref_info = (CPD_CKPT_REF_INFO *)malloc(sizeof(CPD_CKPT_REF_INFO)); + memset(cref_info, 0, sizeof(CPD_CKPT_REF_INFO)); + + cref_info->ckpt_node = ckpt_node; + /* Add the node at the begin of the linked list */ cref_info->next = node_info->ckpt_ref_list; node_info->ckpt_ref_list = cref_info; @@ -1048,19 +1054,25 @@ void cpd_ckpt_ref_info_del(CPD_CPND_INFO * Description : CPD_NODE_REF_INFO Linked list manipulation function * *****************************************************************************/ -void cpd_node_ref_info_add(CPD_CKPT_INFO_NODE *ckpt_node, CPD_NODE_REF_INFO *nref_info) +void cpd_node_ref_info_add(CPD_CKPT_INFO_NODE *ckpt_node, MDS_DEST *mds_dest) { - CPD_NODE_REF_INFO *nref = NULL; + CPD_NODE_REF_INFO *nref_info = NULL; TRACE_ENTER(); - nref = ckpt_node->node_list; - while (nref) { - if (nref->dest == nref_info->dest) + + nref_info = ckpt_node->node_list; + while (nref_info) { + if (m_NCS_MDS_DEST_EQUAL(&nref_info->dest, mds_dest)) return; - nref = nref->next; + nref_info = nref_info->next; } + nref_info = (CPD_NODE_REF_INFO *) malloc(sizeof(CPD_NODE_REF_INFO)); + memset(nref_info, 0, sizeof(CPD_NODE_REF_INFO)); + + nref_info->dest = *mds_dest; + /* Add the node at the begin of the linked list */ nref_info->next = ckpt_node->node_list; ckpt_node->node_list = nref_info; 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 @@ -39,7 +39,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 char* ckpt_replica_extract_node_name(char *src,char *key); +static void ckpt_replica_extract_node_name(SaNameT *nodeName, char *src); SaImmOiCallbacksT_2 oi_cbks = { .saImmOiAdminOperationCallback = NULL, @@ -126,10 +126,8 @@ static SaAisErrorT cpd_saImmOiRtAttrUpda memset(node_name,0,(objectName->length-ckptName.length)); node_name = (char*)memcpy(node_name,(char*)objectName->value,objectName->length-ckptName.length-1); - node_name = ckpt_replica_extract_node_name(node_name,"\\"); - node_name = node_name + 11; - strcpy((char*)nodeName.value, node_name); - nodeName.length = strlen(node_name); + ckpt_replica_extract_node_name(&nodeName, node_name); + free(node_name); } cpd_ckpt_map_node_get(&cb->ckpt_map_tree, &ckptName, &map_info); @@ -628,21 +626,30 @@ static uint32_t cpd_fetch_num_sections(C -static char *ckpt_replica_extract_node_name(char *src,char *key) +static void ckpt_replica_extract_node_name(SaNameT *nodeName, char *src) { - char *dest = NULL; + char *dest = NULL, *dest_name; SaUint32T len_src = 0; SaUint32T i = 0, k = 0; - 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++ ) { - if ( src[i] != '\\' ) { - dest[k] = src[i]; - k++; - } + + 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++) { + if (src[i] != '\\') { + dest[k] = src[i]; + k++; + } } - return dest; + + /* 11 is the length of "safReplica=" */ + dest_name = dest + 11; + strcpy((char*)nodeName->value, dest_name); + nodeName->length = strlen(dest_name); + + free(dest); + + return; } /** 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 @@ -138,8 +138,6 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB CPD_CKPT_INFO_NODE *ckpt_node = NULL; CPD_CKPT_MAP_INFO *map_info = NULL; CPD_CKPT_REPLOC_INFO *reploc_info = NULL; - CPD_NODE_REF_INFO *nref_info = NULL; - CPD_CKPT_REF_INFO *cref_info = NULL; uint32_t proc_rc = NCSCC_RC_SUCCESS; SaCkptCheckpointHandleT ckpt_id = 0; bool add_flag = true, create_reploc_node = false; @@ -169,15 +167,6 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB map_info = *io_map_info; } - nref_info = m_MMGR_ALLOC_CPD_NODE_REF_INFO; - cref_info = m_MMGR_ALLOC_CPD_CKPT_REF_INFO; - - if (!(nref_info && cref_info)) { - TRACE_4("CPD DB add failed"); - proc_rc = NCSCC_RC_OUT_OF_MEM; - goto free_mem; - } - /* Get the CPD_CPND_INFO_NODE (CPND from where this ckpt is created) */ proc_rc = cpd_cpnd_info_node_find_add(&cb->cpnd_tree, cpnd_dest, &node_info, &add_flag); if (!node_info) { @@ -366,23 +355,12 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB if (noncoll_rep_on_payload != true) { /* Add the CPND Details (CPND reference) to the ckpt node */ - memset(nref_info, 0, sizeof(CPD_NODE_REF_INFO)); - nref_info->dest = *cpnd_dest; - cpd_node_ref_info_add(ckpt_node, nref_info); + cpd_node_ref_info_add(ckpt_node, cpnd_dest); /* Add the ckpt reference to the CPND node info */ - memset(cref_info, 0, sizeof(CPD_CKPT_REF_INFO)); - cref_info->ckpt_node = ckpt_node; - cpd_ckpt_ref_info_add(node_info, cref_info); - } else { - if (cref_info) - m_MMGR_FREE_CPD_CKPT_REF_INFO(cref_info); - - if (nref_info) - m_MMGR_FREE_CPD_NODE_REF_INFO(nref_info); + cpd_ckpt_ref_info_add(node_info, ckpt_node); } - TRACE_LEAVE(); return NCSCC_RC_SUCCESS; @@ -394,12 +372,6 @@ uint32_t cpd_ckpt_db_entry_update(CPD_CB return proc_rc; free_mem: - if (cref_info) - m_MMGR_FREE_CPD_CKPT_REF_INFO(cref_info); - - if (nref_info) - m_MMGR_FREE_CPD_NODE_REF_INFO(nref_info); - if (*io_map_info == NULL) { if (ckpt_node) m_MMGR_FREE_CPD_CKPT_INFO_NODE(ckpt_node); 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 @@ -89,8 +89,6 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB CPD_CPND_INFO_NODE *node_info = NULL; CPD_CKPT_INFO_NODE *ckpt_node = NULL; CPD_CKPT_MAP_INFO *map_info = NULL; - CPD_NODE_REF_INFO *nref_info = NULL; - CPD_CKPT_REF_INFO *cref_info = NULL; uint32_t proc_rc = NCSCC_RC_SUCCESS; bool add_flag = true; uint32_t count, dest_cnt; @@ -159,15 +157,6 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB ckpt_node->ret_time = msg->info.ckpt_create.ckpt_attrib.retentionDuration; for (count = 0; count < dest_cnt; count++) { - nref_info = m_MMGR_ALLOC_CPD_NODE_REF_INFO; - if (nref_info == NULL) { - LOG_CR("memory allocation for cpd standby evt failed"); - proc_rc = NCSCC_RC_OUT_OF_MEM; - goto nref_info_alloc_fail; - } - - memset(nref_info, '\0', sizeof(CPD_NODE_REF_INFO)); - nref_info->dest = msg->info.ckpt_create.dest_list[count].dest; /* cpd_cpnd database is updated */ proc_rc = cpd_cpnd_info_node_find_add(&cb->cpnd_tree, &msg->info.ckpt_create.dest_list[count].dest, @@ -175,12 +164,10 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB if (!node_info) { TRACE_4("cpd standby create evt failed for mdsdest: %"PRIu64,msg->info.ckpt_create.dest_list[count].dest); proc_rc = NCSCC_RC_OUT_OF_MEM; - if (nref_info) - m_MMGR_FREE_CPD_NODE_REF_INFO(nref_info); goto cpd_cpnd_node_find_fail; } add_flag = true; - key = m_NCS_NODE_ID_FROM_MDS_DEST(nref_info->dest); + key = m_NCS_NODE_ID_FROM_MDS_DEST(msg->info.ckpt_create.dest_list[count].dest); node_id = key; if (saClmClusterNodeGet(cb->clm_hdl, node_id, CPD_CLM_API_TIMEOUT, &cluster_node) != SA_AIS_OK) { proc_rc = NCSCC_RC_FAILURE; @@ -220,12 +207,9 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB cpd_ckpt_reploc_node_add(&cb->ckpt_reploc_tree, reploc_info, cb->ha_state, cb->immOiHandle); } - cref_info = m_MMGR_ALLOC_CPD_CKPT_REF_INFO; - memset(cref_info, 0, sizeof(CPD_CKPT_REF_INFO)); - cref_info->ckpt_node = ckpt_node; - cpd_ckpt_ref_info_add(node_info, cref_info); - cpd_node_ref_info_add(ckpt_node, nref_info); + cpd_ckpt_ref_info_add(node_info, ckpt_node); + cpd_node_ref_info_add(ckpt_node, &msg->info.ckpt_create.dest_list[count].dest); } /* filling up the ckpt_node database */ @@ -242,7 +226,6 @@ uint32_t cpd_sb_proc_ckpt_create(CPD_CB cpd_ckpt_node_add_fail: cluster_node_get_fail: cpd_cpnd_node_find_fail: - nref_info_alloc_fail: if (ckpt_node) { cpd_ckpt_node_and_ref_delete(cb, ckpt_node); @@ -472,30 +455,23 @@ uint32_t cpd_sb_proc_ckpt_dest_add(CPD_C { CPD_CKPT_INFO_NODE *ckpt_node = NULL; uint32_t proc_rc = NCSCC_RC_SUCCESS; - CPD_CKPT_REF_INFO *cref_info = NULL; CPD_CPND_INFO_NODE *node_info = NULL; - CPD_NODE_REF_INFO *nref_info = NULL; bool add_flag = true; NODE_ID key; SaClmNodeIdT node_id; CPD_CKPT_REPLOC_INFO *reploc_info = NULL; SaClmClusterNodeT cluster_node; CPD_REP_KEY_INFO key_info; + CPD_NODE_REF_INFO *nref_info; TRACE_ENTER(); + memset(&cluster_node, 0, sizeof(SaClmClusterNodeT)); memset(&key_info, 0, sizeof(CPD_REP_KEY_INFO)); - nref_info = m_MMGR_ALLOC_CPD_NODE_REF_INFO; - cref_info = m_MMGR_ALLOC_CPD_CKPT_REF_INFO; - - memset(nref_info, 0, sizeof(CPD_NODE_REF_INFO)); - memset(cref_info, 0, sizeof(CPD_CKPT_REF_INFO)); - - nref_info->dest = msg->info.dest_add.mds_dest; cpd_ckpt_node_get(&cb->ckpt_tree, &msg->info.dest_add.ckpt_id, &ckpt_node); if (ckpt_node) - cpd_node_ref_info_add(ckpt_node, nref_info); + cpd_node_ref_info_add(ckpt_node, &msg->info.dest_add.mds_dest); else { TRACE_4("cpd standby dest add evt failed for ckptid: %llx",msg->info.dest_add.ckpt_id); return NCSCC_RC_OUT_OF_MEM; @@ -523,8 +499,6 @@ uint32_t cpd_sb_proc_ckpt_dest_add(CPD_C 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; - if (reploc_info == NULL) - goto free_mem; memset(reploc_info, 0, sizeof(CPD_CKPT_REPLOC_INFO)); @@ -553,18 +527,21 @@ uint32_t cpd_sb_proc_ckpt_dest_add(CPD_C } } - cref_info->ckpt_node = ckpt_node; - cpd_ckpt_ref_info_add(node_info, cref_info); - + 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(); + return proc_rc; + free_mem: - if (node_info == NULL) { - cpd_node_ref_info_del(ckpt_node, nref_info); - m_MMGR_FREE_CPD_NODE_REF_INFO(nref_info); - m_MMGR_FREE_CPD_CKPT_REF_INFO(cref_info); + for (nref_info = ckpt_node->node_list; nref_info != NULL; nref_info = nref_info->next) { + if (m_NCS_MDS_DEST_EQUAL(&nref_info->dest, &msg->info.dest_del.mds_dest)) { + cpd_node_ref_info_del(ckpt_node, nref_info); + break; + } } + TRACE_LEAVE(); return proc_rc; } ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel