Hi Hoang,
ACK for the attached patch .
-AVM
On 11/29/2016 6:01 PM, A V Mahesh wrote:
> HI All,
>
> Validation of this patch dependent on #2202 , so please find the attached
> re-based patch of this (#2207) ticket.
>
> Hoang will re-publish the V3 patch once he is in office.
>
> -AVM
>
> On 11/29/2016 4:23 PM, Hoang Vo wrote:
>> osaf/libs/common/cpsv/include/cpnd_sec.h | 2 +-
>> osaf/services/saf/cpsv/cpnd/cpnd_db.c | 5 ++++-
>> osaf/services/saf/cpsv/cpnd/cpnd_evt.c | 8 ++++----
>> osaf/services/saf/cpsv/cpnd/cpnd_proc.c | 2 +-
>> osaf/services/saf/cpsv/cpnd/cpnd_sec.cc | 25
>> ++++++++++++++-----------
>> 5 files changed, 24 insertions(+), 18 deletions(-)
>>
>>
>> problem:
>> the steps to add a section is add_db_tree -> update_sec_hdr ->
>> update_ckpt_hdr
>> so if an error occur cpsv should handle error in reverse order.
>> currently, section_hdr_update_fails, cpsv revert ckpt_hdr also that
>> case error
>>
>> solution:
>> only revert db_tree in case section_hdr_update_fails
>>
>> 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_CKPT_NODE *, SaCkptSectionIdT *, bool);
>> CPND_CKPT_SECTION_INFO *
>> cpnd_get_sect_with_id(const CPND_CKPT_NODE *, uint32_t lcl_sec_id);
>> 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
>> @@ -391,6 +391,7 @@ CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_ad
>> int32_t lcl_sec_id = 0;
>> uint32_t rc = NCSCC_RC_SUCCESS;
>> uint32_t value = 0, i = 0, j = 0;
>> + bool hdr_update = true;
>> TRACE_ENTER();
>> /* get the lcl_sec_id */
>> @@ -469,8 +470,10 @@ CPND_CKPT_SECTION_INFO *cpnd_ckpt_sec_ad
>> return pSecPtr;
>> section_hdr_update_fails:
>> + hdr_update = false;
>> +
>> ckpt_hdr_update_fails:
>> - cpnd_ckpt_sec_del(cp_node, id);
>> + cpnd_ckpt_sec_del(cp_node, id, hdr_update);
>> 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
>> @@ -2357,12 +2357,12 @@ 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(cp_node, &sec_info->sec_id, true);
>> else
>> tmp_sec_info =
>> cpnd_ckpt_sec_del(cp_node,
>> evt->info.sec_creatReq.
>> - sec_attri.sectionId);
>> + sec_attri.sectionId, true);
>> if (tmp_sec_info == sec_info) {
>> cp_node->replica_info.
>> @@ -2494,7 +2494,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(cp_node,
>> &evt->info.sec_delReq.sec_id, true);
>> /* resetting lcl_sec_id mapping */
>> if (sec_info == NULL) {
>> rc = NCSCC_RC_FAILURE;
>> @@ -2774,7 +2774,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(cp_node,
>> &evt->info.sec_delete_req.sec_id, true);
>> 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",
>> 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
>> @@ -1544,7 +1544,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(cp_node, &pSec_info->sec_id, true);
>> cp_node->replica_info.shm_sec_mapping[pSec_info->lcl_sec_id] = 1;
>> /* send out destory to all cpnd's maintaining this ckpt */
>> 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
>> @@ -163,13 +163,14 @@ cpnd_ckpt_sec_find(const CPND_CKPT_NODE
>> *
>> * Arguments : CPND_CKPT_NODE *cp_node - Check point node.
>> * : SaCkptSectionIdT id - Section Identifier
>> - *
>> + * : hdr_update - UPDATE THE SECTION/CHECKPOINT HEADER
>> or NOT
>> + *
>> * Return Values : ptr to CPND_CKPT_SECTION_INFO/NULL;
>> *
>> * Notes : None.
>> *****************************************************************************/
>> CPND_CKPT_SECTION_INFO *
>> -cpnd_ckpt_sec_del(CPND_CKPT_NODE *cp_node, SaCkptSectionIdT *id)
>> +cpnd_ckpt_sec_del(CPND_CKPT_NODE *cp_node, SaCkptSectionIdT *id,
>> bool hdr_update)
>> {
>> CPND_CKPT_SECTION_INFO *sectionInfo(0);
>> @@ -210,16 +211,18 @@ cpnd_ckpt_sec_del(CPND_CKPT_NODE *cp_nod
>> cp_node->replica_info.n_secs--;
>> 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));
>> - if (rc == NCSCC_RC_FAILURE) {
>> - TRACE_4("cpnd sect hdr update failed");
>> - }
>> + if (hdr_update == true) {
>> + // UPDATE THE SECTION HEADER
>> + uint32_t rc(cpnd_sec_hdr_update(sectionInfo, cp_node));
>> + if (rc == NCSCC_RC_FAILURE) {
>> + TRACE_4("cpnd sect hdr update failed");
>> + }
>> - // UPDATE THE CHECKPOINT HEADER
>> - rc = cpnd_ckpt_hdr_update(cp_node);
>> - if (rc == NCSCC_RC_FAILURE) {
>> - TRACE_4("cpnd ckpt hdr update failed");
>> + // UPDATE THE CHECKPOINT HEADER
>> + rc = cpnd_ckpt_hdr_update(cp_node);
>> + if (rc == NCSCC_RC_FAILURE) {
>> + TRACE_4("cpnd ckpt hdr update failed");
>> + }
>> }
>> }
>
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel