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
