Ok good, that will solve the backwards compatibility issue! Though I 
still don't understand what the problem would be if we let the function 
time out at the time specified by the user, even when the user wants us 
to time out after less than fourteen seconds. If we go for a new API 
version, wouldn't it be best if we let the new version of the API treat 
any non-negative timeout parameter value as valid?

Another thing: it looks like the timeout parameter is used both by the 
agent (to time out waiting for the reply from the server) as well as by 
the server. Or, at least it is passed as a parameter in the Open request 
message to the CKPT node director. However, when I look at the CKPT node 
director code, as far as I can tell it looks like the timeout parameter 
isn't really used for anything. If I am correct, we end up in the 
cpnd_evt_proc_ckpt_open() function. It has a local variable called 
"timeout", and it reads the timeout parameter from the message it has 
received from the agent. But it is not used! Could you please take a 
look at this?

thanks,
Anders Widell

On 01/04/2016 07:19 AM, A V Mahesh wrote:
> Hi Anders Widell
>
> Ok I will bump the minor version of the CKPT API, or to use ELF symbol 
> version  as you suggested.
>
> -AVM
>
> On 12/29/2015 3:49 PM, Anders Widell wrote:
>> Hi!
>>
>> See my comments marked [AndersW] inline.
>>
>> regards,
>> Anders Widell
>>
>> On 12/28/2015 05:35 AM, A V Mahesh wrote:
>>> Hi Anders Widell,
>>>
>>> Please find my answers.
>>>
>>> On 12/22/2015 10:41 PM, Anders Widell wrote:
>>>> See comments inline.
>>>>
>>>> regards,
>>>> Anders Widell
>>>>
>>>> On 12/21/2015 11:04 AM, A V Mahesh wrote:
>>>>> Hi,
>>>>>
>>>>> - The timeout here is the duration for which the API should wait 
>>>>> before returning to the user.
>>>>> - The patch does not changes the minimum value of 14 seconds. IE. 
>>>>> Before this patch also the default value was 14 seconds.
>>>>> This value was set based on implementation specific fine tuning, 
>>>>> particularly in large size cluster.
>>>> I think it does change the minimum timeout. I am here referring to 
>>>> the functions that take an SaTimeT timeout parameter. You can try 
>>>> this example program, that used to work before ticket [#1583] was 
>>>> pushed:
>>>>
>>>>   const SaNameT checkpointName = {strlen("safCkpt=hello"), 
>>>> "safCkpt=hello"};
>>>>   do {
>>>>     err = saCkptCheckpointOpen(
>>>>         ckptHandle,
>>>>         &checkpointName,
>>>>         &checkpointCreationAttributes,
>>>>         SA_CKPT_CHECKPOINT_READ |
>>>>         SA_CKPT_CHECKPOINT_WRITE |
>>>>         SA_CKPT_CHECKPOINT_CREATE,
>>>>         10 * SA_TIME_ONE_SECOND,
>>>>         &checkpointHandle);
>>>>
>>> [AVM]
>>>
>>>                 Even though previously ( before this patch) 
>>> Application was passing    10 * SA_TIME_ONE_SECOND ( )
>>>                 because of  #1583 reported real issue of `SaTimeT 
>>> timeout parameter is not being converted in to TEN_MILLI_SEC() while 
>>> passing to mds_msg_sync_send()`
>>>                 internally CPA  was assuming  Application is passed 
>>> 10 SECOND *  10000000  (  10 * 1000000000 * 10000000) ,which is 
>>> being treated as  larger than the default
>>>                 timeout time of 14 SECOND,  so previously the 
>>> Application only has an impression that it will get time out in 10 
>>> SECOND , but in piratical it was considered larger
>>>                 than 14 SECOND default time.
>> [AndersW] Yes this is a bug and I am not arguing against fixing it. I 
>> don't think a fix for this would be backwards incompatible, since an 
>> application shouldn't depend on a bug in OpenSAF (we don't need to be 
>> bug-backwards-compatible, except perhaps in some unusual situations). 
>> But this is not the problem that I am talking about. The problem I am 
>> talking about is that the range of allowed timeout values has become 
>> smaller as part of the fix. Such a change is typically not backwards 
>> compatible, since an application could be using a timeout value which 
>> lies within the previously allowed range of timeout values, but which 
>> is outside the new (smaller) range of allowed values. The example 
>> program I provided demonstrates this problem. It works before [#1583] 
>> was pushed, but not afterwards. The program uses the checkpoint API 
>> in a perfectly valid and reasonable way. Thus, it provides a clear 
>> evidence that the change is not backwards compatible. If you don't 
>> believe me, please try the program for yourself.
>>>
>>> =================================================================================================================
>>>  
>>>
>>>                 Before #1583 Fix :
>>>                     saCkptCheckpointOpen( ckptHandle, 
>>> &checkpointName,  .....,    10 * SA_TIME_ONE_SECOND, 
>>> &checkpointHandle);
>>>                        timeout =  10 * SA_TIME_ONE_SECOND;
>>>                     proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>> &(cb->cpnd_mds_dest), &evt, &out_evt, timeout);
>>>
>>>                 After #1583 Fix :
>>>                     timeout =  10 * SA_TIME_ONE_SECOND;
>>>                     time_out = 
>>> m_CPSV_CONVERT_SATIME_TEN_MILLI_SEC(timeout);
>>>                     proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>> &(cb->cpnd_mds_dest), &evt, &out_evt, time_out);
>>>
>>> =================================================================================================================
>>>  
>>>
>>>
>>>                In other words , before this patch in reality the 
>>> saCkptCheckpointOpen() was not being returned TIMEOUT even after 10 
>>> SECOND ( but Application expecting it).
>>>                Application  was only in assumption it was passing 10 
>>> SECOND , so  no change in behavioral difference in Application 
>>> before and after this patch.
>> [AndersW] As I said above, this is not the part of the change that I 
>> have problems with. It is the following passage:
>>
>> Before (note: NCS_SAF_MIN_ACCEPT_TIME  has the value 10):
>>
>>     if (time_out < NCS_SAF_MIN_ACCEPT_TIME) {
>>         rc = SA_AIS_ERR_TIMEOUT;
>>         TRACE_4("Cpa CkptOpen failed Api failed with return 
>> value:%d,ckptHandle:%llx,timeout:%llu", rc, ckptHandle, timeout);
>>         goto mds_send_fail;
>>     }
>>
>>
>> After (note: CPSV_WAIT_TIME has the value 1400):
>>
>>     if (time_out < CPSV_WAIT_TIME) {
>>         rc = SA_AIS_ERR_TIMEOUT;
>>         TRACE_4("Cpa CkptOpen failed Api failed with return 
>> value:%d,ckptHandle:%llx,timeout:%llu",
>>                 rc, ckptHandle, timeout);
>>         goto mds_send_fail;
>>     }
>>
>> So yes, there is a change in behaviour from the application's point 
>> of view. If the timeout (after conversion to a unit of 10 
>> milliseconds) falls within the range 10 to 1400, the application will 
>> now always get the SA_AIS_ERR_TIMEOUT. Previously, the function may 
>> have succeeded.
>>>
>>>>
>>>>> - Even though it is not a practical case of passing  49 days 
>>>>> (greater than or equal to 0x98968000000000) as a timeout value, 
>>>>> yes what you say can be done across all services.
>>>> Shouldn't we then document 0x98968000000000 as the upper limit for 
>>>> the timeout parameter, and validate that the parameter given by the 
>>>> user is less than this upper limit. As it is coded right now, the 
>>>> function will unconditionally return SA_AIS_ERR_TIMEOUT if you 
>>>> specify 0x98968000000000 as timeout (you can try this by replacing 
>>>> 10 * SA_TIME_ONE_SECOND with 0x98968000000000 in the example 
>>>> program above).
>>>
>>> [AVM]  Ok ,as if this issue exist with  all service , I will raise a 
>>> new ticket and will be fixed/document  for all services point of view .
>> [AndersW] Instead of documenting this as a limitation, please fix MDS 
>> by changing the size of the timeout parameter from 32 bits to 64 
>> bits. Note that there are perfectly reasonable timeout values that 
>> are very large, e.g. someone might be using SA_TIME_MAX to get a (for 
>> all practical purposes) infinite timeout.
>>>
>>> -AVM
>>>>>
>>>>> Thanks,
>>>>> AV.
>>>>>
>>>>>
>>>>> On 12/18/2015 2:43 PM, Anders Widell wrote:
>>>>>> Hi!
>>>>>>
>>>>>> I have some questions regarding this change:
>>>>>>
>>>>>> 1) This change is not backwards compatible. Have you considered 
>>>>>> to either bump the minor version of the CKPT API, or to use ELF 
>>>>>> symbol versioning, to avoid breaking old applications?
>>>>>>
>>>>>> 2) Why was the minimum possible time-out increased from 0.1 
>>>>>> seconds to 14 seconds? 14 seconds is like an eternity in a 
>>>>>> real-time system.
>>>>>>
>>>>>> 3) If the user-specified timeout is less than 14 seconds, the 
>>>>>> functions will always fail without even trying. Wouldn't it be 
>>>>>> better to at least try to perform the operation within the time 
>>>>>> limit specified by the user? The user may have a loop where it 
>>>>>> keeps retrying the API function call when the SA_AIS_ERR_TIMEOUT 
>>>>>> error code is returned. I would expect such a loop to eventually 
>>>>>> terminate, especially if the timeout parameter has a reasonable 
>>>>>> value (and there are many reasonable timeout values which are 
>>>>>> less than 14 seconds).
>>>>>>
>>>>>> 3) Can't the conversion from nanoseconds represented as a signed 
>>>>>> 64-bit integer to a unit of 10 milliseconds stored in an unsigned 
>>>>>> 32-bit integer ('uint32_t time_out' in the code below) overflow? 
>>>>>> I.e. if the timeout parameter has a value greater than or equal 
>>>>>> to 0x98968000000000?
>>>>>>
>>>>>> / Anders Widell
>>>>>>
>>>>>> On 11/06/2015 06:33 AM, mahesh.va...@oracle.com wrote:
>>>>>>> osaf/libs/agents/saf/cpa/cpa_api.c | 111 
>>>>>>> ++++++++++++++++++++++++++++++------
>>>>>>>   1 files changed, 91 insertions(+), 20 deletions(-)
>>>>>>>
>>>>>>>
>>>>>>> If we test upper and lower limits of SaTimeT timeout arguments 
>>>>>>> to CPSV API ,
>>>>>>> some of CPA APIs are doesn't returns or hungs.
>>>>>>>
>>>>>>> Current cpa code doesn't validating or passing SaTimeT timeout 
>>>>>>> arguments to CPSV API ,
>>>>>>> which are below default API timeout limit of CPSV_WAIT_TIME 
>>>>>>> (1400 X 10ms) and
>>>>>>> above SaTimeT, type long long int Maximum value 
>>>>>>> 9223372036854775807 (2^63-1)
>>>>>>>
>>>>>>> For example :
>>>>>>>
>>>>>>>    i)     const SaTimeT timeout = 1215752192;
>>>>>>>    ii)     const SaTimeT timeout = 2 * SA_TIME_ONE_MINUTE;
>>>>>>>    iii)     const SaTimeT timeout = 9223372036854775809;
>>>>>>>
>>>>>>>      saCkptCheckpointOpen(....,   timeout, ...);
>>>>>>>
>>>>>>> Because of that in some of variables are over flowing and , API 
>>>>>>> calls are not working properly
>>>>>>>
>>>>>>> Fix  :
>>>>>>>
>>>>>>> 1 -  Validated if (time_out < CPSV_WAIT_TIME) return 
>>>>>>> SA_AIS_ERR_INVALID_PARAM
>>>>>>> 2 -  Validates if (expirationTime < 0 ) return 
>>>>>>> SA_AIS_ERR_INVALID_PARAM
>>>>>>> 3 -  Pass proper timeout values to internal functions of Opensaf
>>>>>>>
>>>>>>> diff --git a/osaf/libs/agents/saf/cpa/cpa_api.c 
>>>>>>> b/osaf/libs/agents/saf/cpa/cpa_api.c
>>>>>>> --- a/osaf/libs/agents/saf/cpa/cpa_api.c
>>>>>>> +++ b/osaf/libs/agents/saf/cpa/cpa_api.c
>>>>>>> @@ -27,7 +27,6 @@
>>>>>>> ******************************************************************************/
>>>>>>>  
>>>>>>>
>>>>>>>     #include "cpa.h"
>>>>>>> -#define NCS_SAF_MIN_ACCEPT_TIME 10
>>>>>>> /****************************************************************************
>>>>>>>  
>>>>>>>
>>>>>>>     Name          :  SaCkptInitialize
>>>>>>> @@ -889,6 +888,14 @@ SaAisErrorT saCkptCheckpointOpen(SaCkptH
>>>>>>>                   return SA_AIS_ERR_INVALID_PARAM;
>>>>>>>           }
>>>>>>>   +    if (timeout < 0 ) {
>>>>>>> +        TRACE_4("Cpa CkptOpen: failed invalid timeout return 
>>>>>>> value:%d,ckptHandle:%llx",
>>>>>>> +                SA_AIS_ERR_INVALID_PARAM, ckptHandle);
>>>>>>> +        TRACE_LEAVE2("API return code = %u", rc);
>>>>>>> +        return SA_AIS_ERR_INVALID_PARAM;
>>>>>>> +    }
>>>>>>> +
>>>>>>> +
>>>>>>>       /* Draft Validations */
>>>>>>>       rc = cpa_open_attr_validate(checkpointCreationAttributes, 
>>>>>>> checkpointOpenFlags, checkpointName);
>>>>>>>       if (rc != SA_AIS_OK) {
>>>>>>> @@ -975,13 +982,13 @@ SaAisErrorT saCkptCheckpointOpen(SaCkptH
>>>>>>>       }
>>>>>>>         evt.info.cpnd.info.openReq.ckpt_flags = 
>>>>>>> checkpointOpenFlags;
>>>>>>> -
>>>>>>>       /* convert the timeout to 10 ms value and add it to the 
>>>>>>> sync send timeout */
>>>>>>>       time_out = m_CPSV_CONVERT_SATIME_TEN_MILLI_SEC(timeout);
>>>>>>>   -    if (time_out < NCS_SAF_MIN_ACCEPT_TIME) {
>>>>>>> +    if (time_out < CPSV_WAIT_TIME) {
>>>>>>>           rc = SA_AIS_ERR_TIMEOUT;
>>>>>>> -        TRACE_4("Cpa CkptOpen failed Api failed with return 
>>>>>>> value:%d,ckptHandle:%llx,timeout:%llu", rc, ckptHandle, timeout);
>>>>>>> +        TRACE_4("Cpa CkptOpen failed Api failed with return 
>>>>>>> value:%d,ckptHandle:%llx,timeout:%llu",
>>>>>>> +                rc, ckptHandle, timeout);
>>>>>>>           goto mds_send_fail;
>>>>>>>       }
>>>>>>>   @@ -998,9 +1005,8 @@ SaAisErrorT saCkptCheckpointOpen(SaCkptH
>>>>>>>           TRACE_4("cpa CkptOpen:CPND_DOWN Api failed with return 
>>>>>>> value:%d,ckptHandle:%llx", rc, ckptHandle);
>>>>>>>           goto mds_send_fail;
>>>>>>>       }
>>>>>>> -
>>>>>>>          /* Send the evt to CPND */
>>>>>>> -       proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>>>>>> &(cb->cpnd_mds_dest), &evt, &out_evt, timeout);
>>>>>>> +    proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>>>>>> &(cb->cpnd_mds_dest), &evt, &out_evt, time_out);
>>>>>>>            /* Generate rc from proc_rc */
>>>>>>>          switch (proc_rc) {
>>>>>>> @@ -1709,6 +1715,13 @@ SaAisErrorT saCkptCheckpointRetentionDur
>>>>>>>           goto done;
>>>>>>>       }
>>>>>>>   +    if (retentionDuration < 0 ) {
>>>>>>> +                TRACE_4("Cpa RetentionDurationSet: failed 
>>>>>>> invalid retentionDuration return value:%d,ckptHandle:%llx",
>>>>>>> +                SA_AIS_ERR_INVALID_PARAM, checkpointHandle);
>>>>>>> +                rc = SA_AIS_ERR_INVALID_PARAM;
>>>>>>> +        goto done;
>>>>>>> +        }
>>>>>>> +
>>>>>>>       /* get the CB Lock */
>>>>>>>       if (m_NCS_LOCK(&cb->cb_lock, NCS_LOCK_WRITE) != 
>>>>>>> NCSCC_RC_SUCCESS) {
>>>>>>>           rc = SA_AIS_ERR_LIBRARY;
>>>>>>> @@ -2183,6 +2196,7 @@ SaAisErrorT saCkptSectionCreate(SaCkptCh
>>>>>>>       bool gen_sec_flag = false;
>>>>>>>       SaCkptSectionIdT app_ptr;
>>>>>>>       CPA_CLIENT_NODE *cl_node = NULL;
>>>>>>> +    uint32_t time_out;
>>>>>>>         TRACE_ENTER2("SaCkptCheckpointHandleT passed is 
>>>>>>> %llx",checkpointHandle);
>>>>>>>       /* Validate the Input Parameters */
>>>>>>> @@ -2312,8 +2326,21 @@ SaAisErrorT saCkptSectionCreate(SaCkptCh
>>>>>>>       evt.info.cpnd.info.sec_creatReq.init_size = initialDataSize;
>>>>>>>         m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
>>>>>>> +
>>>>>>> +    time_out = CPA_WAIT_TIME(initialDataSize);
>>>>>>> +
>>>>>>> +    if (time_out < 0 ) {
>>>>>>> +        rc = SA_AIS_ERR_TIMEOUT;
>>>>>>> +        TRACE_4("cpa SectCreate Api failed because of larg 
>>>>>>> initialDataSize return :%d,ckptHandle:%llx",
>>>>>>> +                rc, checkpointHandle);
>>>>>>> +        goto fail1;
>>>>>>> +    }
>>>>>>> +    else if (time_out < CPSV_WAIT_TIME) {
>>>>>>> +        time_out = CPSV_WAIT_TIME;
>>>>>>> +    }
>>>>>>> +
>>>>>>>       proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>>>>>> &(gc_node->active_mds_dest),
>>>>>>> -                    &evt, &out_evt, 
>>>>>>> CPA_WAIT_TIME(initialDataSize));
>>>>>>> +            &evt, &out_evt, time_out);
>>>>>>>         /* Generate rc from proc_rc */
>>>>>>>       switch (proc_rc) {
>>>>>>> @@ -2684,6 +2711,14 @@ SaAisErrorT saCkptSectionExpirationTimeS
>>>>>>>           return rc;
>>>>>>>       }
>>>>>>>   +    if (expirationTime < 0 ) {
>>>>>>> +                TRACE_4("Cpa ExpirationTimeSet: failed invalid 
>>>>>>> expirationTime return value:%d,ckptHandle:%llx",
>>>>>>> +                SA_AIS_ERR_INVALID_PARAM, checkpointHandle);
>>>>>>> +                rc = SA_AIS_ERR_INVALID_PARAM;
>>>>>>> +        TRACE_LEAVE2("API return code = %u", rc);
>>>>>>> +        return rc;
>>>>>>> +        }
>>>>>>> +
>>>>>>>       /* retrieve CPA CB */
>>>>>>>       m_CPA_RETRIEVE_CB(cb);
>>>>>>>       if (!cb) {
>>>>>>> @@ -2847,6 +2882,14 @@ SaAisErrorT saCkptSectionIterationInitia
>>>>>>>           return rc;
>>>>>>>       }
>>>>>>>   +    if (expirationTime < 0 ) {
>>>>>>> +        TRACE_4("Cpa SectionIterationInitialize: failed invalid 
>>>>>>> expirationTime return value:%d,ckptHandle:%llx",
>>>>>>> +                SA_AIS_ERR_INVALID_PARAM, checkpointHandle);
>>>>>>> +        rc = SA_AIS_ERR_INVALID_PARAM;
>>>>>>> +        TRACE_LEAVE2("API return code = %u", rc);
>>>>>>> +        return rc;
>>>>>>> +        }
>>>>>>> +
>>>>>>>       /* retrieve CPA CB */
>>>>>>>       m_CPA_RETRIEVE_CB(cb);
>>>>>>>       if (!cb) {
>>>>>>> @@ -3360,6 +3403,7 @@ SaAisErrorT saCkptCheckpointWrite(SaCkpt
>>>>>>>       CPA_CLIENT_NODE *cl_node = NULL;
>>>>>>>       SaSizeT all_ioVector_size = 0;
>>>>>>>       uint32_t err_flag = 0;
>>>>>>> +    uint32_t time_out;
>>>>>>>
>>>>>>>       TRACE_ENTER2("SaCkptCheckpointHandleT passed is 
>>>>>>> %llx",checkpointHandle);
>>>>>>>   @@ -3479,18 +3523,27 @@ SaAisErrorT saCkptCheckpointWrite(SaCkpt
>>>>>>>         /* Unlock cpa_lock before calling mds api */
>>>>>>>       m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
>>>>>>> -#if 1
>>>>>>> -    for (iter = 0; iter < numberOfElements; iter++)
>>>>>>> +
>>>>>>> +    for (iter = 0; iter < numberOfElements; iter++) {
>>>>>>>           all_ioVector_size += ioVector[iter].dataSize;
>>>>>>> -
>>>>>>> -    proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>>>>>> &(gc_node->active_mds_dest),
>>>>>>> -                    &evt, &out_evt, 
>>>>>>> CPA_WAIT_TIME(all_ioVector_size));
>>>>>>> -#else
>>>>>>> -    proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>>>>>> &(gc_node->active_mds_dest), &evt, &out_evt, CPSV_WAIT_TIME);
>>>>>>> -#endif
>>>>>>> -   /* Generate rc from proc_rc */
>>>>>>> -   switch (proc_rc)
>>>>>>> -   {
>>>>>>> +        time_out = CPA_WAIT_TIME(all_ioVector_size);
>>>>>>> +
>>>>>>> +        if (time_out < 0 ) {
>>>>>>> +            rc = SA_AIS_ERR_TIMEOUT;
>>>>>>> +            TRACE_4("cpa ckpointWrite Api failed because of 
>>>>>>> larg ioVector size return :%d,ckptHandle:%llx",
>>>>>>> +                    rc, checkpointHandle);
>>>>>>> +            goto done;
>>>>>>> +        }
>>>>>>> +        else if (time_out < CPSV_WAIT_TIME) {
>>>>>>> +            time_out = CPSV_WAIT_TIME;
>>>>>>> +        }
>>>>>>> +        proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>>>>>> &(gc_node->active_mds_dest),
>>>>>>> +                &evt, &out_evt, time_out);
>>>>>>> +
>>>>>>> +    }
>>>>>>> +    /* Generate rc from proc_rc */
>>>>>>> +    switch (proc_rc)
>>>>>>> +    {
>>>>>>>          case NCSCC_RC_SUCCESS:
>>>>>>>              break;
>>>>>>>          case NCSCC_RC_REQ_TIMOUT:
>>>>>>> @@ -3577,6 +3630,7 @@ SaAisErrorT saCkptSectionOverwrite(SaCkp
>>>>>>>       CPA_GLOBAL_CKPT_NODE *gc_node = NULL;
>>>>>>>       bool add_flag = false;
>>>>>>>       CPA_CLIENT_NODE *cl_node = NULL;
>>>>>>> +    uint32_t time_out;
>>>>>>>         TRACE_ENTER2("SaCkptCheckpointHandleT passed is 
>>>>>>> %llx",checkpointHandle);
>>>>>>>       memset(&ckpt_data, '\0', sizeof(CPSV_CKPT_DATA));
>>>>>>> @@ -3684,8 +3738,19 @@ SaAisErrorT saCkptSectionOverwrite(SaCkp
>>>>>>>       /* Unlock cpa_lock before calling mds api */
>>>>>>>       m_NCS_UNLOCK(&cb->cb_lock, NCS_LOCK_WRITE);
>>>>>>>   +    time_out = CPA_WAIT_TIME(dataSize);
>>>>>>> +
>>>>>>> +    if (time_out < 0 ) {
>>>>>>> +        rc = SA_AIS_ERR_TIMEOUT;
>>>>>>> +        TRACE_4("cpa SectionOverwrite Api failed because of 
>>>>>>> larg dataSize return :%d,ckptHandle:%llx", rc, checkpointHandle);
>>>>>>> +        goto done;
>>>>>>> +    }
>>>>>>> +    else if (time_out < CPSV_WAIT_TIME) {
>>>>>>> +        time_out = CPSV_WAIT_TIME;
>>>>>>> +    }
>>>>>>> +
>>>>>>>       proc_rc = cpa_mds_msg_sync_send(cb->cpa_mds_hdl, 
>>>>>>> &(gc_node->active_mds_dest),
>>>>>>> -                    &evt, &out_evt, CPA_WAIT_TIME(dataSize));
>>>>>>> +            &evt, &out_evt, time_out);
>>>>>>>         /* Generate rc from proc_rc */
>>>>>>>       switch (proc_rc) {
>>>>>>> @@ -4053,6 +4118,12 @@ SaAisErrorT saCkptCheckpointSynchronize(
>>>>>>>       /* For Ckpt Sync CPA will not perform any operation
>>>>>>>          other than passing the request to CPND */
>>>>>>>   +    if (timeout < 0 ) {
>>>>>>> +        TRACE_4("Cpa CheckpointSynchronize: failed with 
>>>>>>> invalied timeout return value:%d,ckptHandle:%llx", 
>>>>>>> SA_AIS_ERR_INVALID_PARAM, checkpointHandle);
>>>>>>> +        rc =SA_AIS_ERR_INVALID_PARAM;
>>>>>>> +        goto done;
>>>>>>> +    }
>>>>>>> +
>>>>>>>       /* retrieve CPA CB */
>>>>>>>       m_CPA_RETRIEVE_CB(cb);
>>>>>>>       if (!cb) {
>>>>>>> @@ -4139,7 +4210,7 @@ SaAisErrorT saCkptCheckpointSynchronize(
>>>>>>>       /* Convert the time from saTimeT to millisecs */
>>>>>>>       timeout = m_CPSV_CONVERT_SATIME_TEN_MILLI_SEC(timeout);
>>>>>>>   -    if (timeout < NCS_SAF_MIN_ACCEPT_TIME) {
>>>>>>> +        if (timeout < CPSV_WAIT_TIME) {
>>>>>>>           rc = SA_AIS_ERR_TIMEOUT;
>>>>>>>           TRACE_4("cpa CkptSynchronize Api failed with return 
>>>>>>> value:%d,ckptHandle:%llx ", rc, checkpointHandle);
>>>>>>>           goto fail1;
>>>>>>>
>>>>>>> ------------------------------------------------------------------------------
>>>>>>>  
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Opensaf-devel mailing list
>>>>>>> Opensaf-devel@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/opensaf-devel
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>


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

Reply via email to