Execution of the campaign will get failed if getting timeout
during performing admin operation.

This ticket adds some retries in such case or in case of getting
SA_AIS_ERR_BAD_HANDLE.
---
 src/smf/smfd/SmfUtils.cc | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/smf/smfd/SmfUtils.cc b/src/smf/smfd/SmfUtils.cc
index c2931c84b..b777d2d3c 100644
--- a/src/smf/smfd/SmfUtils.cc
+++ b/src/smf/smfd/SmfUtils.cc
@@ -254,14 +254,17 @@ bool SmfImmUtils::initialize(void) {
 bool SmfImmUtils::finalize(void) {
   if (m_ownerHandle != 0) {
     (void)immutil_saImmOmAdminOwnerFinalize(m_ownerHandle);
+    m_ownerHandle = 0;
   }
 
   if (m_accessorHandle != 0) {
     (void)immutil_saImmOmAccessorFinalize(m_accessorHandle);
+    m_accessorHandle = 0;
   }
 
   if (m_omHandle != 0) {
     (void)immutil_saImmOmFinalize(m_omHandle);
+    m_omHandle = 0;
   }
 
   return true;
@@ -584,6 +587,7 @@ SaAisErrorT SmfImmUtils::callAdminOperation(
     TRACE("contains NO parameters");
   }
 
+retry_admop:
   rc = immutil_saImmOmAdminOwnerSet(m_ownerHandle, objectNames, SA_IMM_ONE);
   if (rc != SA_AIS_OK) {
     LOG_NO("Fail to set admin owner, rc=%s, dn=[%s]", saf_error(rc),
@@ -606,6 +610,14 @@ SaAisErrorT SmfImmUtils::callAdminOperation(
     retry--;
   }
 
+  // Handle recovery and retry the admin operation.
+  if (retry && (rc == SA_AIS_ERR_TIMEOUT || rc == SA_AIS_ERR_BAD_HANDLE)) {
+    finalize();
+    initialize();
+    sleep(2);
+    goto retry_admop;
+  }
+
   if (retry <= 0) {
     LOG_NO(
         "Fail to invoke admin operation, too many SA_AIS_ERR_TRY_AGAIN, giving 
up. dn=[%s], opId=[%u]",
-- 
2.18.0



_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to