Ack with one comment.

Please free() the memory allocated for

    ckpt_data.sec_id.id = m_MMGR_ALLOC_CPND_DEFAULT(id->idLen);

Thanks,
Ramesh.

On 9/15/2015 3:01 PM, mahesh.va...@oracle.com wrote:
>   osaf/services/saf/cpsv/cpnd/cpnd_evt.c |  80 
> +++++++++++++++++++++++++++------
>   1 files changed, 65 insertions(+), 15 deletions(-)
>
>
> In current implementation  of non-collocated checkpoint,  If a  checkpoint is 
> opened for the first time
> by an application residing on a payload blade, the replicas will be created 
> on the local payload blade
>   and both the system controller nodes. In this case, the replica residing on 
> the payload blade is designated as active replica.
> If a non-collocated checkpoint is opened for the first time by an application 
> residing on the system controller nodes,
> the replica will be created only on the system controller blade. In this 
> case, this replica on a system controller node will act as the active replica.
>   If another application opens the same checkpoint from a payload node, the 
> checkpoint service will not create the replica on that node.
>
> Bug :
> Based on current implementation  for NON_COLLOCATED CHECKPOINT application , 
> if saCkptCheckpointTrackCallback is registered,
> for  saCkptCheckpointWrite() & saCkptSectionOverwrite() TrackCallback are 
> getting invoked properly ,
> but for saCkptSectionCreate( With Initial Data) & saCkptSectionDelete() the 
> TrackCallback is not getting invoked.
>
> Fix :
> Now trackcallback will be raised  even the replica is NOT residing on the 
> payload blade for
> saCkptSectionCreate( With Initial Data) & saCkptSectionDelete() .
>
> 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
> @@ -643,7 +643,7 @@ static uint32_t cpnd_evt_proc_ckpt_open(
>                               ((cp_node->open_active_sync_tmr.is_active) &&
>                                (cp_node->open_active_sync_tmr.lcl_ckpt_hdl == 
> evt->info.openReq.lcl_ckpt_hdl))){
>                       send_evt.info.cpa.info.openRsp.error = 
> SA_AIS_ERR_TRY_AGAIN;
> -                     LOG_ER("cpnd Open try again sync_tmr exist or ndrestart 
> for lcl_ckpt_hdl:%llx ckpt:%llx",evt->info.openReq.lcl_ckpt_hdl, client_hdl);
> +                     LOG_NO("cpnd Open try again sync_tmr exist or ndrestart 
> for lcl_ckpt_hdl:%llx ckpt:%llx",evt->info.openReq.lcl_ckpt_hdl, client_hdl);
>                       goto agent_rsp;
>               }
>   
> @@ -2667,9 +2667,45 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
>                                   evt->info.active_sec_creat.ckpt_id;
>                       }
>               }
> +     } else if (evt->info.active_sec_creat.init_data != NULL) {
> +
> +             if 
> (!m_CPND_IS_COLLOCATED_ATTR_SET(cp_node->create_attrib.creationFlags)) {
> +                     SaCkptSectionIdT *id = 
> evt->info.active_sec_creat.sec_attri.sectionId;
> +
> +                     ckpt_data = m_MMGR_ALLOC_CPSV_CKPT_DATA;
> +                     if (ckpt_data == NULL) {
> +                             rc = NCSCC_RC_FAILURE;
> +                             TRACE_4("cpnd ckpt data memory failed ");
> +                             error = SA_AIS_ERR_NO_SPACE;
> +                             goto nd_rsp;
> +                     }
> +
> +                     memset(ckpt_data, '\0', sizeof(CPSV_CKPT_DATA));
> +                     
> +                     ckpt_data->sec_id.idLen = id->idLen;
> +                     ckpt_data->sec_id.id = NULL;
> +                     if (id->idLen > 0) {
> +                             ckpt_data->sec_id.id = 
> m_MMGR_ALLOC_CPND_DEFAULT(id->idLen);
> +                             memcpy(ckpt_data->sec_id.id, id->id, 
> ckpt_data->sec_id.idLen);
> +                     }
> +
> +                     ckpt_data->data = evt->info.active_sec_creat.init_data;
> +                     ckpt_data->dataSize = 
> evt->info.active_sec_creat.init_size;
> +                     ckpt_data->dataOffset = 0;
> +
> +                     memset(&ckpt_access, '\0', sizeof(CPSV_CKPT_ACCESS));
> +                     ckpt_access.ckpt_id = cp_node->ckpt_id;
> +                     ckpt_access.lcl_ckpt_id = 
> evt->info.active_sec_creat.lcl_ckpt_id;
> +                     ckpt_access.agent_mdest = 
> evt->info.active_sec_creat.agent_mdest;
> +                     ckpt_access.num_of_elmts = 1;
> +                     ckpt_access.data = ckpt_data;
> +
> +                     cpnd_proc_ckpt_arrival_info_ntfy(cb, cp_node, 
> &ckpt_access, sinfo);
> +                     m_MMGR_FREE_CPSV_CKPT_DATA(ckpt_data);
> +             }
>       }
>   
> - nd_rsp:
> +nd_rsp:
>       send_evt.type = CPSV_EVT_TYPE_CPND;
>       send_evt.info.cpnd.type = CPSV_EVT_ND2ND_CKPT_SECT_ACTIVE_CREATE_RSP;
>       send_evt.info.cpnd.info.active_sec_creat_rsp.error = error;
> @@ -2715,21 +2751,34 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
>       }
>       sec_info = cpnd_ckpt_sec_del(cp_node, &evt->info.sec_delete_req.sec_id);
>       if (sec_info == NULL) {
> -             TRACE_4("cpnd ckpt sect del failed for sec_id:%s,ckpt_id:%llx",
> -                             evt->info.sec_delete_req.sec_id.id, 
> evt->info.sec_delete_req.ckpt_id);
> -             send_evt.type = CPSV_EVT_TYPE_CPND;
> -             send_evt.info.cpnd.type = CPSV_EVT_ND2ND_CKPT_SECT_DELETE_RSP;
> -             send_evt.info.cpnd.info.sec_delete_rsp.error = 
> SA_AIS_ERR_NOT_EXIST;
> -             goto nd_rsp;
> -
> +             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",
> +                                     evt->info.sec_delete_req.sec_id.id, 
> evt->info.sec_delete_req.ckpt_id);
> +                     send_evt.type = CPSV_EVT_TYPE_CPND;
> +                     send_evt.info.cpnd.type = 
> CPSV_EVT_ND2ND_CKPT_SECT_DELETE_RSP;
> +                     send_evt.info.cpnd.info.sec_delete_rsp.error = 
> SA_AIS_ERR_NOT_EXIST;
> +                     goto nd_rsp;
> +             }
> +     } else {
> +             /* resetting lcl_sec_id mapping */
> +             cp_node->replica_info.shm_sec_mapping[sec_info->lcl_sec_id] = 1;
>       }
> -     /* resetting lcl_sec_id mapping */
> -     cp_node->replica_info.shm_sec_mapping[sec_info->lcl_sec_id] = 1;
>   
>       /* Send the arrival callback */
>       memset(&ckpt_data, '\0', sizeof(CPSV_CKPT_DATA));
> -     if (sec_info) {
> -             ckpt_data.sec_id = sec_info->sec_id;
> +     if ((sec_info) || 
> (!m_CPND_IS_COLLOCATED_ATTR_SET(cp_node->create_attrib.creationFlags))) {
> +             if (sec_info) {
> +                     ckpt_data.sec_id = sec_info->sec_id;
> +             } else {
> +                     SaCkptSectionIdT *id = &evt->info.sec_delete_req.sec_id;
> +                     ckpt_data.sec_id.idLen = id->idLen;
> +                     ckpt_data.sec_id.id = NULL;
> +                     if (id->idLen > 0) {
> +                             ckpt_data.sec_id.id = 
> m_MMGR_ALLOC_CPND_DEFAULT(id->idLen);
> +                             memcpy(ckpt_data.sec_id.id, id->id, 
> ckpt_data.sec_id.idLen);
> +                     }
> +             }
> +
>               ckpt_data.data = NULL;
>               ckpt_data.dataSize = 0;
>               ckpt_data.dataOffset = 0;
> @@ -2742,8 +2791,9 @@ static uint32_t cpnd_evt_proc_nd2nd_ckpt
>               ckpt_access.data = &ckpt_data;
>               cpnd_proc_ckpt_arrival_info_ntfy(cb, cp_node, &ckpt_access, 
> sinfo);
>       }
> -
> -     m_CPND_FREE_CKPT_SECTION(sec_info);
> +     
> +     if (sec_info)
> +             m_CPND_FREE_CKPT_SECTION(sec_info);
>       send_evt.type = CPSV_EVT_TYPE_CPND;
>       send_evt.info.cpnd.type = CPSV_EVT_ND2ND_CKPT_SECT_DELETE_RSP;
>       send_evt.info.cpnd.info.sec_delete_rsp.error = SA_AIS_OK;

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to