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

Reply via email to