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, [email protected] 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel