Hi Mahesh,

Please find my review comments inline with [Ramesh].

Thanks,
Ramesh.

On 11/29/2016 4:07 PM, [email protected] wrote:
>   osaf/libs/common/cpsv/include/cpnd_cb.h   |   4 +-
>   osaf/libs/common/cpsv/include/cpnd_init.h |   8 +-
>   osaf/libs/common/cpsv/include/cpnd_sec.h  |   2 +-
>   osaf/libs/core/include/ncs_osprm.h        |   2 +-
>   osaf/services/saf/cpsv/cpnd/cpnd_db.c     |  12 ++--
>   osaf/services/saf/cpsv/cpnd/cpnd_evt.c    |  82 
> +++++++++++++++++++++---------
>   osaf/services/saf/cpsv/cpnd/cpnd_proc.c   |  31 ++++++----
>   osaf/services/saf/cpsv/cpnd/cpnd_res.c    |  24 +++------
>   osaf/services/saf/cpsv/cpnd/cpnd_sec.cc   |  12 ++--
>   9 files changed, 103 insertions(+), 74 deletions(-)
>
>
> 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
> @@ -341,8 +341,8 @@ uint32_t cpnd_amf_register(CPND_CB *cpnd
>   uint32_t cpnd_amf_deregister(CPND_CB *cpnd_cb);
>   uint32_t cpnd_client_extract_bits(uint32_t bitmap_value, uint32_t 
> *bit_position);
>   uint32_t cpnd_res_ckpt_sec_del(CPND_CKPT_NODE *cp_node);
> -uint32_t cpnd_ckpt_replica_create_res(NCS_OS_POSIX_SHM_REQ_INFO *open_req, 
> char *buf, CPND_CKPT_NODE **cp_node,
> -                                         uint32_t ref_cnt, CKPT_INFO 
> *cp_info, bool shm_alloc_guaranteed);
> +uint32_t cpnd_ckpt_replica_create_res(CPND_CB *cb, NCS_OS_POSIX_SHM_REQ_INFO 
> *open_req, char *buf, CPND_CKPT_NODE **cp_node,
> +                                         uint32_t ref_cnt, CKPT_INFO 
> *cp_info);
>   int32_t cpnd_find_free_loc(CPND_CB *cb, CPND_TYPE_INFO type);
>   uint32_t cpnd_ckpt_write_header(CPND_CB *cb, uint32_t nckpts);
>   uint32_t cpnd_cli_info_write_header(CPND_CB *cb, int32_t n_clients);
> 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
> @@ -90,7 +90,7 @@ uint32_t cpnd_ckpt_replica_create(CPND_C
>   uint32_t cpnd_ckpt_remote_cpnd_add(CPND_CKPT_NODE *cp_node, MDS_DEST 
> mds_info);
>   uint32_t cpnd_ckpt_remote_cpnd_del(CPND_CKPT_NODE *cp_node, MDS_DEST 
> mds_info);
>   int32_t cpnd_ckpt_get_lck_sec_id(CPND_CKPT_NODE *cp_node);
> -uint32_t cpnd_ckpt_sec_write(CPND_CKPT_NODE *cp_node, CPND_CKPT_SECTION_INFO
> +uint32_t cpnd_ckpt_sec_write(CPND_CB *cb, CPND_CKPT_NODE *cp_node, 
> CPND_CKPT_SECTION_INFO
>                         *sec_info, const void *data, uint64_t size, uint64_t 
> offset, uint32_t type);
>   uint32_t cpnd_ckpt_sec_read(CPND_CKPT_NODE *cp_node, CPND_CKPT_SECTION_INFO
>                        *sec_info, void *data, uint64_t size, uint64_t offset);
> @@ -164,7 +164,7 @@ void cpnd_evt_node_getnext(CPND_CB *cb,
>   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, 
> SaConstStringT ckpt_name);
> -CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_add(CPND_CKPT_NODE *cp_node, 
> SaCkptSectionIdT *id, SaTimeT exp_time,
> +CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_add(CPND_CB *cb, 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);
>   uint32_t cpnd_ckpt_node_tree_init(CPND_CB *cb);
> @@ -176,8 +176,8 @@ void cpnd_client_node_tree_cleanup(CPND_
>   void cpnd_client_node_tree_destroy(CPND_CB *cb);
>   void cpnd_allrepl_write_evt_node_tree_cleanup(CPND_CB *cb);
>   void cpnd_allrepl_write_evt_node_tree_destroy(CPND_CB *cb);
> -uint32_t cpnd_sec_hdr_update(CPND_CKPT_SECTION_INFO *pSecPtr, CPND_CKPT_NODE 
> *cp_node);
> -uint32_t cpnd_ckpt_hdr_update(CPND_CKPT_NODE *cp_node);
> +uint32_t cpnd_sec_hdr_update(CPND_CB *cb, CPND_CKPT_SECTION_INFO *pSecPtr, 
> CPND_CKPT_NODE *cp_node);
> +uint32_t cpnd_ckpt_hdr_update(CPND_CB *cb, CPND_CKPT_NODE *cp_node);
>   void cpnd_ckpt_node_destroy(CPND_CB *cb, CPND_CKPT_NODE *cp_node);
>   uint32_t cpnd_get_slot_sub_slot_id_from_mds_dest(MDS_DEST dest);
>   uint32_t cpnd_get_slot_sub_slot_id_from_node_id(NCS_NODE_ID i_node_id);
> diff --git a/osaf/libs/common/cpsv/include/cpnd_sec.h 
> b/osaf/libs/common/cpsv/include/cpnd_sec.h
> --- a/osaf/libs/common/cpsv/include/cpnd_sec.h
> +++ b/osaf/libs/common/cpsv/include/cpnd_sec.h
> @@ -39,7 +39,7 @@ CPND_CKPT_SECTION_INFO *
>   cpnd_ckpt_sec_get_create(const CPND_CKPT_NODE *, const SaCkptSectionIdT *);
>   
>   CPND_CKPT_SECTION_INFO *
> -cpnd_ckpt_sec_del(CPND_CKPT_NODE *, SaCkptSectionIdT *);
> +cpnd_ckpt_sec_del(CPND_CB *cb, CPND_CKPT_NODE *, SaCkptSectionIdT *);
>   
>   CPND_CKPT_SECTION_INFO *
>   cpnd_get_sect_with_id(const CPND_CKPT_NODE *, uint32_t lcl_sec_id);
> diff --git a/osaf/libs/core/include/ncs_osprm.h 
> b/osaf/libs/core/include/ncs_osprm.h
> --- a/osaf/libs/core/include/ncs_osprm.h
> +++ b/osaf/libs/core/include/ncs_osprm.h
> @@ -564,7 +564,6 @@ typedef struct ncs_os_posix_shm_req_open
>     uint32_t i_flags;
>     uint32_t i_map_flags;
>     uint64_t i_size;
> -  bool ensures_space;
>     uint64_t i_offset;
>     void *o_addr;
>     int32_t o_fd;
> @@ -600,6 +599,7 @@ typedef struct ncs_os_posix_shm_req_writ
>   
>   typedef struct ncs_shm_req_info {
>     NCS_OS_POSIX_SHM_REQ_TYPE type;
> +  bool ensures_space;
>   
>     union {
>       NCS_OS_POSIX_SHM_REQ_OPEN_INFO open;
> 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
> @@ -384,7 +384,7 @@ uint32_t cpnd_evt_node_del(CPND_CB *cb,
>    *
>    * Notes         : None.
>    
> *****************************************************************************/
> -CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_add(CPND_CKPT_NODE *cp_node, 
> SaCkptSectionIdT *id,
> +CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_add(CPND_CB *cb, CPND_CKPT_NODE 
> *cp_node, SaCkptSectionIdT *id,
>                                         SaTimeT exp_time, uint32_t gen_flag)
>   {
>       CPND_CKPT_SECTION_INFO *pSecPtr = NULL;
> @@ -453,15 +453,15 @@ CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_ad
>       cp_node->replica_info.n_secs++;
>   
>       /* UPDATE THE SECTION HEADER */
> -     rc = cpnd_sec_hdr_update(pSecPtr, cp_node);
> +     rc = cpnd_sec_hdr_update(cb, pSecPtr, cp_node);
>       if (rc == NCSCC_RC_FAILURE) {
> -             LOG_NO("cpnd sect hdr update failed");
> +             LOG_ER("cpnd sect hdr update failed");
>               goto section_hdr_update_fails;
>       }
>       /* UPDATE THE CHECKPOINT HEADER */
> -     rc = cpnd_ckpt_hdr_update(cp_node);
> +     rc = cpnd_ckpt_hdr_update(cb, cp_node);
>       if (rc == NCSCC_RC_FAILURE) {
> -             LOG_NO("cpnd ckpt hdr update failed");
> +             LOG_ER("cpnd ckpt hdr update failed");
>               goto ckpt_hdr_update_fails;
>       }
>   
> @@ -470,7 +470,7 @@ CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_ad
>   
>    section_hdr_update_fails:
>    ckpt_hdr_update_fails:
> -     cpnd_ckpt_sec_del(cp_node, id);
> +     cpnd_ckpt_sec_del(cb, cp_node, id);
>   
>    section_add_fails:
>       if (pSecPtr->sec_id.id != NULL)
> 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
> @@ -834,10 +834,12 @@ static uint32_t cpnd_evt_proc_ckpt_open(
>                       }
>   
>                       /* UPDATE THE CHECKPOINT HEADER */
> -                     rc = cpnd_ckpt_hdr_update(cp_node);
> +                     rc = cpnd_ckpt_hdr_update(cb, cp_node);
>                       if (rc == NCSCC_RC_FAILURE) {
> -                             TRACE_4("cpnd ckpt hdr update failed 
> ckpt_name:%s,client_hdl:%llx",
> +                             LOG_ER("cpnd ckpt hdr update failed 
> ckpt_name:%s,client_hdl:%llx",
>                                               ckpt_name, client_hdl);
> +                             send_evt.info.cpa.info.openRsp.error = 
> SA_AIS_ERR_NO_RESOURCES;
> +                             goto ckpt_node_free_error;
[Ramesh]: It suppose to go to "ckpt_shm_node_free_error" to do 
cpnd_ckpt_replica_destroy().
>                       }
>               }
>   
> @@ -861,7 +863,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
>                   cp_node->create_attrib.maxSections == 1) {
>   
>                       SaCkptSectionIdT sec_id = SA_CKPT_DEFAULT_SECTION_ID;
> -                     if(cpnd_ckpt_sec_add(cp_node, &sec_id, 0, 0) == NULL) {
> +                     if(cpnd_ckpt_sec_add(cb, cp_node, &sec_id, 0, 0) == 
> NULL) {
>                               TRACE_4("cpnd ckpt rep create failed with 
> rc:%d",rc);
>                               goto ckpt_shm_node_free_error;
>                       }
> @@ -1275,7 +1277,12 @@ static uint32_t cpnd_evt_proc_ckpt_unlin
>               cp_node->ckpt_name = strdup("");
>   
>               if (cp_node->cpnd_rep_create) {
> -                     rc = cpnd_ckpt_hdr_update(cp_node);
> +                     rc = cpnd_ckpt_hdr_update(cb, cp_node);
> +                     if (rc == NCSCC_RC_FAILURE) {
> +                             error = SA_AIS_ERR_NO_RESOURCES;
> +                             LOG_ER("cpnd ckpt hdr update failed for 
> ckpt_id:%llx,rc:%d",cp_node->ckpt_id, rc);
> +                             goto agent_rsp;
> +                        }
>   
>               }
>               TRACE_4("cpnd proc ckpt unlink set for 
> ckpt_id:%llx",cp_node->ckpt_id);
> @@ -1484,7 +1491,11 @@ static uint32_t cpnd_evt_proc_ckpt_rdset
>       cp_node->is_rdset = true;
>       /*Non-collocated which does not have replica */
>       if (cp_node->cpnd_rep_create)
> -             cpnd_ckpt_hdr_update(cp_node);
> +              if (cpnd_ckpt_hdr_update(cb, cp_node) == NCSCC_RC_FAILURE) {
> +                      LOG_ER("cpnd sect hdr update failed");
> +                      send_evt.info.cpa.info.rdsetRsp.error = 
> SA_AIS_ERR_NO_RESOURCES;
> +                      goto out_evt_free;
> +              }
>   
>       send_evt.info.cpa.info.rdsetRsp.error = SA_AIS_OK;
>   
> @@ -1631,9 +1642,13 @@ static uint32_t cpnd_evt_proc_ckpt_arep_
>               }
>       }
>   
> -     rc = cpnd_ckpt_hdr_update(cp_node);
> -
> -     send_evt.info.cpa.info.arsetRsp.error = SA_AIS_OK;
> +     rc = cpnd_ckpt_hdr_update(cb, cp_node);
> +     if (rc == NCSCC_RC_FAILURE) {
> +             LOG_ER("cpnd  ckpt hdr update failed");
> +             send_evt.info.cpa.info.arsetRsp.error = SA_AIS_ERR_NO_RESOURCES;
> +     } else {
> +             send_evt.info.cpa.info.arsetRsp.error = SA_AIS_OK;
> +     }
[Ramesh]: Minor code adjustments, if FAILURE do goto agent_rsp and 
remove else and have SA_AIS_OK as final update.
         goto agent_rsp;

>       goto agent_rsp;
>   
>    agent_rsp:
> @@ -2082,7 +2097,11 @@ static uint32_t cpnd_evt_proc_ckpt_sect_
>                       sec_info->ckpt_sec_exptmr.uarg = cb->cpnd_cb_hdl_id;
>                       sec_info->ckpt_sec_exptmr.lcl_sec_id = 
> sec_info->lcl_sec_id;
>   
> -                     cpnd_sec_hdr_update(sec_info, cp_node);
> +                     if (cpnd_sec_hdr_update(cb, sec_info, cp_node) == 
> NCSCC_RC_FAILURE) {
> +                             LOG_ER("cpnd sect hdr update failed");
> +                             send_evt.info.cpa.info.sec_exptmr_rsp.error = 
> SA_AIS_ERR_NO_RESOURCES;
> +                             goto agent_rsp;
> +                     }
>   
>                       cpnd_tmr_start(&sec_info->ckpt_sec_exptmr,
>                                      
> m_CPSV_CONVERT_SATIME_TEN_MILLI_SEC(sec_info->exp_tmr));
> @@ -2108,7 +2127,11 @@ static uint32_t cpnd_evt_proc_ckpt_sect_
>               }
>               if (cp_node->cpnd_rep_create) {
>                       sec_info->exp_tmr = evt->info.sec_expset.exp_time;
> -                     cpnd_sec_hdr_update(sec_info, cp_node);
> +                     if (cpnd_sec_hdr_update(cb, sec_info, cp_node) == 
> NCSCC_RC_FAILURE) {
> +                             LOG_ER("cpnd sect hdr update failed");
> +                             send_evt.info.cpa.info.sec_exptmr_rsp.error = 
> SA_AIS_ERR_NO_RESOURCES;
> +                             goto agent_rsp;
> +                     }
>               }
>       }
>   
> @@ -2237,11 +2260,11 @@ static uint32_t cpnd_evt_proc_ckpt_sect_
>   
>       if (cp_node->cpnd_rep_create) {
>               if (gen_sec_id)
> -                     sec_info = cpnd_ckpt_sec_add(cp_node, 
> evt->info.sec_creatReq.sec_attri.sectionId,
> +                     sec_info = cpnd_ckpt_sec_add(cb, cp_node, 
> evt->info.sec_creatReq.sec_attri.sectionId,
>                                                    
> evt->info.sec_creatReq.sec_attri.expirationTime, 1);
>   
>               else
> -                     sec_info = cpnd_ckpt_sec_add(cp_node, 
> evt->info.sec_creatReq.sec_attri.sectionId,
> +                     sec_info = cpnd_ckpt_sec_add(cb, cp_node, 
> evt->info.sec_creatReq.sec_attri.sectionId,
>                                                    
> evt->info.sec_creatReq.sec_attri.expirationTime, 0);
>   
>               if (sec_info == NULL) {
> @@ -2255,7 +2278,7 @@ static uint32_t cpnd_evt_proc_ckpt_sect_
>   
>               if ((evt->info.sec_creatReq.init_data != NULL) && 
> (evt->info.sec_creatReq.init_size != 0)) {
>   
> -                     rc = cpnd_ckpt_sec_write(cp_node, sec_info, 
> evt->info.sec_creatReq.init_data,
> +                     rc = cpnd_ckpt_sec_write(cb, cp_node, sec_info, 
> evt->info.sec_creatReq.init_data,
>                                                
> evt->info.sec_creatReq.init_size, 0, 1);
>                       if (rc == NCSCC_RC_FAILURE) {
>                               TRACE_4("cpnd ckpt sect write failed for 
> section_is:%s,ckpt_id:%llx",sec_info->sec_id.id, cp_node->ckpt_id);
[Ramesh]: Similarly if there is a failure here, What happens to the 
sec_info related structs added to the DB in the above called function 
cpnd_ckpt_sec_add()? Also with the sec_hdr and ckpt_hdr written to  
shared memory?

> @@ -2357,10 +2380,10 @@ static uint32_t cpnd_evt_proc_ckpt_sect_
>                                                               /* delete the 
> section */
>                                                               if (gen_sec_id)
>                                                                       
> tmp_sec_info =
> -                                                                     
> cpnd_ckpt_sec_del(cp_node, &sec_info->sec_id);
> +                                                                     
> cpnd_ckpt_sec_del(cb, cp_node, &sec_info->sec_id);
>                                                               else
>                                                                       
> tmp_sec_info =
> -                                                                     
> cpnd_ckpt_sec_del(cp_node,
> +                                                                     
> cpnd_ckpt_sec_del(cb, cp_node,
>                                                                               
>         evt->info.sec_creatReq.
>                                                                               
>         sec_attri.sectionId);
>   
> @@ -2494,7 +2517,7 @@ static uint32_t cpnd_evt_proc_ckpt_sect_
>       rc = cpnd_ckpt_sec_find(cp_node, &evt->info.sec_delReq.sec_id);
>       if (rc == NCSCC_RC_SUCCESS) {
>   
> -             sec_info = cpnd_ckpt_sec_del(cp_node, 
> &evt->info.sec_delReq.sec_id);
> +             sec_info = cpnd_ckpt_sec_del(cb, cp_node, 
> &evt->info.sec_delReq.sec_id);
>               /* resetting lcl_sec_id mapping */
>               if (sec_info == NULL) {
>                       rc = NCSCC_RC_FAILURE;
> @@ -2639,7 +2662,7 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
>       }
>   
>       if (cp_node->cpnd_rep_create) {
> -             sec_info = cpnd_ckpt_sec_add(cp_node, 
> evt->info.active_sec_creat.sec_attri.sectionId,
> +             sec_info = cpnd_ckpt_sec_add(cb, cp_node, 
> evt->info.active_sec_creat.sec_attri.sectionId,
>                                            
> evt->info.active_sec_creat.sec_attri.expirationTime, 0);
>               if (sec_info == NULL) {
>                       TRACE_4("cpnd ckpt sect add failed for 
> sect_id:%s,ckpt_id:%llx",
> @@ -2649,7 +2672,7 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
>               }
>   
>               if (evt->info.active_sec_creat.init_data != NULL) {
> -                     rc = cpnd_ckpt_sec_write(cp_node, sec_info, 
> evt->info.active_sec_creat.init_data,
> +                     rc = cpnd_ckpt_sec_write(cb, cp_node, sec_info, 
> evt->info.active_sec_creat.init_data,
>                                                
> evt->info.active_sec_creat.init_size, 0, 1);
>                       if (rc == NCSCC_RC_FAILURE) {
>                               TRACE_4("cpnd ckpt sect write failed ");
[Ramesh]: Similarly if there is a failure here, What happens to the 
sec_info related structs added to the DB in the above called function 
cpnd_ckpt_sec_add()? Also with the sec_hdr and ckpt_hdr written to  
shared memory?
> @@ -2774,7 +2797,7 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
>               send_evt.info.cpnd.info.sec_delete_rsp.error = 
> SA_AIS_ERR_TRY_AGAIN;
>               goto nd_rsp;
>       }
> -     sec_info = cpnd_ckpt_sec_del(cp_node, &evt->info.sec_delete_req.sec_id);
> +     sec_info = cpnd_ckpt_sec_del(cb, cp_node, 
> &evt->info.sec_delete_req.sec_id);
>       if (sec_info == NULL) {
>               if 
> (m_CPND_IS_COLLOCATED_ATTR_SET(cp_node->create_attrib.creationFlags)) {
>                       TRACE_4("cpnd ckpt sect del failed for 
> sec_id:%s,ckpt_id:%llx",
> @@ -2883,7 +2906,13 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
>                       sec_info->ckpt_sec_exptmr.ckpt_id = cp_node->ckpt_id;
>   
>                       if (cp_node->cpnd_rep_create) {
> -                             cpnd_sec_hdr_update(sec_info, cp_node);
> +                             if ((cpnd_sec_hdr_update(cb, sec_info, 
> cp_node)) == NCSCC_RC_FAILURE) {
> +                                     LOG_ER("cpnd sect hdr update failed");
> +                                     send_evt.type = CPSV_EVT_TYPE_CPND;
> +                                     send_evt.info.cpnd.type = 
> CPSV_EVT_ND2ND_CKPT_SECT_EXPTMR_RSP;
> +                                     
> send_evt.info.cpnd.info.sec_exp_rsp.error = SA_AIS_ERR_NO_RESOURCES;
> +                                     goto nd_rsp;
> +                             }
>                       }
>                       cpnd_tmr_start(&sec_info->ckpt_sec_exptmr, 
> sec_info->exp_tmr);
>               }
> @@ -4144,15 +4173,16 @@ static uint32_t cpnd_evt_proc_ckpt_creat
>                               TRACE_4("cpnd ckpt rep create failed for 
> ckpt_id:%llx,rc:%d",cp_node->ckpt_id, rc);
>                               goto ckpt_replica_create_failed;
>                       }
> -                     rc = cpnd_ckpt_hdr_update(cp_node);
> +                     rc = cpnd_ckpt_hdr_update(cb, cp_node);
>                       if (rc == NCSCC_RC_FAILURE) {
> -                             TRACE_4("cpnd ckpt hdr update failed for 
> ckpt_id:%llx,rc:%d",cp_node->ckpt_id, rc);
> +                             LOG_ER("cpnd ckpt hdr update failed for 
> ckpt_id:%llx,rc:%d",cp_node->ckpt_id, rc);
> +                             goto ckpt_replica_create_failed;
[Ramesh]: There shall be a separate goto to do 
cpnd_ckpt_replica_destroy(), to reverse the created ones done in 
cpnd_ckpt_replica_create().
>                       }
>   
>               }
>               if (evt->info.ckpt_create.ckpt_info.ckpt_rep_create == true && 
> cp_node->create_attrib.maxSections == 1) {
>                       SaCkptSectionIdT sec_id = SA_CKPT_DEFAULT_SECTION_ID;
> -                     if (cpnd_ckpt_sec_add(cp_node, &sec_id, 0, 0) == NULL) {
> +                     if (cpnd_ckpt_sec_add(cb, cp_node, &sec_id, 0, 0) == 
> NULL) {
>                               TRACE_4("cpnd ckpt rep create failed with 
> rc:%d",rc);
>                               goto ckpt_replica_create_failed;
>                       }
> @@ -4167,9 +4197,10 @@ static uint32_t cpnd_evt_proc_ckpt_creat
>                       TRACE_4("cpnd ckpt rep create failed with rc:%d",rc);
>                       goto ckpt_replica_create_failed;
>               }
> -             rc = cpnd_ckpt_hdr_update(cp_node);
> +             rc = cpnd_ckpt_hdr_update(cb, cp_node);
>               if (rc == NCSCC_RC_FAILURE) {
>                       TRACE_4("CPND - Ckpt Header Update Failed with 
> rc:%d",rc);
> +                     goto ckpt_replica_create_failed;
[Ramesh]: Similarly here too.. that there shall be a separate goto to do 
cpnd_ckpt_replica_destroy(), to reverse the created ones done in 
cpnd_ckpt_replica_create().
>               }
>       }
>   
> @@ -4185,7 +4216,8 @@ static uint32_t cpnd_evt_proc_ckpt_creat
>       rc = cpnd_mds_msg_send(cb, NCSMDS_SVC_ID_CPND, 
> cp_node->active_mds_dest, &send_evt);
>   
>       if (rc != NCSCC_RC_SUCCESS) {
> -             TRACE_4("cpnd remote to active mds send failed for 
> cpnd_mdest_id:%"PRIu64",active_mds_dest:%"PRIu64",ckpt_id:%llx,rc%d",cb->cpnd_mdest_id,
>  cp_node->active_mds_dest, cp_node->ckpt_id, rc);
> +             TRACE_4("cpnd remote to active mds send failed for 
> cpnd_mdest_id:%"PRIu64",active_mds_dest:%"PRIu64",ckpt_id:%llx,rc%d",
> +                             cb->cpnd_mdest_id, cp_node->active_mds_dest, 
> cp_node->ckpt_id, rc);
>   
>               goto ckpt_replica_create_failed;
>       }
> 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
> @@ -478,10 +478,7 @@ uint32_t cpnd_ckpt_replica_create(CPND_C
>       cp_node->replica_info.open.info.open.i_size =
>           sizeof(CPSV_CKPT_HDR) + cp_node->create_attrib.maxSections * 
> (sizeof(CPSV_SECT_HDR) +
>                                                                         
> cp_node->create_attrib.maxSectionSize);
> -     if (cb->shm_alloc_guaranteed == true)
> -             cp_node->replica_info.open.info.open.ensures_space = true;
> -     else
> -             cp_node->replica_info.open.info.open.ensures_space = false;
> +     cp_node->replica_info.open.ensures_space = cb->shm_alloc_guaranteed;
>   
>       cp_node->replica_info.open.info.open.i_offset = 0;
>       cp_node->replica_info.open.info.open.i_name = buf;
> @@ -642,7 +639,7 @@ int32_t cpnd_ckpt_get_lck_sec_id(CPND_CK
>    *
>    * Notes         : None.
>    
> *****************************************************************************/
> -uint32_t cpnd_ckpt_sec_write(CPND_CKPT_NODE *cp_node, CPND_CKPT_SECTION_INFO
> +uint32_t cpnd_ckpt_sec_write(CPND_CB *cb, CPND_CKPT_NODE *cp_node, 
> CPND_CKPT_SECTION_INFO
>                         *sec_info, const void *data, uint64_t size, uint64_t 
> offset, uint32_t type)
>   {                           /* for sync type=2 */
>       uint32_t rc = NCSCC_RC_SUCCESS;
> @@ -674,7 +671,7 @@ uint32_t cpnd_ckpt_sec_write(CPND_CKPT_N
>       write_req.info.write.i_offset = offset;
>   
>       write_req.info.write.i_write_size = size;
> -
> +     write_req.ensures_space = cb->shm_alloc_guaranteed;
>       ncs_os_posix_shm(&write_req);
[Ramesh]: Please handle the return code of ncs_os_posix_shm(). Also 
better to memset write_req struct with 0.
>   
>       m_GET_TIME_STAMP(sec_info->lastUpdate);
> @@ -687,13 +684,19 @@ uint32_t cpnd_ckpt_sec_write(CPND_CKPT_N
>               }
>   
>               /* SECTION HEADER UPDATE */
> -             cpnd_sec_hdr_update(sec_info, cp_node);
> +             if (cpnd_sec_hdr_update(cb, sec_info, cp_node) == 
> NCSCC_RC_FAILURE) {
> +                    LOG_ER("cpnd sect hdr update failed");
> +                 rc = NCSCC_RC_FAILURE;
[Ramesh]: Don't we need to revert the updates happened through above 
ncs_os_posix_shm()?
> +                }
>   
>       } else if ((type == 1) || (type == 3)) {
>               cp_node->replica_info.mem_used -= sec_info->sec_size;
>               sec_info->sec_size = size;
>               cp_node->replica_info.mem_used += size;
> -             cpnd_sec_hdr_update(sec_info, cp_node);
> +             if ((cpnd_sec_hdr_update(cb, sec_info, cp_node)) == 
> NCSCC_RC_FAILURE) {
> +                     LOG_ER("cpnd sect hdr update failed");
> +                     rc = NCSCC_RC_FAILURE;
> +             }
>       }
>       TRACE_LEAVE();
>       return rc;
> @@ -958,7 +961,7 @@ uint32_t cpnd_ckpt_update_replica(CPND_C
>               sec_info = cpnd_ckpt_sec_get_create(cp_node, &data->sec_id);
>               if (sec_info == NULL) {
>                       if (type == CPSV_CKPT_ACCESS_SYNC) {
> -                             sec_info = cpnd_ckpt_sec_add(cp_node, 
> &data->sec_id, data->expirationTime, 0);
> +                             sec_info = cpnd_ckpt_sec_add(cb, cp_node, 
> &data->sec_id, data->expirationTime, 0);
>   
>                               if (sec_info == NULL) {
>                                       TRACE_4("cpnd - ckpt sect add failed , 
> sec_id:%s ckpt_id:%llx",data->sec_id.id,cp_node->ckpt_id);
> @@ -975,7 +978,7 @@ uint32_t cpnd_ckpt_update_replica(CPND_C
>                       }
>               }
>   
> -             rc = cpnd_ckpt_sec_write(cp_node, sec_info, data->data, 
> data->dataSize,
> +             rc = cpnd_ckpt_sec_write(cb, cp_node, sec_info, data->data, 
> data->dataSize,
>                                        data->dataOffset, write_data->type);
[Ramesh]: If there is a failure here, What happens to the sec_info 
related structs added to the DB in the above called function 
cpnd_ckpt_sec_add()? Also with the sec_hdr and ckpt_hdr written to  
shared memory?
>               if (rc == NCSCC_RC_FAILURE) {
>                       TRACE("cpnd ckpt sect write failed for 
> sec_id:%s",data->sec_id.id);
> @@ -1544,7 +1547,7 @@ uint32_t cpnd_proc_sec_expiry(CPND_CB *c
>               return NCSCC_RC_FAILURE;
>       }
>   
> -     cpnd_ckpt_sec_del(cp_node, &pSec_info->sec_id);
> +     cpnd_ckpt_sec_del(cb, cp_node, &pSec_info->sec_id);
>       cp_node->replica_info.shm_sec_mapping[pSec_info->lcl_sec_id] = 1;
>   
>       /* send out destory to all cpnd's maintaining this ckpt */
> @@ -1804,7 +1807,7 @@ cpnd_proc_getnext_section(CPND_CKPT_NODE
>    * Return Values : Success / Error
>   
> ****************************************************************************/
>   
> -uint32_t cpnd_ckpt_hdr_update(CPND_CKPT_NODE *cp_node)
> +uint32_t cpnd_ckpt_hdr_update(CPND_CB *cb, CPND_CKPT_NODE *cp_node)
>   {
>       CPSV_CKPT_HDR ckpt_hdr;
>       uint32_t rc = NCSCC_RC_SUCCESS;
> @@ -1830,6 +1833,7 @@ uint32_t cpnd_ckpt_hdr_update(CPND_CKPT_
>       write_req.info.write.i_from_buff = (CPSV_CKPT_HDR *)&ckpt_hdr;
>       write_req.info.write.i_offset = 0;
>       write_req.info.write.i_write_size = sizeof(CPSV_CKPT_HDR);
> +     write_req.ensures_space = cb->shm_alloc_guaranteed;
>       rc = ncs_os_posix_shm(&write_req);
>   
>       return rc;
> @@ -1846,7 +1850,7 @@ uint32_t cpnd_ckpt_hdr_update(CPND_CKPT_
>    * Return Values : Success / Error
>   
> ***********************************************************************************/
>   
> -uint32_t cpnd_sec_hdr_update(CPND_CKPT_SECTION_INFO *sec_info, 
> CPND_CKPT_NODE *cp_node)
> +uint32_t cpnd_sec_hdr_update(CPND_CB *cb, CPND_CKPT_SECTION_INFO *sec_info, 
> CPND_CKPT_NODE *cp_node)
>   {
>       CPSV_SECT_HDR sec_hdr;
>       uint32_t rc = NCSCC_RC_SUCCESS;
> @@ -1872,6 +1876,7 @@ uint32_t cpnd_sec_hdr_update(CPND_CKPT_S
>       write_req.info.write.i_offset =
>           sec_info->lcl_sec_id * (sizeof(CPSV_SECT_HDR) + 
> cp_node->create_attrib.maxSectionSize);
>       write_req.info.write.i_write_size = sizeof(CPSV_SECT_HDR);
> +     write_req.ensures_space = cb->shm_alloc_guaranteed;
>       rc = ncs_os_posix_shm(&write_req);
>   
>       return rc;
> 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
> @@ -149,8 +149,8 @@ uint32_t cpnd_res_ckpt_sec_del(CPND_CKPT
>    |-----------|----------|-----------|--------|----------|------------ 
> |----------|---------|
>   */
>   
> -uint32_t cpnd_ckpt_replica_create_res(NCS_OS_POSIX_SHM_REQ_INFO *open_req, 
> char *buf, CPND_CKPT_NODE **cp_node,
> -                                uint32_t ref_cnt, CKPT_INFO *cp_info, bool 
> shm_alloc_guaranteed)
> +uint32_t cpnd_ckpt_replica_create_res(CPND_CB *cb, NCS_OS_POSIX_SHM_REQ_INFO 
> *open_req, char *buf, CPND_CKPT_NODE **cp_node,
> +                                uint32_t ref_cnt, CKPT_INFO *cp_info)
>   {
>   /*   NCS_OS_POSIX_SHM_REQ_INFO read_req,shm_read; */
>       CPSV_CKPT_HDR ckpt_hdr;
> @@ -165,15 +165,12 @@ uint32_t cpnd_ckpt_replica_create_res(NC
>       open_req->type = NCS_OS_POSIX_SHM_REQ_OPEN;
>       open_req->info.open.i_size =
>           sizeof(CPSV_CKPT_HDR) + (cp_info->maxSections * 
> ((sizeof(CPSV_SECT_HDR) + cp_info->maxSecSize)));
> -     if (shm_alloc_guaranteed == true)
> -             open_req->info.open.ensures_space = true;
> -     else
> -             open_req->info.open.ensures_space = false;
>       open_req->info.open.i_offset = 0;
>       open_req->info.open.i_name = buf;
>       open_req->info.open.i_map_flags = MAP_SHARED;
>       open_req->info.open.o_addr = NULL;
>       open_req->info.open.i_flags = O_RDWR;
> +     open_req->ensures_space = cb->shm_alloc_guaranteed;
>       rc = ncs_os_posix_shm(open_req);
>       if (rc != NCSCC_RC_SUCCESS) {
>               LOG_ER("cpnd shm open request failed %s",buf);
> @@ -362,10 +359,7 @@ void *cpnd_restart_shm_create(NCS_OS_POS
>       cpnd_open_req->info.open.i_size = sizeof(CPND_SHM_VERSION) +
>           sizeof(CLIENT_HDR) + (MAX_CLIENTS * sizeof(CLIENT_INFO)) + 
> sizeof(CKPT_HDR) +
>           (MAX_CKPTS * sizeof(CKPT_INFO));
> -     if (cb->shm_alloc_guaranteed == true)
> -             cpnd_open_req->info.open.ensures_space = true;
> -     else
> -             cpnd_open_req->info.open.ensures_space = false;
> +     cpnd_open_req->ensures_space = cb->shm_alloc_guaranteed;
>       cpnd_open_req->info.open.i_offset = 0;
>       cpnd_open_req->info.open.i_name = buffer;
>       cpnd_open_req->info.open.i_map_flags = MAP_SHARED;
> @@ -529,7 +523,7 @@ void *cpnd_restart_shm_create(NCS_OS_POS
>                                       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, 
> "_%u_%llu", (uint32_t)nodeid, cp_node->ckpt_id);
> -                                     rc = 
> cpnd_ckpt_replica_create_res(&ckpt_rep_open, buf, &cp_node, 0, &cp_info, 
> cb->shm_alloc_guaranteed);
> +                                     rc = cpnd_ckpt_replica_create_res(cb, 
> &ckpt_rep_open, buf, &cp_node, 0, &cp_info);
>                                       if (rc != NCSCC_RC_SUCCESS) {
>                                               /*   assert(0); */
>                                               TRACE_4("cpnd ckpt replica 
> create failed with return value %d",rc);
> @@ -1170,6 +1164,7 @@ uint32_t cpnd_restart_client_node_del(CP
>       }
>       clinfo_write.info.write.i_offset = cl_node->offset * 
> sizeof(CLIENT_INFO);
>       clinfo_write.info.write.i_write_size = sizeof(CLIENT_INFO);
> +     clinfo_write.ensures_space = cb->shm_alloc_guaranteed;
>       rc = ncs_os_posix_shm(&clinfo_write);
>       if (rc != NCSCC_RC_SUCCESS) {
>               LOG_ER("cpnd ckpt info write failed");
> @@ -1582,10 +1577,7 @@ static uint32_t cpnd_shm_extended_open(C
>   
>       cpnd_open_req.type = NCS_OS_POSIX_SHM_REQ_OPEN;
>       cpnd_open_req.info.open.i_size = MAX_CKPTS * sizeof(CKPT_EXTENDED_INFO);
> -     if (cb->shm_alloc_guaranteed == true)
> -             cpnd_open_req.info.open.ensures_space = true;
> -     else
> -             cpnd_open_req.info.open.ensures_space = false;
> +     cpnd_open_req.ensures_space = cb->shm_alloc_guaranteed;
>       cpnd_open_req.info.open.i_offset = 0;
>       cpnd_open_req.info.open.i_name = buffer;
>       cpnd_open_req.info.open.i_map_flags = MAP_SHARED;
> @@ -1738,4 +1730,4 @@ static void cpnd_destroy_shm(NCS_OS_POSI
>       }
>   
>       TRACE_LEAVE();
> -}
> \ No newline at end of file
> +}
> diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_sec.cc 
> b/osaf/services/saf/cpsv/cpnd/cpnd_sec.cc
> --- a/osaf/services/saf/cpsv/cpnd/cpnd_sec.cc
> +++ b/osaf/services/saf/cpsv/cpnd/cpnd_sec.cc
> @@ -169,7 +169,7 @@ cpnd_ckpt_sec_find(const CPND_CKPT_NODE
>    * Notes         : None.
>    
> *****************************************************************************/
>   CPND_CKPT_SECTION_INFO *
> -cpnd_ckpt_sec_del(CPND_CKPT_NODE *cp_node, SaCkptSectionIdT *id)
> +cpnd_ckpt_sec_del(CPND_CB *cb, CPND_CKPT_NODE *cp_node, SaCkptSectionIdT *id)
>   {
>     CPND_CKPT_SECTION_INFO *sectionInfo(0);
>   
> @@ -211,17 +211,17 @@ cpnd_ckpt_sec_del(CPND_CKPT_NODE *cp_nod
>       cp_node->replica_info.mem_used = cp_node->replica_info.mem_used - 
> (sectionInfo->sec_size);
>   
>       // UPDATE THE SECTION HEADER
> -    uint32_t rc(cpnd_sec_hdr_update(sectionInfo, cp_node));
> +    uint32_t rc(cpnd_sec_hdr_update(cb, sectionInfo, cp_node));
[Ramesh]: Not able to follow the flow, why a sec_hdr  write is happening 
in cpnd_ckpt_sec_del() flow?, it suppose to delete the entry right?
>       if (rc == NCSCC_RC_FAILURE) {
> -      TRACE_4("cpnd sect hdr update failed");
> +         LOG_ER("cpnd sect hdr update failed");
>       }
>   
>       // UPDATE THE CHECKPOINT HEADER
> -    rc = cpnd_ckpt_hdr_update(cp_node);
> +    rc = cpnd_ckpt_hdr_update(cb, cp_node);
[Ramesh]: Similarly..  why a ckpt_hdr  write is happening in 
cpnd_ckpt_sec_del() flow?, it suppose to delete the entry right?
>       if (rc == NCSCC_RC_FAILURE) {
> -      TRACE_4("cpnd ckpt hdr update failed");
> +         LOG_ER("cpnd ckpt hdr update failed");
>       }
> -  }
> +    }
>   
>     TRACE_LEAVE();
>   

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to