---
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