Handling ERROR_EXIST in smfRollbackElement creation and
handling TRY_AGAIN in immCCBOperations.
---
 src/smf/smfd/SmfCampaignWrapup.cc | 28 +++++++---------------------
 src/smf/smfd/SmfUpgradeAction.cc  | 26 +++++++++++++++++++-------
 2 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/src/smf/smfd/SmfCampaignWrapup.cc 
b/src/smf/smfd/SmfCampaignWrapup.cc
index 934f2f2..8ecc59b 100644
--- a/src/smf/smfd/SmfCampaignWrapup.cc
+++ b/src/smf/smfd/SmfCampaignWrapup.cc
@@ -244,29 +244,15 @@ bool SmfCampaignWrapup::executeCampComplete() {
   if (rc == true)
   {
      for (auto& elem : m_campCompleteAction) {
-       doImmOpTimer.set_timeout_time(60000);
-       while (doImmOpTimer.is_timeout() == false) {
-          ais_rc = 
(*elem).execute(SmfCampaignThread::instance()->getImmHandle(),
+         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;
-       }
-       if (doImmOpTimer.is_timeout() == true && ais_rc != SA_AIS_OK) {
-          LOG_WA("%s: SmfCampaignWrapup::executeCampComplete(): "
-             " m_campCompleteAction timeout Fail '%s'",
-               __FUNCTION__, saf_error(ais_rc));
-          rc = false;
+         if (ais_rc != SA_AIS_OK) {
+            LOG_NO("%s: SmfCampaignWrapup::executeCampComplete Fail '%s'",
+                   __FUNCTION__, saf_error(ais_rc));
+            rc = false;
+            break;
+          }
        }
-       if (rc == false)
-         break;
-     }
   }
 
   if (rc == true)
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