|
From: Anders B. <and...@er...> - 2014-10-29 15:19:35
|
osaf/services/saf/immsv/immnd/immnd_proc.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
The imm.db file is regenerated by the slave if cb->mPbeVeteranB is false.
The logic for setting mPbeVeteranB to false has been corrected in a few
places to be more eager. In particular inside immnd_forkPbe If PBE in
general (either primary or slave or both) is not in sync just before a new
PBE primary or slave is forked, then they should always regenerate the imm.db
file. This workeed correctly for the primary PBE but not for the slave PBE,
before this patch.
diff --git a/osaf/services/saf/immsv/immnd/immnd_proc.c b/osaf/services/saf/immsv/immnd/immnd_proc.c
--- a/osaf/services/saf/immsv/immnd/immnd_proc.c
+++ b/osaf/services/saf/immsv/immnd/immnd_proc.c
@@ -904,7 +904,7 @@ static void immnd_pbePrtoPurgeMutations(
return;
}
- if(cb->mPbeVeteran) {
+ if(cb->mPbeVeteran || cb->mPbeVeteranB) {
/* Currently we can not recover results for PRTO create/delete/updates
from restarted PBE.
If we have non completed PRTO ops toward PBE when it needs to
@@ -979,7 +979,7 @@ static void immnd_cleanTheHouse(IMMND_CB
}
}
- if(!(cb->mPbeVeteranB)) {
+ if(cb->m2Pbe && !(cb->mPbeVeteranB)) {
/*
If we are coord then the PBE-B has to be remote.
If we are SC but not coord then the PBE-B has to be LOCAL.
@@ -1541,7 +1541,7 @@ static int immnd_forkPbe(IMMND_CB *cb)
LOG_NO("pbe-db-file-path:%s VETERAN:%u B:%u", dbFilePath, cb->mPbeVeteran, cb->mPbeVeteranB);
- if(cb->mPbeVeteran && !immModel_pbeIsInSync(cb, false)) {
+ if((cb->mPbeVeteran || cb->mPbeVeteranB) && !immModel_pbeIsInSync(cb, false)) {
/* Currently we can not recover results for PRTO create/delete/updates
from restarted PBE.
If we have non completed PRTO ops toward PBE when it needs to
@@ -1588,7 +1588,7 @@ static int immnd_forkPbe(IMMND_CB *cb)
/* If pbe crashes again before succeeding to attach as PBE implementer
then dont try to re-attach the DB file, instead regenerate it.
*/
- } else if(!(cb->mIsCoord) && cb->mPbeVeteranB) {
+ } else if(cb->m2Pbe && cb->mPbeVeteranB) {
cb->mPbeVeteranB = SA_FALSE;
}
@@ -2166,6 +2166,7 @@ uint32_t immnd_proc_server(uint32_t *tim
}
} else if(cb->pbePid2 <= 0) {
LOG_IN("Postponing start of SLAVE PBE until primary PBE has atached.");
+ cb->mPbeVeteranB = SA_FALSE;
}
} else if(cb->pbePid2 > 0) {
/* PBE disabled, yet SLAVE PBE is running => STOP it. */
|