Hi Dat, See my comments start with [Thien]
Best Regards, Thien -----Original Message----- From: Dat Tran Quoc Phan <dat.tq.p...@dektech.com.au> Sent: Monday, February 13, 2023 3:21 PM To: Thang Duc Nguyen <thang.d.ngu...@dektech.com.au>; Thien Minh Huynh <thien.m.hu...@dektech.com.au> Cc: opensaf-devel@lists.sourceforge.net; Dat Tran Quoc Phan <dat.tq.p...@dektech.com.au> Subject: [PATCH 1/1] imm: Wait for NFS available before processing ccb [#3330] There is a case that the ccb apply not run on some nodes due to NFS unavailable. Then it causes the mismatch state in complete ack. Solution is to wait for NFS available before continuing ccb execution. [Thien]: Long and short commit message should be describe closest with your change. e.g.: The solution is to make FileSystemAvailable consistent between all nodes. --- src/imm/immnd/ImmModel.cc | 21 ++++++++++++++++----- src/imm/immnd/ImmModel.h | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/imm/immnd/ImmModel.cc b/src/imm/immnd/ImmModel.cc index f49f95699..7932595f1 100644 --- a/src/imm/immnd/ImmModel.cc +++ b/src/imm/immnd/ImmModel.cc @@ -612,8 +612,6 @@ static bool sAbortNonCriticalCcbs = static SaUint32T sTerminatedCcbcount = 0; /* Terminated ccbs count. calculated at cleanTheBasement for every second*/ -// Show the status of underlying file system. -static bool sFileSystemAvailable = true; struct AttrFlagIncludes { explicit AttrFlagIncludes(SaImmAttrFlagsT attrFlag) : mFlag(attrFlag) {} @@ -2416,7 +2414,7 @@ bool ImmModel::immNotPbeWritable(bool isPrtoClient) { /* immInitMode == SA_IMM_KEEP_REPOSITORY */ /* Check if PBE OI is available and making progress. */ - if (!getPbeOi(&dummyCon, &dummyNode) || !sFileSystemAvailable) { + if (!getPbeOi(&dummyCon, &dummyNode) || !getFSAvailableFlag()) { [Thien]: Should be keep using static variable instead of directly from IMM. Instead of that, we able sync attribute value " saImmFileSystemStatus " to static variable in finalize sync phase. e.g: SaAisErrorT ImmModel::finalizeSync(...) { if (isCoord) { ... } else { ... } sFileSystemAvailable = getFSAvailableFlag(); } /* Pbe SHOULD be present but is NOT */ return true; } @@ -2956,6 +2954,21 @@ void ImmModel::setRegenerateDbFlag(bool value) { sRegenerateDb = value; } +bool ImmModel::getFSAvailableFlag() { + ImmAttrValueMap::iterator avi; + ObjectInfo* immMgObject = NULL; + ObjectMap::iterator oi = sObjectMap.find(immManagementDn); + if (oi != sObjectMap.end()) { + immMgObject = oi->second; + avi = immMgObject->mAttrValueMap.find(saImmFileSystemStatus); + if (avi != immMgObject->mAttrValueMap.end()) { + osafassert(!avi->second->isMultiValued()); + if (avi->second->empty()) return true; + return avi->second->getValue_int() != 0; + } + } + return true; +} /** * Fetches the SaImmRepositoryInitT value of the attribute * 'saImmRepositoryInit' in the object immManagementDn. @@ -13972,14 +13985,12 @@ SaAisErrorT ImmModel::admoImmMngtObject(const ImmsvOmAdminOperationInvoke* req, SA_IMM_ADMIN_FS_AVAILABLE); osafassert(fs_attr_iter != immObject->mAttrValueMap.end()); auto fs_attr_value = fs_attr_iter->second; - sFileSystemAvailable = true; fs_attr_value->setValue_int(1); } else if (req->operationId == SA_IMM_ADMIN_FS_UNAVAILABLE) { LOG_NO("Received: immadm -o %u safRdn=immManagement,safApp=safImmService", SA_IMM_ADMIN_FS_UNAVAILABLE); osafassert(fs_attr_iter != immObject->mAttrValueMap.end()); auto fs_attr_value = fs_attr_iter->second; - sFileSystemAvailable = false; fs_attr_value->setValue_int(0); } else { LOG_NO("Invalid operation ID %llu, for operation on %s", diff --git a/src/imm/immnd/ImmModel.h b/src/imm/immnd/ImmModel.h index 9940330f6..571e783ad 100644 --- a/src/imm/immnd/ImmModel.h +++ b/src/imm/immnd/ImmModel.h @@ -376,6 +376,7 @@ class ImmModel { bool increment); bool getRegenerateDbFlag(); void setRegenerateDbFlag(bool value); + bool getFSAvailableFlag(); SaImmRepositoryInitModeT getRepositoryInitMode(); unsigned int getMaxSyncBatchSize(); SaTimeT getSyncrTimeout(); -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel