---
 src/smf/smfd/SmfCampaignWrapup.cc | 50 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 48 insertions(+), 2 deletions(-)

diff --git a/src/smf/smfd/SmfCampaignWrapup.cc 
b/src/smf/smfd/SmfCampaignWrapup.cc
index 4389ff0..a89cbff 100644
--- a/src/smf/smfd/SmfCampaignWrapup.cc
+++ b/src/smf/smfd/SmfCampaignWrapup.cc
@@ -29,6 +29,9 @@
 #include "smf/smfd/SmfRollback.h"
 #include "smf/smfd/SmfUpgradeAction.h"
 #include "smf/smfd/SmfUtils.h"
+#include "base/osaf_time.h"
+#include "base/time.h"
+
 
 /* ========================================================================
  *   DEFINITIONS
@@ -224,7 +227,28 @@ bool SmfCampaignWrapup::executeCampComplete() {
     LOG_ER(
         "SmfCampaignWrapup failed to create campaign complete rollback element 
%s, rc=%s",
         completeRollbackDn.c_str(), saf_error(result));
-    return false;
+
+     int ret = SA_AIS_OK;
+     bool rc = false;
+     base::Timer doImmOpTimer(60000);
+     if (result == SA_AIS_ERR_TRY_AGAIN) {
+       while (doImmOpTimer.is_timeout() == false) {
+          TRACE("%s: SmfCampaignWrapup - executeCampComplete time left = %" 
PRIu64,
+            __FUNCTION__, doImmOpTimer.time_left());
+          ret = smfCreateRollbackElement(completeRollbackDn,
+              SmfCampaignThread::instance()->getImmHandle());
+          if (ret  == SA_AIS_ERR_TRY_AGAIN) {
+             base::Sleep(base::kFiveHundredMilliseconds);
+             continue;
+          }else {
+             if (ret == SA_AIS_OK)
+                rc = true;
+             break;
+          }
+        }
+    }
+    if (rc == false)
+        return rc;
   }
 
   for (auto& elem : m_campCompleteAction) {
@@ -232,8 +256,30 @@ bool SmfCampaignWrapup::executeCampComplete() {
                                   &completeRollbackDn)) != SA_AIS_OK) {
       LOG_ER("SmfCampaignWrapup campCompleteAction %d failed, rc=%s",
              (*elem).getId(), saf_error(result));
-      return false;
+
+     int ret = SA_AIS_OK;
+     bool rc = false;
+     base::Timer doImmOpTimer(60000);
+     if (result == SA_AIS_ERR_TRY_AGAIN) {
+       while (doImmOpTimer.is_timeout() == false) {
+          TRACE("%s: SmfCampaignWrapup - executeCampComplete time left = %" 
PRIu64,
+            __FUNCTION__, doImmOpTimer.time_left());
+          ret = (*elem).execute(SmfCampaignThread::instance()->getImmHandle(),
+                                &completeRollbackDn);
+          if (ret  == SA_AIS_ERR_TRY_AGAIN) {
+             base::Sleep(base::kFiveHundredMilliseconds);
+             continue;
+          }else {
+             if (ret == SA_AIS_OK)
+                rc = true;
+             break;
+          }
+        }
+    }
+    if (rc == false)
+        return rc;
     }
+
   }
 
   LOG_NO("CAMP: Campaign complete actions completed");
-- 
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