osaf/libs/common/immsv/immpbe_dump.cc | 18 +++++++++-
osaf/services/saf/immsv/immpbed/immpbe_daemon.cc | 41 ++++++++++++++++++++++++
2 files changed, 57 insertions(+), 2 deletions(-)
For the 1PBE case, which is not multi threaded, if the sqlite db locked case is
reached abort the PBE and let the PBE be re-generated(instead of blocking the
PBE process).
diff --git a/osaf/libs/common/immsv/immpbe_dump.cc
b/osaf/libs/common/immsv/immpbe_dump.cc
--- a/osaf/libs/common/immsv/immpbe_dump.cc
+++ b/osaf/libs/common/immsv/immpbe_dump.cc
@@ -2894,14 +2894,28 @@ SaAisErrorT pbeBeginTrans(void* db_handl
++try_count;
} else {
LOG_ER("Sqlite db appears blocked on other
transaction");
- return SA_AIS_ERR_FAILED_OPERATION;
+ /* The SA_AIS_ERR_NOT_SUPPORTED is converted to
SA_AIS_ERR_FAILED_OPERATION
+ if the case is not 1PBE. The 1PBE case is not
multithreaded. so, the
+ sqliteTransLock should not be shared, the 1PBE must
exit when
+ SA_AIS_ERR_NOT_SUPPORTED is received. The
PBE/system is in bad state
+ like disk full(#1526).
+ */
+
+ return SA_AIS_ERR_NOT_SUPPORTED;
}
}
++sqliteTransLock; /* Lock is set. */
if(sqliteTransLock != 1) { /* i.e. not 2 or 3 */
LOG_ER("Failure in obtaining sqliteTransLock: %u",
sqliteTransLock);
- return SA_AIS_ERR_FAILED_OPERATION;
+ /* The SA_AIS_ERR_NOT_SUPPORTED is converted to
SA_AIS_ERR_FAILED_OPERATION
+ if the case is not 1PBE. The 1PBE case is not multithreaded. so,
the
+ sqliteTransLock should not be shared, the 1PBE must exit when
+ SA_AIS_ERR_NOT_SUPPORTED is received. The PBE/system is in bad
state
+ like disk full(#1526).
+ */
+
+ return SA_AIS_ERR_NOT_SUPPORTED;
}
rc = sqlite3_exec(dbHandle, "BEGIN EXCLUSIVE TRANSACTION", NULL, NULL,
&execErr);
diff --git a/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc
b/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc
--- a/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc
+++ b/osaf/services/saf/immsv/immpbed/immpbe_daemon.cc
@@ -486,6 +486,11 @@ static void saImmOiAdminOperationCallbac
rc = pbeBeginTrans(sDbHandle);
if(rc != SA_AIS_OK) {
+ if(!sPbe2 && !sPbe2B) {/* 1PBE case, is not
multithreaded */
+ exit(1);
+ } else if (rc == SA_AIS_ERR_NOT_SUPPORTED) {
+ rc = SA_AIS_ERR_FAILED_OPERATION;
+ }
LOG_WA("PBE failed to start sqlite transaction for
class create");
osafassert(rc != SA_AIS_ERR_TRY_AGAIN);
goto fail;
@@ -701,6 +706,12 @@ static void saImmOiAdminOperationCallbac
rc = pbeBeginTrans(sDbHandle);
if(rc != SA_AIS_OK) {
+ if(!sPbe2 && !sPbe2B) {/* 1PBE case, is not
multithreaded */
+ exit(1);
+ } else if (rc == SA_AIS_ERR_NOT_SUPPORTED) {
+ rc = SA_AIS_ERR_FAILED_OPERATION;
+ }
+
LOG_WA("PBE failed to start sqlite transaction for
class delete");
osafassert(rc != SA_AIS_ERR_TRY_AGAIN);
goto fail;
@@ -828,6 +839,12 @@ static void saImmOiAdminOperationCallbac
rc = pbeBeginTrans(sDbHandle);
if(rc != SA_AIS_OK) {
+ if(!sPbe2 && !sPbe2B) {/* 1PBE case, is not
multithreaded */
+ exit(1);
+ } else if (rc == SA_AIS_ERR_NOT_SUPPORTED) {
+ rc = SA_AIS_ERR_FAILED_OPERATION;
+ }
+
LOG_WA("PBE failed to start sqlite transaction for
update epoch");
osafassert(rc != SA_AIS_ERR_TRY_AGAIN);
goto fail;
@@ -1053,6 +1070,12 @@ static void saImmOiAdminOperationCallbac
if(rc == SA_AIS_OK) {
rc = pbeBeginTrans(sDbHandle);
if(rc != SA_AIS_OK) {
+ if(!sPbe2 && !sPbe2B) {/* 1PBE case, is not
multithreaded */
+ exit(1);
+ } else if (rc == SA_AIS_ERR_NOT_SUPPORTED) {
+ rc = SA_AIS_ERR_FAILED_OPERATION;
+ }
+
LOG_WA("PBE failed to start sqlite transaction
for CCB %llx/%llu", ccbId, ccbId);
osafassert(rc != SA_AIS_ERR_TRY_AGAIN);
goto fail;
@@ -1250,6 +1273,12 @@ static SaAisErrorT saImmOiCcbObjectModif
rc = pbeBeginTrans(sDbHandle);
if(rc != SA_AIS_OK) {
+ if(!sPbe2 && !sPbe2B) {/* 1PBE case, is not multithreaded */
+ exit(1);
+ } else if (rc == SA_AIS_ERR_NOT_SUPPORTED) {
+ rc = SA_AIS_ERR_FAILED_OPERATION;
+ }
+
LOG_WA("PBE failed to start sqlite transaction (ccbId:%llx) for
PRT attr update", ccbId);
rc = SA_AIS_ERR_NO_RESOURCES;
goto done;
@@ -1402,6 +1431,12 @@ static SaAisErrorT saImmOiCcbCompletedCa
}
if((rc = pbeBeginTrans(sDbHandle)) != SA_AIS_OK) {
+ if(!sPbe2 && !sPbe2B) {/* 1PBE case, is not multithreaded */
+ exit(1);
+ } else if (rc == SA_AIS_ERR_NOT_SUPPORTED) {
+ rc = SA_AIS_ERR_FAILED_OPERATION;
+ }
+
LOG_WA("pbeBEginTrans returned error: %u", rc);
goto done;
}
@@ -1691,6 +1726,12 @@ static SaAisErrorT saImmOiCcbObjectCreat
rc = pbeBeginTrans(sDbHandle);
if(rc != SA_AIS_OK) {
+ if(!sPbe2 && !sPbe2B) {/* 1PBE case, is not multithreaded */
+ exit(1);
+ } else if (rc == SA_AIS_ERR_NOT_SUPPORTED) {
+ rc = SA_AIS_ERR_FAILED_OPERATION;
+ }
+
LOG_WA("PBE failed to start sqlite transaction (ccbId:%llx)for
PRTO create", ccbId);
rc = SA_AIS_ERR_NO_RESOURCES;
goto done;
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel