src/smf/smfd/SmfImmOperation.cc    |  37 ++++++++++++++++++++++++++++++++++++-
 src/smf/smfd/SmfUpgradeCampaign.cc |   3 +--
 src/smf/smfd/SmfUtils.cc           |  17 ++++++++++++++++-
 3 files changed, 53 insertions(+), 4 deletions(-)


diff --git a/src/smf/smfd/SmfImmOperation.cc b/src/smf/smfd/SmfImmOperation.cc
--- a/src/smf/smfd/SmfImmOperation.cc
+++ b/src/smf/smfd/SmfImmOperation.cc
@@ -434,6 +434,7 @@ SmfImmCreateOperation::execute(SmfRollba
 
        SaNameT objectName;
         osaf_extended_name_lend(m_parentDn.c_str(), &objectName);
+       const SaStringT * errStrings = NULL;
 
         //Set IMM ownership.
         //When creating objects at top level the parent name is empty and the 
ownership shall not be set
@@ -470,6 +471,22 @@ SmfImmCreateOperation::execute(SmfRollba
        //Create CCB
        result = immutil_saImmOmCcbObjectCreate_2(m_ccbHandle, 
(SaImmClassNameT)className, 
                                                  &objectName, (const 
SaImmAttrValuesT_2 **)m_immAttrValues);
+       if (result != SA_AIS_OK && result == SA_AIS_ERR_FAILED_OPERATION) {
+               result = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
+               if (errStrings){
+                       TRACE("Received error string is %s", errStrings[0]);
+                       char * type = NULL;
+                       type = strstr(errStrings[0], "IMM: Resource abort: ");
+                       if(type != NULL) {
+                               TRACE("SA_AIS_ERR_FAILED_OPERATION is modified 
to SA_AIS_ERR_TRY_AGAIN because of "
+                                               "ccb resourse abort in 
saImmOmCcbObjectCreate" );
+                               result = SA_AIS_ERR_TRY_AGAIN;
+                               TRACE_LEAVE();
+                               return result;
+                       }
+               }
+       }
+
        if (result != SA_AIS_OK) {
                if (result == SA_AIS_ERR_EXIST) {
                        TRACE("SmfImmCreateOperation::execute: object already 
exists");
@@ -694,7 +711,24 @@ SmfImmDeleteOperation::execute(SmfRollba
                 }
         }
 
+       const SaStringT * errStrings = NULL;
        result = immutil_saImmOmCcbObjectDelete(m_ccbHandle, &objectName);
+       if (result != SA_AIS_OK && result == SA_AIS_ERR_FAILED_OPERATION) {
+               result = saImmOmCcbGetErrorStrings(m_ccbHandle, &errStrings);
+               if (errStrings){
+                       TRACE("Received error string is %s", errStrings[0]);
+                       char * type = NULL;
+                       type = strstr(errStrings[0], "IMM: Resource abort: ");
+                       if(type != NULL) {
+                               TRACE("SA_AIS_ERR_FAILED_OPERATION is modified 
to SA_AIS_ERR_TRY_AGAIN because of "
+                                               "ccb resourse abort in 
saImmOmCcbObjectDelete" );
+                               result = SA_AIS_ERR_TRY_AGAIN;
+                               TRACE_LEAVE();
+                               return result;
+                       }
+               }
+       }
+
        if (result != SA_AIS_OK) {
                LOG_NO("SmfImmDeleteOperation::execute, 
immutil_saImmOmCcbObjectDelete failed rc=%s (child objects maybe exists)", 
saf_error(result));
                 TRACE_LEAVE();
@@ -1076,7 +1110,8 @@ SmfImmModifyOperation::execute(SmfRollba
                        char * type = NULL;
                        type = strstr(errStrings[0], "IMM: Resource abort: ");
                        if(type != NULL) {
-                               TRACE("SA_AIS_ERR_FAILED_OPERATION is modified 
to SA_AIS_ERR_TRY_AGAIN because of ccb resourse abort" );
+                               TRACE("SA_AIS_ERR_FAILED_OPERATION is modified 
to SA_AIS_ERR_TRY_AGAIN because of "
+                                               "ccb resourse abort in 
saImmOmCcbObjectModify" );
                                result = SA_AIS_ERR_TRY_AGAIN;
                                TRACE_LEAVE();
                                return result;
diff --git a/src/smf/smfd/SmfUpgradeCampaign.cc 
b/src/smf/smfd/SmfUpgradeCampaign.cc
--- a/src/smf/smfd/SmfUpgradeCampaign.cc
+++ b/src/smf/smfd/SmfUpgradeCampaign.cc
@@ -1121,8 +1121,7 @@ SmfUpgradeCampaign::resetMaintenanceStat
                if (rc != SA_AIS_OK && rc == SA_AIS_ERR_TRY_AGAIN) {
                        /*
                         * TRY_AGAIN is returned only when ccb is aborted 
-                        *  with Resource abort in error string. Resource abort 
in
-                        *  error string is checked presently for modify 
operation.
+                        * with Resource abort in error string. 
                         */
                        continue;
                }
diff --git a/src/smf/smfd/SmfUtils.cc b/src/smf/smfd/SmfUtils.cc
--- a/src/smf/smfd/SmfUtils.cc
+++ b/src/smf/smfd/SmfUtils.cc
@@ -684,9 +684,24 @@ SmfImmUtils::doImmOperations(std::list <
                         io_rollbackCcb->addCcbData(rollbackData);
                 }
        }
-
+       const SaStringT * errStrings = NULL;
        /* Apply the CCB */
        result = immutil_saImmOmCcbApply(immCcbHandle);
+       if (result != SA_AIS_OK && result == SA_AIS_ERR_FAILED_OPERATION) {
+               result = saImmOmCcbGetErrorStrings(immCcbHandle, &errStrings);
+               if (errStrings){
+                       TRACE("Received error string is %s", errStrings[0]);
+                       char * type = NULL;
+                       type = strstr(errStrings[0], "IMM: Resource abort: ");
+                       if(type != NULL) {
+                               TRACE("SA_AIS_ERR_FAILED_OPERATION is modified 
to SA_AIS_ERR_TRY_AGAIN because of "
+                                               "ccb resourse abort in 
saImmOmCcbApply" );
+                               result = SA_AIS_ERR_TRY_AGAIN;
+                               return result;
+                       }
+               }
+       }
+
        if (result != SA_AIS_OK) {
                LOG_NO("saImmOmCcbApply failed rc=%s", saf_error(result));
                return result;

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