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

Reply via email to