Handling ERROR_EXIST in smfRollbackElement creation and handling TRY_AGAIN in immCCBOperations. --- src/smf/smfd/SmfUpgradeAction.cc | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/smf/smfd/SmfUpgradeAction.cc b/src/smf/smfd/SmfUpgradeAction.cc index 94c3dfd..af75cd7 100644 --- a/src/smf/smfd/SmfUpgradeAction.cc +++ b/src/smf/smfd/SmfUpgradeAction.cc @@ -28,6 +28,7 @@ #include "smf/smfd/SmfUtils.h" #include "smfd.h" #include "smf/smfd/SmfTargetTemplate.h" +#include "base/time.h" /* ======================================================================== * DEFINITIONS @@ -460,6 +461,7 @@ SaAisErrorT SmfImmCcbAction::execute(SaImmOiHandleT i_oiHandle, const std::string* i_rollbackDn) { SaAisErrorT result = SA_AIS_OK; SmfRollbackCcb* rollbackCcb = NULL; + base::Timer doImmOpTimer(60000); TRACE_ENTER(); @@ -473,8 +475,8 @@ SaAisErrorT SmfImmCcbAction::execute(SaImmOiHandleT i_oiHandle, immRollbackCcbDn += ","; immRollbackCcbDn += *i_rollbackDn; - if ((result = smfCreateRollbackElement(immRollbackCcbDn, i_oiHandle)) != - SA_AIS_OK) { + result = smfCreateRollbackElement(immRollbackCcbDn, i_oiHandle); + if ((result != SA_AIS_OK) && (result != SA_AIS_ERR_EXIST)) { LOG_ER( "SmfImmCcbAction::execute failed to create rollback element %s, rc=%s", immRollbackCcbDn.c_str(), saf_error(result)); @@ -490,11 +492,21 @@ SaAisErrorT SmfImmCcbAction::execute(SaImmOiHandleT i_oiHandle, } if (m_operations.size() > 0) { - SmfImmUtils immUtil; - if ((result = immUtil.doImmOperations(m_operations, rollbackCcb)) != - SA_AIS_OK) { - delete rollbackCcb; - rollbackCcb = NULL; + + doImmOpTimer.set_timeout_time(60000); + while (doImmOpTimer.is_timeout() == false) { + SmfImmUtils immUtil; + result = immUtil.doImmOperations(m_operations, rollbackCcb); + if (result == SA_AIS_ERR_TRY_AGAIN) { + base::Sleep(base::kFiveHundredMilliseconds); + continue; + } else if (result != SA_AIS_OK) { + LOG_WA("%s: SmfImmCcbAction:execute Fail '%s'", + __FUNCTION__, saf_error(result)); + delete rollbackCcb; + rollbackCcb = NULL; + } + break; } } -- 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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel