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