ACK, with comments after [rafael] tag

As an improvement after the retries the operation can fail the campaign. 
Today we only move the problem over to the next campaign?


On 01/30/2017 02:25 PM, [email protected] wrote:
>   osaf/services/saf/smfsv/smfd/SmfImmOperation.cc    |  21 
> ++++++++++++++++++---
>   osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc |  16 ++++++++++++++--
>   2 files changed, 32 insertions(+), 5 deletions(-)
>
>
> When the campaign is commited, while modifying saAmfSUMaintenanceCampaign  
> flags, if any of the IMMND restarts or
> new node joins the cluster, then the non-commited ccbs will be aborted.
>
> This is a rare case, when saAmfSUMaintenanceCampaign will fail due to IMMND 
> sync, and and the next campaign will fails with
> ER Failed to set maintenance state in step=safSmfStep=0001
>
> diff --git a/osaf/services/saf/smfsv/smfd/SmfImmOperation.cc 
> b/osaf/services/saf/smfsv/smfd/SmfImmOperation.cc
> --- a/osaf/services/saf/smfsv/smfd/SmfImmOperation.cc
> +++ b/osaf/services/saf/smfsv/smfd/SmfImmOperation.cc
> @@ -1033,11 +1033,26 @@ SmfImmModifyOperation::execute(SmfRollba
>   //   objectName.length = (SaUint16T) objectLen;
>   //   memcpy(objectName.value, object, objectLen);
>   
> +     const SaStringT * errStrings = NULL;
>       result = immutil_saImmOmCcbObjectModify_2(m_ccbHandle, &objectName, 
> (const SaImmAttrModificationT_2 **)
> -                                               m_immAttrMods);
> -     if (result != SA_AIS_OK) {
> +                     m_immAttrMods);
> +     if (result != SA_AIS_OK && result == SA_AIS_ERR_FAILED_OPERATION) {
> +             result = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
> +             if (errStrings){
> +                     TRACE("Received error string is %s", errStrings[0]);
> +                     char * type = NULL;
> +                     type = strstr(errStrings[0], "IMM: Resource abort: ");
> +                     if(type != NULL) {
> +                             TRACE("SA_AIS_ERR_FAILED_OPERATION is modified 
> to SA_AIS_ERR_TRY_AGAIN because of ccb resourse abort" );
> +                             result = SA_AIS_ERR_TRY_AGAIN;
> +                             TRACE_LEAVE();
> +                             return result;
> +                     }
> +             }
> +     }
> +     if (result != SA_AIS_OK){
>               LOG_NO("SmfImmModifyOperation::execute, saImmOmCcbObjectModify 
> failed %s", saf_error(result));
> -                TRACE_LEAVE();
> +             TRACE_LEAVE();
>               return result;
>       }
>   
> diff --git a/osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc 
> b/osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc
> --- a/osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc
> +++ b/osaf/services/saf/smfsv/smfd/SmfUpgradeCampaign.cc
> @@ -1063,6 +1063,7 @@ SmfUpgradeCampaign::resetMaintenanceStat
>           std::list < std::string > objectList;
>       SmfImmUtils immUtil;
>           (void)immUtil.getChildren("", objectList, SA_IMM_SUBTREE, 
> "SaAmfSU");
> +     SaAisErrorT rc = SA_AIS_OK;
>   
>           //Reset saAmfSUMaintenanceCampaign for all found SUs
>           const std::string campDn = 
> SmfCampaignThread::instance()->campaign()->getDn();
> @@ -1093,9 +1094,20 @@ SmfUpgradeCampaign::resetMaintenanceStat
>               }
>           }
>   
> -        if (immUtil.doImmOperations(operations) != SA_AIS_OK) {
> -                LOG_NO("SmfUpgradeStep::setMaintenanceState(), fails to 
> reset all saAmfSUMaintenanceCampaign attr");
> +     const uint32_t MAX_NO_RETRIES = 2;
> +     uint32_t retry_cnt = 0;
> +     while (++retry_cnt <= MAX_NO_RETRIES) {
> +             rc = immUtil.doImmOperations(operations);
[rafael] whitespace above
> +             if (rc != SA_AIS_OK && rc == SA_AIS_ERR_TRY_AGAIN) {
> +                     /* TRY_AGAIN is returned only when ccb is aborted
[rafael] whitespace above
> +                        with Resource abort in error string. Resurce abort in
> +                        error string is checked presently for modify 
> operation */
[rafael] no strict rule but I never use this comment style over multiple 
lines. Maybe try:
/*
*
*/
or
//
//
//
> +                     continue;
> +             }
>           }
> +     if (rc != SA_AIS_OK){
> +             LOG_NO("SmfUpgradeStep::setMaintenanceState(), fails to reset 
> all saAmfSUMaintenanceCampaign attr");
> +     }
>   
>           //Delete the created SmfImmModifyOperation instances
>           std::list < SmfImmOperation * > ::iterator operIter;


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to