Hi Hoan,
On 6/23/2016 4:23 PM, Hoang Vo wrote:
> + buf = m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH);
> + memset(buf, '\0', CPND_MAX_REPLICA_NAME_LENGTH);
> + strncpy(buf, cp_node->ckpt_name, CPND_REP_NAME_MAX_CKPT_NAME_LENGTH);
> +
> + sprintf(buf + strlen(buf) - 1, "_%d_%llu",
> (uint32_t)m_NCS_NODE_ID_FROM_MDS_DEST(cb->cpnd_mdest_id), cp_node->ckpt_id);
Dose REP_NAME Including node_id will go up to Filename length limits
on linux (255) ?
-AVM
On 6/23/2016 4:23 PM, Hoang Vo wrote:
> osaf/libs/common/cpsv/include/cpnd.h | 1 +
> osaf/libs/common/cpsv/include/cpnd_cb.h | 5 +-
> osaf/libs/common/cpsv/include/cpnd_init.h | 3 +-
> osaf/libs/common/cpsv/include/cpsv_shm.h | 6 +-
> osaf/services/saf/cpsv/cpnd/Makefile.am | 1 +
> osaf/services/saf/cpsv/cpnd/cpnd_db.c | 6 +-
> osaf/services/saf/cpsv/cpnd/cpnd_evt.c | 71 ++++++++++++++++++--------
> osaf/services/saf/cpsv/cpnd/cpnd_main.c | 7 ++
> osaf/services/saf/cpsv/cpnd/cpnd_proc.c | 83
> ++++++++++++++++++++++--------
> osaf/services/saf/cpsv/cpnd/cpnd_res.c | 20 +++---
> 10 files changed, 143 insertions(+), 60 deletions(-)
>
>
> diff --git a/osaf/libs/common/cpsv/include/cpnd.h
> b/osaf/libs/common/cpsv/include/cpnd.h
> --- a/osaf/libs/common/cpsv/include/cpnd.h
> +++ b/osaf/libs/common/cpsv/include/cpnd.h
> @@ -34,6 +34,7 @@
> #define CPND_H
>
> #include <stdint.h>
> +#include "osaf_extended_name.h"
> #include "ncssysf_def.h"
> #include "ncs_main_papi.h"
> #include "ncssysf_tsk.h"
> diff --git a/osaf/libs/common/cpsv/include/cpnd_cb.h
> b/osaf/libs/common/cpsv/include/cpnd_cb.h
> --- a/osaf/libs/common/cpsv/include/cpnd_cb.h
> +++ b/osaf/libs/common/cpsv/include/cpnd_cb.h
> @@ -34,6 +34,9 @@ extern uint32_t gl_cpnd_cb_hdl;
> #define m_CPND_GIVEUP_CPND_CB ncshm_give_hdl(gl_cpnd_cb_hdl)
>
> #define CPND_MAX_REPLICAS 1000
> +#define CPND_REP_NAME_MAX_CKPT_NAME_LENGTH 150
> +#define CPND_MAX_REPLICA_NAME_LENGTH (CPND_REP_NAME_MAX_CKPT_NAME_LENGTH +
> 50)
> +
> #define CPSV_GEN_SECTION_ID_SIZE 4
> #define CPSV_WAIT_TIME 1000
>
> @@ -169,7 +172,7 @@ typedef struct cpnd_all_repl_write_evt_n
> typedef struct cpnd_ckpt_node {
> NCS_PATRICIA_NODE patnode;
> SaCkptCheckpointHandleT ckpt_id; /* index for identifying the
> checkpoint */
> - SaNameT ckpt_name;
> + SaConstStringT ckpt_name;
> SaCkptCheckpointCreationAttributesT create_attrib;
> SaCkptCheckpointOpenFlagsT open_flags;
> uint32_t ckpt_lcl_ref_cnt;
> diff --git a/osaf/libs/common/cpsv/include/cpnd_init.h
> b/osaf/libs/common/cpsv/include/cpnd_init.h
> --- a/osaf/libs/common/cpsv/include/cpnd_init.h
> +++ b/osaf/libs/common/cpsv/include/cpnd_init.h
> @@ -130,6 +130,7 @@ uint32_t cpnd_all_repl_rsp_expiry(CPND_C
> uint32_t cpnd_open_active_sync_expiry(CPND_CB *cb, CPND_TMR_INFO *tmr_info);
> void cpnd_proc_free_read_data(CPSV_EVT *evt);
> SaUint32T cpnd_get_scAbsenceAllowed_attr();
> +SaUint32T cpnd_get_longDnsAllowed_attr();
> /* End cpnd_proc.c */
>
> /* File : --- cpnd_amf.c */
> @@ -163,7 +164,7 @@ void cpnd_evt_node_get(CPND_CB *cb, SaCk
> void cpnd_evt_node_getnext(CPND_CB *cb, SaCkptCheckpointHandleT
> lcl_ckpt_id, CPSV_CPND_ALL_REPL_EVT_NODE **evt_node);
> uint32_t cpnd_evt_node_add(CPND_CB *cb, CPSV_CPND_ALL_REPL_EVT_NODE
> *evt_node);
> uint32_t cpnd_evt_node_del(CPND_CB *cb, CPSV_CPND_ALL_REPL_EVT_NODE
> *evt_node);
> -CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaNameT
> ckpt_name);
> +CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaConstStringT
> ckpt_name);
> CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_add(CPND_CKPT_NODE *cp_node,
> SaCkptSectionIdT *id, SaTimeT exp_time,
> uint32_t gen_flag);
> void cpnd_evt_backup_queue_add(CPND_CKPT_NODE *cp_node, CPND_EVT *evt);
> diff --git a/osaf/libs/common/cpsv/include/cpsv_shm.h
> b/osaf/libs/common/cpsv/include/cpsv_shm.h
> --- a/osaf/libs/common/cpsv/include/cpsv_shm.h
> +++ b/osaf/libs/common/cpsv/include/cpsv_shm.h
> @@ -18,6 +18,8 @@
> #ifndef CPSV_SHM_H
> #define CPSV_SHM_H
>
> +#include "osaf_extended_name.h"
> +
> #define MAX_CLIENTS 1000
> #define MAX_CKPTS 2000
> #define MAX_SIZE 30
> @@ -29,7 +31,7 @@
>
> typedef struct cpsv_ckpt_hdr {
> SaCkptCheckpointHandleT ckpt_id; /* Index for identifying the
> checkpoint */
> - SaNameT ckpt_name;
> + char ckpt_name[kOsafMaxDnLength];
> SaCkptCheckpointCreationAttributesT create_attrib;
> SaCkptCheckpointOpenFlagsT open_flags;
> uint32_t ckpt_lcl_ref_cnt;
> @@ -55,7 +57,7 @@ typedef struct cpsv_sect_hdr {
> } CPSV_SECT_HDR;
>
> typedef struct ckpt_info {
> - SaNameT ckpt_name;
> + char ckpt_name[kOsafMaxDnLength];
> SaCkptCheckpointHandleT ckpt_id;
> uint32_t maxSections;
> SaSizeT maxSecSize;
> diff --git a/osaf/services/saf/cpsv/cpnd/Makefile.am
> b/osaf/services/saf/cpsv/cpnd/Makefile.am
> --- a/osaf/services/saf/cpsv/cpnd/Makefile.am
> +++ b/osaf/services/saf/cpsv/cpnd/Makefile.am
> @@ -26,6 +26,7 @@ osaf_execbin_PROGRAMS = osafckptnd
> osafckptnd_CPPFLAGS = \
> -DSA_CLM_B01=1 \
> -DNCS_CPND=1 \
> + -DSA_EXTENDED_NAME_SOURCE \
> $(AM_CPPFLAGS) \
> -I$(top_srcdir)/osaf/libs/common/immsv/include \
> -I$(top_srcdir)/osaf/libs/common/cpsv/include
> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_db.c
> b/osaf/services/saf/cpsv/cpnd/cpnd_db.c
> --- a/osaf/services/saf/cpsv/cpnd/cpnd_db.c
> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_db.c
> @@ -158,6 +158,8 @@ void cpnd_ckpt_node_destroy(CPND_CB *cb,
>
> cpnd_ckpt_sec_map_destroy(&cp_node->replica_info);
>
> + free((void *)cp_node->ckpt_name);
> +
> m_MMGR_FREE_CPND_CKPT_NODE(cp_node);
> TRACE_LEAVE();
>
> @@ -275,7 +277,7 @@ uint32_t cpnd_client_node_del(CPND_CB *c
> *
> * Notes : None.
>
> *****************************************************************************/
> -CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaNameT
> ckpt_name)
> +CPND_CKPT_NODE *cpnd_ckpt_node_find_by_name(CPND_CB *cpnd_cb, SaConstStringT
> ckpt_name)
> {
> CPND_CKPT_NODE *ckpt_node = NULL;
> SaCkptCheckpointHandleT prev_ckpt_id;
> @@ -284,7 +286,7 @@ CPND_CKPT_NODE *cpnd_ckpt_node_find_by_n
>
> while (ckpt_node) {
> prev_ckpt_id = ckpt_node->ckpt_id;
> - if (memcmp(&ckpt_name, &ckpt_node->ckpt_name, sizeof(SaNameT))
> == 0) {
> + if (strcmp(ckpt_name, ckpt_node->ckpt_name) == 0) {
> return ckpt_node;
> }
> cpnd_ckpt_node_getnext(cpnd_cb, prev_ckpt_id, &ckpt_node);
> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
> b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
> --- a/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_evt.c
> @@ -593,7 +593,7 @@ static uint32_t cpnd_evt_proc_ckpt_final
> static uint32_t cpnd_evt_proc_ckpt_open(CPND_CB *cb, CPND_EVT *evt,
> CPSV_SEND_INFO *sinfo)
> {
> CPSV_EVT send_evt, *out_evt = NULL;
> - SaNameT ckpt_name;
> + SaConstStringT ckpt_name = NULL;
> uint32_t rc = NCSCC_RC_SUCCESS;
> CPND_CPD_DEFERRED_REQ_NODE *node = NULL;
> CPND_CKPT_CLIENT_NODE *cl_node = NULL;
> @@ -605,12 +605,18 @@ static uint32_t cpnd_evt_proc_ckpt_open(
> TRACE_ENTER();
> memset(&send_evt, '\0', sizeof(CPSV_EVT));
>
> + if ((cpnd_get_longDnsAllowed_attr() == 0) &&
> osaf_is_an_extended_name(&evt->info.openReq.ckpt_name)) {
> + LOG_ER("cpnd - longDnsAllowed == false - NOT supporting
> extended name");
> + send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_INVALID_PARAM;
> + goto agent_rsp;
> + }
> +
> if (!cpnd_is_cpd_up(cb)) {
> send_evt.info.cpa.info.openRsp.error = SA_AIS_ERR_TRY_AGAIN;
> goto agent_rsp;
> }
>
> - ckpt_name = evt->info.openReq.ckpt_name;
> + ckpt_name = osaf_extended_name_borrow(&evt->info.openReq.ckpt_name);
> client_hdl = evt->info.openReq.client_hdl;
>
> cpnd_client_node_get(cb, client_hdl, &cl_node);
> @@ -714,7 +720,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
> send_evt.type = CPSV_EVT_TYPE_CPD;
> send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_CREATE;
>
> - send_evt.info.cpd.info.ckpt_create.ckpt_name = ckpt_name;
> + osaf_extended_name_lend(ckpt_name,
> &send_evt.info.cpd.info.ckpt_create.ckpt_name);
> send_evt.info.cpd.info.ckpt_create.attributes =
> evt->info.openReq.ckpt_attrib;
> send_evt.info.cpd.info.ckpt_create.ckpt_flags =
> evt->info.openReq.ckpt_flags;
> send_evt.info.cpd.info.ckpt_create.client_version = cl_node->version;
> @@ -723,14 +729,14 @@ static uint32_t cpnd_evt_proc_ckpt_open(
> rc = cpnd_mds_msg_sync_send(cb, NCSMDS_SVC_ID_CPD, cb->cpd_mdest_id,
> &send_evt, &out_evt, CPSV_WAIT_TIME);
>
> if (rc != NCSCC_RC_SUCCESS) {
> - TRACE_4("cpnd ckpt open failure for
> ckpt_name:%s,client_hdl:%llx",ckpt_name.value,client_hdl);
> + TRACE_4("cpnd ckpt open failure for
> ckpt_name:%s,client_hdl:%llx",ckpt_name, client_hdl);
>
> if (rc == NCSCC_RC_REQ_TIMOUT) {
>
> node = (CPND_CPD_DEFERRED_REQ_NODE
> *)m_MMGR_ALLOC_CPND_CPD_DEFERRED_REQ_NODE;
> if (!node) {
> TRACE_4("cpnd cpd deferred req node memory
> allocation for ckpt_name:%s,client_hdl:%llx",
> - ckpt_name.value, client_hdl);
> + ckpt_name, client_hdl);
> send_evt.info.cpa.info.openRsp.error =
> SA_AIS_ERR_NO_MEMORY;
> goto agent_rsp;
> }
> @@ -738,7 +744,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
> memset(node, '\0', sizeof(CPND_CPD_DEFERRED_REQ_NODE));
> node->evt.type = CPSV_EVT_TYPE_CPD;
> node->evt.info.cpd.type =
> CPD_EVT_ND2D_CKPT_DESTROY_BYNAME;
> - node->evt.info.cpd.info.ckpt_destroy_byname.ckpt_name =
> ckpt_name;
> + osaf_extended_name_lend(ckpt_name,
> &node->evt.info.cpd.info.ckpt_destroy_byname.ckpt_name);
>
> ncs_enqueue(&cb->cpnd_cpd_deferred_reqs_list, (void
> *)node);
> }
> @@ -773,7 +779,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
>
> cp_node->clist = NULL;
> cp_node->cpnd_dest_list = NULL;
> - cp_node->ckpt_name = ckpt_name;
> + cp_node->ckpt_name = strdup(ckpt_name);
> cp_node->create_attrib =
> out_evt->info.cpnd.info.ckpt_info.attributes;
> cp_node->open_flags = SA_CKPT_CHECKPOINT_CREATE;
>
> @@ -828,7 +834,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
> rc = cpnd_ckpt_replica_create(cb, cp_node);
> if (rc == NCSCC_RC_FAILURE) {
> TRACE_4("cpnd ckpt rep create failed
> ckpt_name:%s,client_hdl:%llx",
> - ckpt_name.value, client_hdl);
> + ckpt_name, client_hdl);
> send_evt.info.cpa.info.openRsp.error =
> SA_AIS_ERR_NO_RESOURCES;
> goto ckpt_node_free_error;
> }
> @@ -837,14 +843,14 @@ static uint32_t cpnd_evt_proc_ckpt_open(
> rc = cpnd_ckpt_hdr_update(cp_node);
> if (rc == NCSCC_RC_FAILURE) {
> TRACE_4("cpnd ckpt hdr update failed
> ckpt_name:%s,client_hdl:%llx",
> - ckpt_name.value, client_hdl);
> + ckpt_name, client_hdl);
> }
> }
>
> rc = cpnd_restart_shm_ckpt_update(cb, cp_node, client_hdl);
> if (rc == NCSCC_RC_FAILURE) {
> TRACE_4("cpnd restart shm ckpt update failed
> ckpt_name:%s,client_hdl:%llx",
> - ckpt_name.value, client_hdl);
> + ckpt_name, client_hdl);
> send_evt.info.cpa.info.openRsp.error =
> SA_AIS_ERR_NO_RESOURCES;
> goto ckpt_shm_node_free_error;
> }
> @@ -891,12 +897,12 @@ static uint32_t cpnd_evt_proc_ckpt_open(
> if (rc == NCSCC_RC_REQ_TIMOUT) {
> send_evt.info.cpa.info.openRsp.error =
> SA_AIS_ERR_TIMEOUT;
> TRACE_4("cpnd remote to active mds send
> fail with timeout for ckpt_name:%s,cpnd_mdest_id:%"PRIu64",\
> -
> active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name.value, cb->cpnd_mdest_id,
> cp_node->active_mds_dest, cp_node->ckpt_id);
> +
> active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name, cb->cpnd_mdest_id,
> cp_node->active_mds_dest, cp_node->ckpt_id);
>
> } else {
> send_evt.info.cpa.info.openRsp.error =
> SA_AIS_ERR_TRY_AGAIN;
> TRACE_4("cpnd remote to active mds send
> fail with timeout for ckpt_name:%s,cpnd_mdest_id:%"PRIu64", \
> -
> active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name.value, cb->cpnd_mdest_id,
> cp_node->active_mds_dest, cp_node->ckpt_id);
> +
> active_mds_dest:%"PRIu64",ckpt_id:%llx",ckpt_name, cb->cpnd_mdest_id,
> cp_node->active_mds_dest, cp_node->ckpt_id);
>
> }
> goto agent_rsp;
> @@ -939,7 +945,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
> send_evt.info.cpa.info.openRsp.active_dest =
> cp_node->active_mds_dest;
> }
> if (send_evt.info.cpa.info.openRsp.error == SA_AIS_OK) {
> - TRACE_4("cpnd ckpt open success
> ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,active_mds_dest:%"PRIu64"",ckpt_name.value,
> + TRACE_4("cpnd ckpt open success
> ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,active_mds_dest:%"PRIu64"",ckpt_name,
> client_hdl, cp_node->ckpt_id,cp_node->active_mds_dest);
> /* CPND RESTART UPDATE THE SHARED MEMORY WITH CLIENT
> INFO */
> cpnd_restart_set_reader_writer_flags_cnt(cb, cl_node);
> @@ -1126,10 +1132,17 @@ static uint32_t cpnd_evt_proc_ckpt_unlin
> CPND_CKPT_NODE *cp_node = NULL;
> uint32_t rc = NCSCC_RC_SUCCESS;
> CPND_CPD_DEFERRED_REQ_NODE *node = NULL;
> + SaConstStringT ckpt_name =
> osaf_extended_name_borrow(&evt->info.ulinkReq.ckpt_name);
>
> TRACE_ENTER();
> memset(&send_evt, '\0', sizeof(CPSV_EVT));
>
> + if ((cpnd_get_longDnsAllowed_attr() == 0) &&
> osaf_is_an_extended_name(&evt->info.ulinkReq.ckpt_name)) {
> + LOG_ER("cpnd - longDnsAllowed == false - NOT supporting
> extended name");
> + send_evt.info.cpa.info.ulinkRsp.error =
> SA_AIS_ERR_INVALID_PARAM;
> + goto agent_rsp;
> + }
> +
> if (!cpnd_is_cpd_up(cb)) {
> send_evt.info.cpa.info.ulinkRsp.error = SA_AIS_ERR_TRY_AGAIN;
> goto agent_rsp;
> @@ -1168,14 +1181,14 @@ static uint32_t cpnd_evt_proc_ckpt_unlin
> }
> }
>
> - cp_node = cpnd_ckpt_node_find_by_name(cb, evt->info.ulinkReq.ckpt_name);
> + cp_node = cpnd_ckpt_node_find_by_name(cb, ckpt_name);
> if (cp_node == NULL) {
> if (out_evt != NULL)
> send_evt.info.cpa.info.ulinkRsp.error =
> out_evt->info.cpnd.info.ulink_ack.error;
> else
> send_evt.info.cpa.info.ulinkRsp.error =
> SA_AIS_ERR_TIMEOUT;
>
> - TRACE_2("cpnd proc ckpt unlink success
> ckpt_name:%s",evt->info.ulinkReq.ckpt_name.value);
> + TRACE_2("cpnd proc ckpt unlink success ckpt_name:%s",
> ckpt_name);
> goto agent_rsp;
> }
> cp_node->cpa_sinfo = *(sinfo);
> @@ -1269,7 +1282,9 @@ static uint32_t cpnd_evt_proc_ckpt_unlin
> cpnd_restart_ckpt_name_length_reset(cb, cp_node);
>
> cp_node->is_unlink = true;
> - cp_node->ckpt_name.length = 0;
> +
> + free((void *)cp_node->ckpt_name);
> + cp_node->ckpt_name = strdup("");
>
> if (cp_node->cpnd_rep_create) {
> rc = cpnd_ckpt_hdr_update(cp_node);
> @@ -1519,7 +1534,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_
>
> CPND_CKPT_NODE *cp_node = NULL;
> SaCkptHandleT client_hdl;
> - SaNameT ckpt_name;
> + SaConstStringT ckpt_name;
> CPSV_EVT send_evt;
> uint32_t rc = NCSCC_RC_SUCCESS;
> CPND_CKPT_CLIENT_NODE *cl_node = NULL;
> @@ -1527,7 +1542,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_
> TRACE_ENTER();
> memset(&send_evt, '\0', sizeof(CPSV_EVT));
>
> - ckpt_name = evt->info.ckptListUpdate.ckpt_name;
> + ckpt_name =
> osaf_extended_name_borrow(&evt->info.ckptListUpdate.ckpt_name);
> client_hdl = evt->info.ckptListUpdate.client_hdl;
>
> if (((cp_node = cpnd_ckpt_node_find_by_name(cb, ckpt_name)) != NULL) &&
> cp_node->is_unlink == false) {
> @@ -1543,8 +1558,7 @@ static uint32_t cpnd_evt_proc_ckpt_ckpt_
>
> }
> else {
> - TRACE_4("cpnd ckpt_name get failed or unlinked for ckpt_name
> :%s",ckpt_name.value);
> -
> + TRACE_4("cpnd ckpt_name get failed or unlinked for ckpt_name
> :%s",ckpt_name);
> }
>
> TRACE_LEAVE();
> @@ -3596,7 +3610,8 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
>
> send_evt.info.cpa.info.openRsp.active_dest =
>
> cp_node->active_mds_dest;
> }
> - TRACE_4("cpnd ckpt open success
> for ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,mds_mdest:%"PRIu64
> ,cp_node->ckpt_name.value,
> evt->info.ckpt_nd2nd_sync.ckpt_sync.client_hdl,
> + TRACE_4("cpnd ckpt open success
> for ckpt_name:%s,client_hdl:%llx,ckpt_id:%llx,mds_mdest:%"PRIu64
> +
> ,cp_node->ckpt_name, evt->info.ckpt_nd2nd_sync.ckpt_sync.client_hdl,
>
> cp_node->ckpt_id, cp_node->active_mds_dest);
> } else {
> memset(&des_evt, '\0',
> sizeof(CPSV_EVT));
> @@ -4079,7 +4094,7 @@ static uint32_t cpnd_evt_proc_ckpt_creat
>
> cp_node->clist = NULL;
> cp_node->cpnd_dest_list = NULL;
> - cp_node->ckpt_name = evt->info.ckpt_create.ckpt_name;
> + cp_node->ckpt_name =
> strdup(osaf_extended_name_borrow(&evt->info.ckpt_create.ckpt_name));
> cp_node->create_attrib =
> evt->info.ckpt_create.ckpt_info.attributes;
> cp_node->ckpt_id = evt->info.ckpt_create.ckpt_info.ckpt_id;
>
> @@ -4594,6 +4609,18 @@ uint32_t cpnd_evt_destroy(CPSV_EVT *evt)
> }
> break;
> }
> + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_OPEN) {
> + if
> (osaf_is_an_extended_name(&evt->info.cpnd.info.openReq.ckpt_name))
> + free((void
> *)osaf_extended_name_borrow(&evt->info.cpnd.info.openReq.ckpt_name));
> + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_UNLINK) {
> + if
> (osaf_is_an_extended_name(&evt->info.cpnd.info.ulinkReq.ckpt_name))
> + free((void
> *)osaf_extended_name_borrow(&evt->info.cpnd.info.ulinkReq.ckpt_name));
> + } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_LIST_UPDATE) {
> + if
> (osaf_is_an_extended_name(&evt->info.cpnd.info.ckptListUpdate.ckpt_name))
> + free((void
> *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckptListUpdate.ckpt_name));
> + } else if (evt->info.cpnd.type == CPND_EVT_D2ND_CKPT_CREATE) {
> + if
> (osaf_is_an_extended_name(&evt->info.cpnd.info.ckpt_create.ckpt_name))
> + free((void
> *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckpt_create.ckpt_name));
> }
>
> m_MMGR_FREE_CPSV_EVT(evt, NCS_SERVICE_ID_CPND);
> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_main.c
> b/osaf/services/saf/cpsv/cpnd/cpnd_main.c
> --- a/osaf/services/saf/cpsv/cpnd/cpnd_main.c
> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_main.c
> @@ -15,6 +15,7 @@
> *
> */
>
> +#include <stdlib.h>
> #include <ncssysf_tsk.h>
>
> #include <logtrace.h>
> @@ -27,6 +28,12 @@ static int __init_cpnd(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/cpnd/cpnd_proc.c
> b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
> --- a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
> @@ -55,6 +55,7 @@ static void cpnd_dump_shm_info(NCS_OS_PO
> static void cpnd_dump_ckpt_attri(CPND_CKPT_NODE *cp_node);
> static void cpnd_ckpt_sc_cpnd_mdest_del(CPND_CB *cb);
> static void cpnd_headless_ckpt_node_del(CPND_CB *cb);
> +static SaUint32T cpnd_get_imm_attr(char **attribute_names);
>
>
> /****************************************************************************
> * Name : cpnd_ckpt_client_add
> @@ -455,7 +456,6 @@ uint32_t cpnd_ckpt_replica_create(CPND_C
>
> uint32_t rc = NCSCC_RC_SUCCESS;
> char *buf;
> - uint8_t size = 0, total_length;
> int32_t sec_cnt = 0;
>
> TRACE_ENTER();
> @@ -466,14 +466,11 @@ uint32_t cpnd_ckpt_replica_create(CPND_C
> return NCSCC_RC_FAILURE;
> }
>
> - size = cp_node->ckpt_name.length;
> - total_length = size + sizeof(cp_node->ckpt_id) + sizeof(NODE_ID) + 5;
> -
> - buf = m_MMGR_ALLOC_CPND_DEFAULT(total_length);
> - memset(buf, '\0', total_length);
> - strncpy(buf, (char *)cp_node->ckpt_name.value, size);
> -
> - sprintf(buf + size - 1, "_%d_%llu",
> (uint32_t)m_NCS_NODE_ID_FROM_MDS_DEST(cb->cpnd_mdest_id), cp_node->ckpt_id);
> + buf = m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH);
> + memset(buf, '\0', CPND_MAX_REPLICA_NAME_LENGTH);
> + strncpy(buf, cp_node->ckpt_name, CPND_REP_NAME_MAX_CKPT_NAME_LENGTH);
> +
> + sprintf(buf + strlen(buf) - 1, "_%d_%llu",
> (uint32_t)m_NCS_NODE_ID_FROM_MDS_DEST(cb->cpnd_mdest_id), cp_node->ckpt_id);
> /* size of chkpt */
> memset(&cp_node->replica_info.open, '\0',
> sizeof(cp_node->replica_info.open));
>
> @@ -1816,7 +1813,7 @@ uint32_t cpnd_ckpt_hdr_update(CPND_CKPT_
> memset(&write_req, '\0', sizeof(write_req));
> memset(&ckpt_hdr, '\0', sizeof(CPSV_CKPT_HDR));
> ckpt_hdr.ckpt_id = cp_node->ckpt_id;
> - ckpt_hdr.ckpt_name = cp_node->ckpt_name;
> + strncpy(ckpt_hdr.ckpt_name, cp_node->ckpt_name, kOsafMaxDnLength);
> ckpt_hdr.create_attrib = cp_node->create_attrib;
> ckpt_hdr.open_flags = cp_node->open_flags;
> ckpt_hdr.is_unlink = cp_node->is_unlink;
> @@ -2122,7 +2119,7 @@ void cpnd_dump_ckpt_info(CPND_CKPT_NODE
> CPSV_CPND_DEST_INFO *cpnd_dest_list = NULL;
>
> TRACE("++++++++++++++++++++++++++++++++++++++++++++++++++");
> - TRACE("Ckpt_id - %d Ckpt Name - %.10s ", (uint32_t)ckpt_node->ckpt_id,
> ckpt_node->ckpt_name.value);
> + TRACE("Ckpt_id - %d Ckpt Name - %.10s ", (uint32_t)ckpt_node->ckpt_id,
> ckpt_node->ckpt_name);
> if (ckpt_node->is_unlink)
> TRACE("Ckpt Unlinked - ");
> if (ckpt_node->is_close)
> @@ -2529,12 +2526,12 @@ void cpnd_proc_ckpt_info_update(CPND_CB
> remaining_node--;
>
> /* send info to cpd */
> - LOG_NO("cpnd_proc_update_cpd_data::ckpt_name = %s[%llu]",
> (char*)ckpt_node->ckpt_name.value,
> + LOG_NO("cpnd_proc_update_cpd_data::ckpt_name = %s[%llu]",
> (char*)ckpt_node->ckpt_name,
> ckpt_node->ckpt_id);
> send_evt.type = CPSV_EVT_TYPE_CPD;
> send_evt.info.cpd.type = CPD_EVT_ND2D_CKPT_INFO_UPDATE;
> send_evt.info.cpd.info.ckpt_info.ckpt_id = ckpt_node->ckpt_id;
> - send_evt.info.cpd.info.ckpt_info.ckpt_name =
> ckpt_node->ckpt_name;
> + osaf_extended_name_lend(ckpt_node->ckpt_name,
> &send_evt.info.cpd.info.ckpt_info.ckpt_name);
> send_evt.info.cpd.info.ckpt_info.attributes =
> ckpt_node->create_attrib;
> send_evt.info.cpd.info.ckpt_info.ckpt_flags =
> ckpt_node->open_flags;
> send_evt.info.cpd.info.ckpt_info.num_users =
> ckpt_node->ckpt_lcl_ref_cnt;
> @@ -2725,6 +2722,56 @@ void cpnd_proc_active_down_ckpt_node_del
> SaUint32T cpnd_get_scAbsenceAllowed_attr()
> {
> SaUint32T rc_attr_val = 0;
> + char *attribute_names[] = {
> + "scAbsenceAllowed",
> + NULL
> + };
> +
> + TRACE_ENTER();
> +
> + rc_attr_val = cpnd_get_imm_attr(attribute_names);
> +
> + TRACE_LEAVE();
> + return rc_attr_val;
> +}
> +
> +/****************************************************************************************
> + * Name : cpnd_get_longDnsAllowed_attr()
> + *
> + * Description : This function gets scAbsenceAllowed attribute
> + *
> + * Arguments : -
> + *
> + * Return Values : scAbsenceAllowed attribute (0 = not allowed)
> +
> *****************************************************************************************/
> +SaUint32T cpnd_get_longDnsAllowed_attr()
> +{
> + SaUint32T rc_attr_val = 0;
> + char *attribute_names[] = {
> + "longDnsAllowed",
> + NULL
> + };
> +
> + TRACE_ENTER();
> +
> + rc_attr_val = cpnd_get_imm_attr(attribute_names);
> +
> + TRACE_LEAVE();
> + return rc_attr_val;
> +}
> +
> +/****************************************************************************************
> + * Name : cpnd_get_imm_attr
> + *
> + * Description : This function gets IMM attribute
> + *
> + * Arguments : -
> + *
> + * Return Values : scAbsenceAllowed attribute (0 = not allowed)
> +
> *****************************************************************************************/
> +static SaUint32T cpnd_get_imm_attr(char **attribute_names)
> +{
> + SaUint32T rc_attr_val = 0;
> SaAisErrorT rc = SA_AIS_OK;
> SaImmAccessorHandleT accessorHandle;
> SaImmHandleT immOmHandle;
> @@ -2733,15 +2780,10 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr
>
> TRACE_ENTER();
>
> - char *attribute_names[] = {
> - "scAbsenceAllowed",
> - NULL
> - };
> 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;
> @@ -2767,7 +2809,6 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr
> goto done;
> }
>
> -
> rc = immutil_saImmOmAccessorGet_2(accessorHandle, &object_name,
> attribute_names, &attributes);
> if (rc != SA_AIS_OK) {
> TRACE("%s saImmOmAccessorGet_2 Fail '%s'", __FUNCTION__,
> saf_error(rc));
> @@ -2776,11 +2817,9 @@ SaUint32T cpnd_get_scAbsenceAllowed_attr
>
> void *value;
>
> - /* Handle the global scAbsenceAllowed_flag */
> attribute = attributes[0];
> TRACE("%s attrName
> \"%s\"",__FUNCTION__,attribute?attribute->attrName:"");
> if ((attribute != NULL) && (attribute->attrValuesNumber != 0)) {
> - /* scAbsenceAllowed has value. Get the value */
> value = attribute->attrValues[0];
> rc_attr_val = *((SaUint32T *) value);
> }
> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_res.c
> b/osaf/services/saf/cpsv/cpnd/cpnd_res.c
> --- a/osaf/services/saf/cpsv/cpnd/cpnd_res.c
> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_res.c
> @@ -482,7 +482,7 @@ void *cpnd_restart_shm_create(NCS_OS_POS
> }
>
> memset(cp_node, '\0', sizeof(CPND_CKPT_NODE));
> - cp_node->ckpt_name = cp_info.ckpt_name;
> + cp_node->ckpt_name = strdup(cp_info.ckpt_name);
> cp_node->ckpt_id = cp_info.ckpt_id;
> cp_node->offset = cp_info.offset;
> cp_node->is_close = cp_info.is_close;
> @@ -495,12 +495,10 @@ void *cpnd_restart_shm_create(NCS_OS_POS
> if (cp_info.cpnd_rep_create) {
> /* OPEN THE SHARED MEMORY ALREADY
> CREATED FOR CHECKPOINT REPLICA */
> /* size=cp_node->ckpt_name.length; */
> - size = cp_node->ckpt_name.length;
> - total_length = size +
> sizeof(cp_node->ckpt_id) + sizeof(NODE_ID) + 5;
> - buf =
> m_MMGR_ALLOC_CPND_DEFAULT(total_length);
> - memset(buf, '\0', total_length);
> - strncpy(buf, (char
> *)cp_node->ckpt_name.value, size);
> - sprintf(buf + size - 1, "_%d_%d",
> (uint32_t)nodeid, (uint32_t)cp_node->ckpt_id);
> + buf =
> m_MMGR_ALLOC_CPND_DEFAULT(CPND_MAX_REPLICA_NAME_LENGTH);
> + memset(buf, '\0',
> CPND_MAX_REPLICA_NAME_LENGTH);
> + strncpy(buf, cp_node->ckpt_name,
> CPND_REP_NAME_MAX_CKPT_NAME_LENGTH);
> + sprintf(buf + strlen(buf) - 1,
> "_%d_%d", (uint32_t)nodeid, (uint32_t)cp_node->ckpt_id);
> rc =
> cpnd_ckpt_replica_create_res(&ckpt_rep_open, buf, &cp_node, 0, &cp_info,
> cb->shm_alloc_guaranteed);
> if (rc != NCSCC_RC_SUCCESS) {
> /* assert(0); */
> @@ -511,8 +509,10 @@ void *cpnd_restart_shm_create(NCS_OS_POS
> }
> cb->num_rep++;
> }
> - if (cp_node->is_unlink)
> - cp_node->ckpt_name.length = 0;
> + if (cp_node->is_unlink) {
> + free((void *)cp_node->ckpt_name);
> + cp_node->ckpt_name = strdup("");
> + }
>
> memset(&tmp_cp_info, '\0', sizeof(CKPT_INFO));
> memcpy(&tmp_cp_info, &cp_info,
> sizeof(CKPT_INFO));
> @@ -1021,7 +1021,7 @@ uint32_t cpnd_write_ckpt_info(CPND_CB *c
>
> TRACE_ENTER();
> memset(&ckpt_info, 0, sizeof(CKPT_INFO));
> - ckpt_info.ckpt_name = cp_node->ckpt_name;
> + strncpy(ckpt_info.ckpt_name, cp_node->ckpt_name, kOsafMaxDnLength);
> ckpt_info.ckpt_id = cp_node->ckpt_id;
> ckpt_info.maxSections = cp_node->create_attrib.maxSections;
> ckpt_info.maxSecSize = cp_node->create_attrib.maxSectionSize;
------------------------------------------------------------------------------
Attend Shape: An AT&T Tech Expo July 15-16. Meet us at AT&T Park in San
Francisco, CA to explore cutting-edge tech and listen to tech luminaries
present their vision of the future. This family event has something for
everyone, including kids. Get more information and register today.
http://sdm.link/attshape
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel