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_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 | 110 +++++++-----
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 | 195 ++++++++++++----------
osaf/services/saf/cpsv/cpd/cpd_red.c | 6 +-
osaf/services/saf/cpsv/cpd/cpd_sbevt.c | 57 ++---
14 files changed, 486 insertions(+), 301 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
@@ -76,7 +76,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;
@@ -121,8 +121,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;
@@ -130,15 +129,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 {
@@ -216,7 +215,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);
@@ -245,9 +244,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(CPD_CB *
extern void cpd_imm_reinit_bg(CPD_CB * cb);
extern void cpd_imm_declare_implementer(CPD_CB *cb);
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_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
@@ -328,10 +328,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;
}
}
@@ -349,7 +349,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) {
@@ -166,6 +162,9 @@ uint32_t cpd_ckpt_node_delete(CPD_CB *cb
rc = NCSCC_RC_FAILURE;
}
+ if (ckpt_node->ckpt_name != NULL)
+ free((void *)ckpt_node->ckpt_name);
+
/* Free the Client Node */
if (ckpt_node)
m_MMGR_FREE_CPD_CKPT_INFO_NODE(ckpt_node);
@@ -305,7 +304,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 +326,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 +359,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 +379,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 +390,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 +443,15 @@ uint32_t cpd_ckpt_reploc_node_delete(CPD
}
/* Free the Client Node */
- if (ckpt_reploc_node)
+ if (ckpt_reploc_node) {
+ if (ckpt_reploc_node->rep_key.node_name != NULL)
+ free((void *)ckpt_reploc_node->rep_key.node_name);
+
+ if (ckpt_reploc_node->rep_key.ckpt_name != NULL)
+ free((void *)ckpt_reploc_node->rep_key.ckpt_name);
+
m_MMGR_FREE_CPD_CKPT_REPLOC_INFO(ckpt_reploc_node);
+ }
return rc;
}
@@ -512,7 +517,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 +534,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 +564,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 +586,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 +609,23 @@ 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) {
+ if (ckpt_map_node->ckpt_name != NULL)
+ free((void *)ckpt_map_node->ckpt_name);
+
m_MMGR_FREE_CPD_CKPT_MAP_INFO(ckpt_map_node);
+ }
+ TRACE_LEAVE();
return rc;
}
@@ -627,9 +640,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);
@@ -844,6 +855,9 @@ uint32_t cpd_cpnd_info_node_delete(CPD_C
/* Free the Client Node */
if (cpnd_info_node) {
+ if (cpnd_info_node->node_name != NULL)
+ free((void *)cpnd_info_node->node_name);
+
if (cpnd_info_node->cpnd_ret_timer.uarg)
ncshm_destroy_hdl(NCS_SERVICE_ID_CPD,
cpnd_info_node->cpnd_ret_timer.uarg);
@@ -1174,7 +1188,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));
+ 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
@@ -510,31 +582,60 @@ static void *_cpd_imm_declare_implemente
return NULL;
}
+/****************************************************************************
+ * 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)
@@ -626,30 +727,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;
}
@@ -758,8 +870,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,
@@ -784,10 +895,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);
}
}
@@ -844,8 +955,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));
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,35 @@ 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) {
+ if (ckpt_node->ckpt_name != NULL)
+ free((void *)ckpt_node->ckpt_name);
+
m_MMGR_FREE_CPD_CKPT_INFO_NODE(ckpt_node);
+ }
- if (map_info)
+ if (map_info) {
+ if (map_info->ckpt_name != NULL)
+ free((void*)map_info->ckpt_name);
+
m_MMGR_FREE_CPD_CKPT_MAP_INFO(map_info);
+ }
}
+
+ if (node_info) {
+ if (node_info->node_name != NULL)
+ free((void*)node_info->node_name);
+
+ m_MMGR_FREE_CPD_CPND_INFO_NODE(node_info);
+
+ }
+
TRACE_LEAVE();
return proc_rc;
@@ -388,7 +405,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 +420,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 +444,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 +469,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 +509,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 +615,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 +646,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 +714,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 +825,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 +895,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 +1013,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 +1024,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 +1032,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 +1147,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 +1197,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 +1219,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 +1241,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 +1314,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 +1338,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 +1412,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 +1431,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 +1473,35 @@ 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 {
+ if (ckpt_node->ckpt_name != NULL)
+ free((void *)ckpt_node->ckpt_name);
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 {
+ if (map_info->ckpt_name != NULL)
+ free((void*)map_info->ckpt_name);
m_MMGR_FREE_CPD_CKPT_MAP_INFO(map_info);
+ }
}
}
- if (reploc_info)
+ if (reploc_info) {
+ if (reploc_info->rep_key.node_name != NULL)
+ free((void *)reploc_info->rep_key.node_name);
+
+ if (reploc_info->rep_key.ckpt_name != NULL)
+ free((void *)reploc_info->rep_key.ckpt_name);
+
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 {
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785231&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel