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
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to