Hi Vijay

Ack
A minor comment see [Lennart] below

Thanks
Lennart

> -----Original Message-----
> From: Vijay Roy [mailto:[email protected]]
> Sent: den 4 oktober 2017 11:58
> To: Lennart Lund <[email protected]>
> Cc: [email protected]; Vijay Roy <[email protected]>
> Subject: [PATCH 1/1] smf: Upgrade failed due to CCB aborted by imm sync
> request [#2584]
> 
> A delay timer set for 60 seconds for CampaignWrapup activity
> during ImmSync to avoid the failure during middleware upgrade
> when a roleback element of smf campaign thread returns
> SA_AIS_ERR_TRY_AGAIN
> ---
>  src/smf/smfd/SmfCampaignWrapup.cc | 59
> +++++++++++++++++++++++++++++----------
>  1 file changed, 44 insertions(+), 15 deletions(-)
> 
> diff --git a/src/smf/smfd/SmfCampaignWrapup.cc
> b/src/smf/smfd/SmfCampaignWrapup.cc
> index 4389ff0..0c46d08 100644
> --- a/src/smf/smfd/SmfCampaignWrapup.cc
> +++ b/src/smf/smfd/SmfCampaignWrapup.cc
> @@ -29,6 +29,7 @@
>  #include "smf/smfd/SmfRollback.h"
>  #include "smf/smfd/SmfUpgradeAction.h"
>  #include "smf/smfd/SmfUtils.h"
> +#include "base/time.h"
> 
>  /*
> ==========================================================
> ==============
>   *   DEFINITIONS
> @@ -213,34 +214,62 @@ bool
> SmfCampaignWrapup::executeCampComplete() {
>    // Campaign wrapup complete actions
>    LOG_NO("CAMP: Start campaign complete actions (%zu)",
>           m_campCompleteAction.size());
> -  SaAisErrorT result;
> +  base::Timer adminOpTimer(60000);
> +  SaAisErrorT ais_rc = SA_AIS_OK;
> +  bool rc = true;
>    std::string completeRollbackDn;
>    completeRollbackDn = "smfRollbackElement=CampComplete,";
>    completeRollbackDn += SmfCampaignThread::instance()->campaign()-
> >getDn();
> 
> -  if ((result = smfCreateRollbackElement(
> -           completeRollbackDn,
> -           SmfCampaignThread::instance()->getImmHandle())) != SA_AIS_OK) {
> -    LOG_ER(
> -        "SmfCampaignWrapup failed to create campaign complete rollback
> element %s, rc=%s",
> -        completeRollbackDn.c_str(), saf_error(result));
> -    return false;
> +  while (adminOpTimer.is_timeout() == false) {
> +     ais_rc = smfCreateRollbackElement(completeRollbackDn,
> +              SmfCampaignThread::instance()->getImmHandle());
> +     if (ais_rc == SA_AIS_ERR_TRY_AGAIN) {
> +        base::Sleep(base::kFiveHundredMilliseconds);
> +        continue;
> +     } else if (ais_rc != SA_AIS_OK) {
> +        LOG_WA("%s: SmfCampaignWrapup::executeCampComplete Fail '%s'",
> __FUNCTION__,
> +             saf_error(ais_rc));
> +        rc = false;
> +        break;
> +     } else {
[Lennart] This else statement can be removed since you have a "continue;" in 
the " if (ais_rc == SA_AIS_ERR_TRY_AGAIN)" statement. This applies to the other 
loop as well
> +      // Done
> +      break;
> +    }
> +  }
> +  if (adminOpTimer.is_timeout() == true && ais_rc != SA_AIS_OK) {
> +    LOG_WA("%s: SmfCampaignWrapup::executeCampComplete()  timeout
> Fail '%s'", __FUNCTION__,
> +           saf_error(ais_rc));
>    }
> 
>    for (auto& elem : m_campCompleteAction) {
> -    if ((result = (*elem).execute(SmfCampaignThread::instance()-
> >getImmHandle(),
> -                                  &completeRollbackDn)) != SA_AIS_OK) {
> -      LOG_ER("SmfCampaignWrapup campCompleteAction %d failed, rc=%s",
> -             (*elem).getId(), saf_error(result));
> -      return false;
> +    base::Timer adminOpTimer(60000);
> +    while (adminOpTimer.is_timeout() == false) {
> +      ais_rc = (*elem).execute(SmfCampaignThread::instance()-
> >getImmHandle(),
> +                                  &completeRollbackDn);
> +      if (ais_rc == SA_AIS_ERR_TRY_AGAIN) {
> +         base::Sleep(base::kFiveHundredMilliseconds);
> +         continue;
> +      }else if (ais_rc != SA_AIS_OK) {
> +         LOG_WA("%s: SmfCampaignWrapup::executeCampComplete Fail
> '%s'", __FUNCTION__,
> +             saf_error(ais_rc));
> +         rc = false;
> +         break;
> +      } else {
> +        // Done
> +        break;
> +      }
> +    }
> +    if (adminOpTimer.is_timeout() == true && ais_rc != SA_AIS_OK) {
> +      LOG_WA("%s: SmfCampaignWrapup::executeCampComplete():
> m_campCompleteAction timeout Fail '%s'"
> +                   , __FUNCTION__, saf_error(ais_rc));
>      }
>    }
> 
>    LOG_NO("CAMP: Campaign complete actions completed");
> -
>    TRACE_LEAVE();
> 
> -  return true;
> +  return rc;
>  }
> 
>  
> //------------------------------------------------------------------------------
> --
> 1.9.1


------------------------------------------------------------------------------
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