Hi Zoran/Neel, I am still facing the problem , the only difference between other successful testing and my testing is , i am using RPMS and others are using `make install`
================================== Feb 17 10:52:14 SC-1 osafimmd[9450]: NO ACT: New Epoch for IMMND process at node 2030f old epoch: 20 new epoch:21 Feb 17 10:52:14 SC-1 osafimmd[9450]: NO Attached Nodes:4 Accepted nodes:4 KnownVeteran:0 doReply:0 Feb 17 10:52:14 SC-1 osafimmnd[9461]: NO ABT REQUESTING SYNC Feb 17 10:52:14 SC-1 osafimmd[9450]: WA IMMND on controller (not currently coord) requests sync Feb 17 10:52:14 SC-1 osafimmd[9450]: NO Sc Absence Allowed is configured (900) => IMMND coord at payload node:2040f dest567416481644548 Feb 17 10:52:14 SC-1 osafimmd[9450]: NO Node 2010f request sync sync-pid:9461 epoch:0 Feb 17 10:52:14 SC-1 osafimmnd[9461]: NO SERVER STATE: IMM_SERVER_LOADING_PENDING --> IMM_SERVER_SYNC_PENDING Feb 17 10:52:14 SC-1 osafimmnd[9461]: NO NODE STATE-> IMM_NODE_ISOLATED Feb 17 10:52:14 SC-1 osafimmd[9450]: WA IMMND on controller (not currently coord) requests sync Feb 17 10:52:14 SC-1 osafimmd[9450]: NO Sc Absence Allowed is configured (900) => IMMND coord at payload node:2040f dest567416481644548 Feb 17 10:52:14 SC-1 osafimmd[9450]: NO Node 2020f request sync sync-pid:8283 epoch:0 Feb 17 10:52:18 SC-1 osafimmd[9450]: NO Successfully announced sync. New ruling epoch:22 Feb 17 10:52:18 SC-1 osafimmnd[9461]: NO NODE STATE-> IMM_NODE_W_AVAILABLE Feb 17 10:52:18 SC-1 osafimmnd[9461]: NO SERVER STATE: IMM_SERVER_SYNC_PENDING --> IMM_SERVER_SYNC_CLIENT Feb 17 10:52:18 SC-1 osafimmd[9450]: NO ACT: New Epoch for IMMND process at node 2040f old epoch: 21 new epoch:22 Feb 17 10:52:18 SC-1 osafimmd[9450]: NO Attached Nodes:4 Accepted nodes:4 KnownVeteran:0 doReply:0 Feb 17 10:52:18 SC-1 osafimmd[9450]: WA Successfully aborted sync. Epoch:22 Feb 17 10:52:18 SC-1 osafimmnd[9461]: WA Global ABORT SYNC received for epoch 22 Feb 17 10:52:18 SC-1 osafimmnd[9461]: WA SERVER STATE: IMM_SERVER_SYNC_CLIENT --> IMM_SERVER_LOADING_PENDING (sync aborted) Feb 17 10:52:18 SC-1 osafimmnd[9461]: NO NODE STATE-> IMM_NODE_UNKNOW 2624 Feb 17 10:52:18 SC-1 osafimmnd[9461]: NO Abort sync: Discarding synced objects Feb 17 10:52:18 SC-1 osafimmnd[9461]: NO Abort sync: Discarding synced classes Feb 17 10:52:18 SC-1 osafimmd[9450]: NO ACT: New Epoch for IMMND process at node 2030f old epoch: 21 new epoch:22 Feb 17 10:52:18 SC-1 osafimmd[9450]: NO Attached Nodes:4 Accepted nodes:4 KnownVeteran:0 doReply:0 Feb 17 10:52:18 SC-1 osafimmnd[9461]: NO ABT REQUESTING SYNC Feb 17 10:52:18 SC-1 osafimmnd[9461]: NO SERVER STATE: IMM_SERVER_LOADING_PENDING --> IMM_SERVER_SYNC_PENDING Feb 17 10:52:18 SC-1 osafimmd[9450]: WA IMMND on controller (not currently coord) requests sync Feb 17 10:52:18 SC-1 osafimmnd[9461]: NO NODE STATE-> IMM_NODE_ISOLATED Feb 17 10:52:18 SC-1 osafimmd[9450]: NO Sc Absence Allowed is configured (900) => IMMND coord at payload node:2040f dest567416481644548 Feb 17 10:52:18 SC-1 osafimmd[9450]: NO Node 2010f request sync sync-pid:9461 epoch:0 Feb 17 10:52:18 SC-1 osafimmd[9450]: WA IMMND on controller (not currently coord) requests sync Feb 17 10:52:18 SC-1 osafimmd[9450]: NO Sc Absence Allowed is configured (900) => IMMND coord at payload node:2040f dest567416481644548 Feb 17 10:52:18 SC-1 osafimmd[9450]: NO Node 2020f request sync sync-pid:8283 epoch:0 Feb 17 10:52:04 SC-2 osafimmnd[8283]: NO NODE STATE-> IMM_NODE_W_AVAILABLE Feb 17 10:52:04 SC-2 osafimmnd[8283]: NO SERVER STATE: IMM_SERVER_SYNC_PENDING --> IMM_SERVER_SYNC_CLIENT Feb 17 10:52:04 SC-2 osafimmd[8272]: NO SBY: New Epoch for IMMND process at node 2040f old epoch: 17 new epoch:18 Feb 17 10:52:04 SC-2 osafimmd[8272]: NO IMMND coord at 2040f Feb 17 10:52:04 SC-2 osafimmd[8272]: NO IMMND coord at 2040f Feb 17 10:52:04 SC-2 osafimmnd[8283]: WA Global ABORT SYNC received for epoch 18 Feb 17 10:52:04 SC-2 osafimmnd[8283]: WA SERVER STATE: IMM_SERVER_SYNC_CLIENT --> IMM_SERVER_LOADING_PENDING (sync aborted) Feb 17 10:52:04 SC-2 osafimmnd[8283]: NO NODE STATE-> IMM_NODE_UNKNOW 2624 Feb 17 10:52:04 SC-2 osafimmnd[8283]: NO Abort sync: Discarding synced objects Feb 17 10:52:04 SC-2 osafimmnd[8283]: NO Abort sync: Discarding synced classes Feb 17 10:52:04 SC-2 osafimmd[8272]: NO SBY: New Epoch for IMMND process at node 2030f old epoch: 17 new epoch:18 Feb 17 10:52:04 SC-2 osafimmnd[8283]: NO ABT REQUESTING SYNC Feb 17 10:52:04 SC-2 osafimmnd[8283]: NO SERVER STATE: IMM_SERVER_LOADING_PENDING --> IMM_SERVER_SYNC_PENDING Feb 17 10:52:04 SC-2 osafimmnd[8283]: NO NODE STATE-> IMM_NODE_ISOLATED Feb 17 10:52:07 SC-2 osafimmd[8272]: NO SBY: Ruling epoch noted as:19 Feb 17 10:52:07 SC-2 osafimmd[8272]: NO IMMND coord at 2040f Feb 17 10:52:07 SC-2 osafimmnd[8283]: NO NODE STATE-> IMM_NODE_W_AVAILABLE Feb 17 10:52:07 SC-2 osafimmnd[8283]: NO SERVER STATE: IMM_SERVER_SYNC_PENDING --> IMM_SERVER_SYNC_CLIENT Feb 17 10:52:07 SC-2 osafimmd[8272]: NO SBY: New Epoch for IMMND process at node 2040f old epoch: 18 new epoch:19 Feb 17 10:52:07 SC-2 osafimmd[8272]: NO IMMND coord at 2040f Feb 17 10:52:07 SC-2 osafimmd[8272]: NO IMMND coord at 2040f Feb 17 10:52:07 SC-2 osafimmnd[8283]: WA Global ABORT SYNC received for epoch 19 Feb 17 10:52:07 SC-2 osafimmnd[8283]: WA SERVER STATE: IMM_SERVER_SYNC_CLIENT --> IMM_SERVER_LOADING_PENDING (sync aborted) Feb 17 10:52:07 SC-2 osafimmnd[8283]: NO NODE STATE-> IMM_NODE_UNKNOW 2624 Feb 17 10:52:07 SC-2 osafimmnd[8283]: NO Abort sync: Discarding synced objects Feb 17 10:52:07 SC-2 osafimmnd[8283]: NO Abort sync: Discarding synced classes Feb 17 10:52:07 SC-2 osafimmd[8272]: NO SBY: New Epoch for IMMND process at node 2030f old epoch: 18 new epoch:19 Feb 17 10:52:07 SC-2 osafimmnd[8283]: NO ABT REQUESTING SYNC Feb 17 10:52:07 SC-2 osafimmnd[8283]: NO SERVER STATE: IMM_SERVER_LOADING_PENDING --> IMM_SERVER_SYNC_PENDING Feb 17 10:52:07 SC-2 osafimmnd[8283]: NO NODE STATE-> IMM_NODE_ISOLATED Feb 17 10:51:12 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:17 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:17 PL-3 osafimmnd[5293]: WA Global ABORT SYNC received for epoch 7 Feb 17 10:51:17 PL-3 osafimmnd[5293]: NO Epoch set to 7 in ImmModel Feb 17 10:51:17 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:21 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:21 PL-3 osafimmnd[5293]: WA Global ABORT SYNC received for epoch 8 Feb 17 10:51:21 PL-3 osafimmnd[5293]: NO Epoch set to 8 in ImmModel Feb 17 10:51:21 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:25 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:25 PL-3 osafimmnd[5293]: WA Global ABORT SYNC received for epoch 9 Feb 17 10:51:25 PL-3 osafimmnd[5293]: NO Epoch set to 9 in ImmModel Feb 17 10:51:25 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:30 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:30 PL-3 osafimmnd[5293]: WA Global ABORT SYNC received for epoch 10 Feb 17 10:51:30 PL-3 osafimmnd[5293]: NO Epoch set to 10 in ImmModel Feb 17 10:51:30 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:34 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:34 PL-3 osafimmnd[5293]: WA Global ABORT SYNC received for epoch 11 Feb 17 10:51:34 PL-3 osafimmnd[5293]: NO Epoch set to 11 in ImmModel Feb 17 10:51:34 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:38 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:38 PL-3 osafimmnd[5293]: WA Global ABORT SYNC received for epoch 12 Feb 17 10:51:38 PL-3 osafimmnd[5293]: NO Epoch set to 12 in ImmModel Feb 17 10:51:38 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:43 PL-3 osafimmnd[5293]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:20 PL-4 osafimmnd[5276]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:20 PL-4 osafimmnd[5381]: ER osafimmnd failed to exec sync, error 2, exiting Feb 17 10:51:20 PL-4 osafimmnd[5276]: ER SYNC APPARENTLY FAILED status:1 Feb 17 10:51:20 PL-4 osafimmnd[5276]: NO -SERVER STATE: IMM_SERVER_SYNC_SERVER --> IMM_SERVER_READY Feb 17 10:51:20 PL-4 osafimmnd[5276]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:20 PL-4 osafimmnd[5276]: NO Epoch set to 8 in ImmModel Feb 17 10:51:20 PL-4 osafimmnd[5276]: NO Coord broadcasting ABORT_SYNC, epoch:8 Feb 17 10:51:20 PL-4 osafimmnd[5276]: WA Global ABORT SYNC received for epoch 8 Feb 17 10:51:24 PL-4 osafimmnd[5276]: NO Announce sync, epoch:9 Feb 17 10:51:24 PL-4 osafimmnd[5276]: NO SERVER STATE: IMM_SERVER_READY --> IMM_SERVER_SYNC_SERVER Feb 17 10:51:24 PL-4 osafimmnd[5276]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:24 PL-4 osafimmnd[5386]: ER osafimmnd failed to exec sync, error 2, exiting Feb 17 10:51:25 PL-4 osafimmnd[5276]: ER SYNC APPARENTLY FAILED status:1 Feb 17 10:51:25 PL-4 osafimmnd[5276]: NO -SERVER STATE: IMM_SERVER_SYNC_SERVER --> IMM_SERVER_READY Feb 17 10:51:25 PL-4 osafimmnd[5276]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:25 PL-4 osafimmnd[5276]: NO Epoch set to 9 in ImmModel Feb 17 10:51:25 PL-4 osafimmnd[5276]: NO Coord broadcasting ABORT_SYNC, epoch:9 Feb 17 10:51:25 PL-4 osafimmnd[5276]: WA Global ABORT SYNC received for epoch 9 Feb 17 10:51:29 PL-4 osafimmnd[5276]: NO Announce sync, epoch:10 Feb 17 10:51:29 PL-4 osafimmnd[5276]: NO SERVER STATE: IMM_SERVER_READY --> IMM_SERVER_SYNC_SERVER Feb 17 10:51:29 PL-4 osafimmnd[5276]: NO NODE STATE-> IMM_NODE_R_AVAILABLE Feb 17 10:51:29 PL-4 osafimmnd[5387]: ER osafimmnd failed to exec sync, error 2, exiting Feb 17 10:51:29 PL-4 osafimmnd[5276]: ER SYNC APPARENTLY FAILED status:1 Feb 17 10:51:29 PL-4 osafimmnd[5276]: NO -SERVER STATE: IMM_SERVER_SYNC_SERVER --> IMM_SERVER_READY Feb 17 10:51:29 PL-4 osafimmnd[5276]: NO NODE STATE-> IMM_NODE_FULLY_AVAILABLE (2610) Feb 17 10:51:29 PL-4 osafimmnd[5276]: NO Epoch set to 10 in ImmModel Feb 17 10:51:29 PL-4 osafimmnd[5276]: NO Coord broadcasting ABORT_SYNC, epoch:10 Feb 17 10:51:29 PL-4 osafimmnd[5276]: WA Global ABORT SYNC received for epoch 10 ============================================== On 2/12/2016 10:53 AM, A V Mahesh wrote: > Hi Zoran/Neel, > > As part of reviewing/testing CPSV headless state V2 [#1621] , we bring > down the both SC`s and > bring up both SC`s in reverse order ( old active as new standby , old > standby as new active) > which is piratical case where you cannot control heads joining sequence, > as a result heads never joined the cluster and cluster went for reboot. > > I s this supported or not in headless state ? > > ============================================== > Feb 12 10:41:13 SC-2 osafimmnd[30074]: NO SERVER STATE: > IMM_SERVER_SYNC_PENDING --> IMM_SERVER_SYNC_CLIENT > Feb 12 10:41:13 SC-2 osafimmd[29890]: NO SBY: New Epoch for IMMND > process at node 2040f old epoch: 198 new epoch:199 > Feb 12 10:41:13 SC-2 osafimmd[29890]: NO IMMND coord at 2040f > Feb 12 10:41:13 SC-2 osafimmd[29890]: NO IMMND coord at 2040f > Feb 12 10:41:13 SC-2 osafimmnd[30074]: WA Global ABORT SYNC received > for epoch 199 > Feb 12 10:41:13 SC-2 osafimmnd[30074]: WA SERVER STATE: > IMM_SERVER_SYNC_CLIENT --> IMM_SERVER_LOADING_PENDING (sync aborted) > Feb 12 10:41:13 SC-2 osafimmnd[30074]: NO NODE STATE-> IMM_NODE_UNKNOW > 2621 > Feb 12 10:41:13 SC-2 osafimmnd[30074]: NO Abort sync: Discarding > synced objects > Feb 12 10:41:13 SC-2 osafimmnd[30074]: NO Abort sync: Discarding > synced classes > Feb 12 10:41:13 SC-2 osafimmd[29890]: NO SBY: New Epoch for IMMND > process at node 2030f old epoch: 198 new epoch:199 > Feb 12 10:41:13 SC-2 osafimmnd[30074]: NO ABT REQUESTING SYNC > Feb 12 10:41:13 SC-2 osafimmnd[30074]: NO SERVER STATE: > IMM_SERVER_LOADING_PENDING --> IMM_SERVER_SYNC_PENDING > Feb 12 10:41:13 SC-2 osafimmnd[30074]: NO NODE STATE-> IMM_NODE_ISOLATED > Feb 12 10:41:17 SC-2 kernel: [71593.180556] tipc: Resetting link > <1.1.2:eth2-1.1.3:eth1>, changeover initiated by peer > Feb 12 10:41:17 SC-2 kernel: [71593.180562] tipc: Lost link > <1.1.2:eth2-1.1.3:eth1> on network plane B > Feb 12 10:41:17 SC-2 kernel: [71593.192851] tipc: Resetting link > <1.1.2:eth2-1.1.4:eth2>, changeover initiated by peer > Feb 12 10:41:17 SC-2 kernel: [71593.192857] tipc: Lost link > <1.1.2:eth2-1.1.4:eth2> on network plane B > Feb 12 10:41:19 SC-2 osafimmd[29890]: WA Message count:11144 + 1 != 11144 > Feb 12 10:41:19 SC-2 kernel: [71595.365041] tipc: Resetting link > <1.1.2:eth3-1.1.3:eth4>, peer not responding > Feb 12 10:41:19 SC-2 kernel: [71595.365047] tipc: Lost link > <1.1.2:eth3-1.1.3:eth4> on network plane A > Feb 12 10:41:19 SC-2 kernel: [71595.365051] tipc: Lost contact with > <1.1.3> > Feb 12 10:41:19 SC-2 kernel: [71595.372092] tipc: Resetting link > <1.1.2:eth3-1.1.4:eth0>, peer not responding > Feb 12 10:41:19 SC-2 kernel: [71595.372100] tipc: Lost link > <1.1.2:eth3-1.1.4:eth0> on network plane A > Feb 12 10:41:19 SC-2 kernel: [71595.372105] tipc: Lost contact with > <1.1.4> > Feb 12 10:41:19 SC-2 osafimmd[29890]: ER Standby IMMD recieved reset > message. All IMMNDs will restart. > Feb 12 10:41:19 SC-2 osafimmd[29890]: ER IMM RELOAD with NO persistent > back end => ensure cluster restart by IMMD exit at both SCs, exiting > Feb 12 10:41:20 SC-2 osafimmnd[30074]: WA SC Absence IS allowed:900 > IMMD service is DOWN > Feb 12 10:41:20 SC-2 osafimmnd[30074]: WA IMMND was being synced or > loaded (6), has to restart > Feb 12 10:41:20 SC-2 opensafd[29839]: ER Could Not RESPAWN IMMND > Feb 12 10:41:20 SC-2 opensafd[29839]: ER Failed DESC:IMMND > Feb 12 10:41:20 SC-2 opensafd[29839]: ER Trying To RESPAWN > /usr/lib64/opensaf/clc-cli/osaf-immnd attempt #2 > Feb 12 10:41:20 SC-2 opensafd[29839]: ER Sending SIGABRT to IMMND, > pid=30074, (origin parent pid=30068) > Feb 12 10:41:35 SC-2 osafimmnd[30187]: Started > ============================================== > > > > On 2/3/2016 5:05 PM, Hung Nguyen wrote: >> Hi Zoran, >> >> Please find my comments inline. >> >> >> BR, >> >> Hung Nguyen - DEK Technologies >> >> >> -------------------------------------------------------------------------------- >> >> >> From: Zoran Milinkovic zoran.milinko...@ericsson.com >> Sent: Tuesday, December 22, 2015 9:14PM >> To: Neelakanta Reddy >> reddy.neelaka...@oracle.com >> Cc: Opensaf-devel >> opensaf-devel@lists.sourceforge.net >> Subject: [devel] [PATCH 1 of 5] imm: add common library support for >> cloud resilience feature [#1625] >> >> >> osaf/libs/common/immsv/immpbe_dump.cc | 378 >> +++++++++++++++++++++++++- >> osaf/libs/common/immsv/immsv_evt.c | 43 ++ >> osaf/libs/common/immsv/include/immpbe_dump.hh | 2 +- >> osaf/libs/common/immsv/include/immsv_api.h | 1 + >> osaf/libs/common/immsv/include/immsv_evt.h | 17 +- >> 5 files changed, 430 insertions(+), 11 deletions(-) >> >> >> The patch contains IMM common library code for cloud resilience feature >> >> 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 >> @@ -1185,6 +1185,359 @@ bailout: >> exit(1); >> } >> +static bool verifyAttributeValuePBE(const char *attrVal, >> + SaImmAttrValueT value, SaImmValueTypeT attrType) { >> + >> + if(!attrVal && !value) { >> + return true; >> + } >> + if(!attrVal || !value) { >> + return false; >> + } >> + >> + switch(attrType) { >> + case SA_IMM_ATTR_SADOUBLET: { >> + char val[50]; >> + snprintf(val, 50, "%.15g", *(double *)value); >> + return strtod(attrVal, NULL) == strtod(val, NULL); >> + } >> + >> + case SA_IMM_ATTR_SAFLOATT: >> + return strtof(attrVal, NULL) == *(float *)value; >> + >> + case SA_IMM_ATTR_SAUINT32T: >> + return strtoul(attrVal, NULL, 10) == *(SaUint32T *)value; >> + >> + case SA_IMM_ATTR_SAINT32T: >> + return strtol(attrVal, NULL, 10) == *(SaInt32T *)value; >> + >> + case SA_IMM_ATTR_SAUINT64T: >> + return strtoull(attrVal, NULL, 10) == *(SaUint64T *)value; >> + >> + case SA_IMM_ATTR_SATIMET: >> + case SA_IMM_ATTR_SAINT64T: >> + return strtoll(attrVal, NULL, 10) == *(SaInt64T *)value; >> + >> + case SA_IMM_ATTR_SASTRINGT: >> + return strcmp(attrVal, *(SaStringT *)value) == 0; >> + >> + case SA_IMM_ATTR_SANAMET: >> + return strcmp(attrVal, >> osaf_extended_name_borrow((SaNameT *)value)) == 0; >> + >> + case SA_IMM_ATTR_SAANYT: { >> + std::ostringstream ost; >> + SaAnyT *any = (SaAnyT *)value; >> + >> + for (unsigned int i = 0; i < any->bufferSize; i++) { >> + ost << std::hex >> + << (((int)any->bufferAddr[i] < 0x10)? "0":"") >> + << (int)any->bufferAddr[i]; >> + } >> + >> + return strcmp(ost.str().c_str(), attrVal) == 0; >> + } >> + >> + default: >> + LOG_ER("UNKNOWN ATTRIBUTE TYPE: %d", attrType); >> + abort(); >> + } >> + >> + return false; >> +} >> + >> +static bool verifyObjectAttributePBE(const char *attrVal, >> SaImmAttrValuesT_2 *attr) { >> + unsigned int i; >> + >> + if(!attrVal && attr->attrValuesNumber == 0) { >> + return true; >> + } >> + >> + for(i=0; i<attr->attrValuesNumber; i++) { >> + if(verifyAttributeValuePBE(attrVal, attr->attrValues[i], >> attr->attrValueType)) { >> + return true; >> + } >> + } >> + >> + return false; >> +} >> + >> +static bool verifyClassObjectsPBE(std::string classNameString, >> + SaImmHandleT immHandle, >> + void* db_handle) >> +{ >> + sqlite3* dbHandle = (sqlite3 *) db_handle; >> + SaImmSearchHandleT searchHandle = 0; >> + SaImmSearchParametersT_2 searchParam; >> + const char *className = classNameString.c_str(); >> + SaAisErrorT err; >> + std::string sql; >> + char **result = NULL; >> + int nrow; >> + int ncol; >> + char *errmsg; >> + int n, c, r, i; >> + int attrPos; >> + int objectCounter = 0; >> + std::map<std::string, int> rdnMap; // <RDN, row in the >> result> >> + std::map<std::string, int>::iterator rmi; >> + SaStringT objectName; >> + SaImmAttrValuesT_2 **attributes; >> + SaImmAttrDefinitionT_2 **attrDefinitions = NULL; >> + SaImmClassCategoryT classCategory; >> + int rdnAttrDefIndex = -1; >> + bool ok = true; >> + int rc; >> + >> + TRACE_ENTER(); >> + >> + err = saImmOmClassDescriptionGet_2(immHandle, >> (SaImmClassNameT)className, &classCategory, &attrDefinitions); >> + if(err != SA_AIS_OK) { >> + LOG_ER("Cannot fetch class description for class '%s': %d", >> className, err); >> + TRACE_LEAVE(); >> + return false; >> + } >> + >> + // Skip runtime classes >> + if(classCategory == SA_IMM_CLASS_RUNTIME) { >> + saImmOmClassDescriptionMemoryFree_2(immHandle, >> attrDefinitions); >> + TRACE_LEAVE(); >> + return true; >> + } >> + >> + for(i=0; attrDefinitions[i]; i++) { >> + if(attrDefinitions[i]->attrFlags & SA_IMM_ATTR_RDN) { >> + rdnAttrDefIndex = i; >> + } >> + } >> + >> + if(attrDefinitions[i]) { >> + // This should never happen >> + LOG_ER("Cannot find RDN attribute in search result for class >> '%s'", className); >> + abort(); >> + } >> + >> + searchParam.searchOneAttr.attrName = >> (SaImmAttrNameT)"SaImmAttrClassName"; >> + searchParam.searchOneAttr.attrValue = &className; >> + searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SASTRINGT; >> + >> + err = saImmOmSearchInitialize_2(immHandle, NULL, SA_IMM_SUBTREE, >> + SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_ALL_ATTR | >> SA_IMM_SEARCH_PERSISTENT_ATTRS, >> + &searchParam, NULL, &searchHandle); >> + if(err != SA_AIS_OK) { >> + LOG_ER("Cannot fetch objects of class '%s' from IMM: %d", >> className, err); >> + goto bailout; >> + } >> + >> + sql = "SELECT o.dn, c.* FROM objects o, "; >> + sql.append(className); >> + sql.append(" c WHERE o.obj_id = c.obj_id"); >> + rc = sqlite3_get_table(dbHandle, sql.c_str(), &result, &nrow, >> &ncol, &errmsg); >> + if(rc) { >> + LOG_ER("SQL statement ('%s') failed. Reason: %s", >> sql.c_str(), errmsg); >> + goto bailout; >> + } >> + >> + // Map object DNs for fast search >> + for(n=1; n<=nrow; n++) { >> + rdnMap[result[n * ncol]] = n; >> + } >> + >> + // Iterate through IMM search result and check attributes >> + while((err = saImmOmSearchNext_o3(searchHandle, &objectName, >> &attributes)) == SA_AIS_OK) { >> + // Increase object counter >> + objectCounter++; >> + >> + // Skip checking IMM object >> + if(!strcmp(objectName, >> "opensafImm=opensafImm,safApp=safImmService") || >> + !strcmp(objectName, >> "safRdn=immManagement,safApp=safImmService")) { >> + continue; >> + } >> + >> + // Find object index in the fetched result >> + rmi = rdnMap.find(objectName); >> + if(rmi == rdnMap.end()) { >> + LOG_ER("IMM object '%s' cannot be found in PBE >> database", objectName); >> + goto bailout; >> + } >> + >> + // Check each attribute >> + for(i=0; attrDefinitions[i]; i++) { >> + // Don't check RDN attribute >> + if(i == rdnAttrDefIndex) { >> + continue; >> + } >> + >> + /* Skip persistent attributes. >> + * TODO: Should persistent runtime data be checked ??? >> + */ >> + if(attrDefinitions[i]->attrFlags & SA_IMM_ATTR_RUNTIME) { >> + continue; >> + } >> + >> + // Skip default attributes >> + if(!strcmp(attrDefinitions[i]->attrName, >> "SaImmAttrImplementerName") || >> + !strcmp(attrDefinitions[i]->attrName, >> "SaImmAttrClassName") || >> + !strcmp(attrDefinitions[i]->attrName, >> "SaImmAttrAdminOwnerName")) { >> + continue; >> + } >> + >> + // Find attribute from the search result >> + for(attrPos=0; attributes[attrPos]; attrPos++) { >> + if(!strcmp(attributes[attrPos]->attrName, >> attrDefinitions[i]->attrName)) { >> + break; >> + } >> + } >> + if(!attributes[attrPos]) { >> + LOG_ER("Cannot find attribute '%s' in object '%s' in >> the search result", >> + attrDefinitions[i]->attrName, objectName); >> + goto bailout; >> + } >> + >> + if(attrDefinitions[i]->attrFlags & >> SA_IMM_ATTR_MULTI_VALUE) { >> + // Check multi value attribute >> + char **res; >> + int nr, nc; // number of rows and columns >> + >> + // Create SQL statements to fetch multi values >> + switch(attrDefinitions[i]->attrValueType) { >> + case SA_IMM_ATTR_SADOUBLET: >> + case SA_IMM_ATTR_SAFLOATT: >> + sql = "SELECT real_val FROM >> objects_real_multi WHERE obj_id = "; >> + sql.append(result[rmi->second * ncol + 1]); >> + sql.append(" AND attr_name = '"); >> + sql.append(attrDefinitions[i]->attrName); >> + sql.append("'"); >> + break; >> + >> + case SA_IMM_ATTR_SAINT32T: >> + case SA_IMM_ATTR_SAINT64T: >> + case SA_IMM_ATTR_SAUINT32T: >> + case SA_IMM_ATTR_SAUINT64T: >> + case SA_IMM_ATTR_SATIMET: >> + sql = "SELECT int_val FROM objects_int_multi >> WHERE obj_id = "; >> + sql.append(result[rmi->second * ncol + 1]); >> + sql.append(" AND attr_name = '"); >> + sql.append(attrDefinitions[i]->attrName); >> + sql.append("'"); >> + break; >> + >> + case SA_IMM_ATTR_SASTRINGT: >> + case SA_IMM_ATTR_SANAMET: >> + sql = "SELECT text_val FROM >> objects_text_multi WHERE obj_id = "; >> + sql.append(result[rmi->second * ncol + 1]); >> + sql.append(" AND attr_name = '"); >> + sql.append(attrDefinitions[i]->attrName); >> + sql.append("'"); >> + break; >> + >> + case SA_IMM_ATTR_SAANYT: >> + sql = "SELECT real_val FROM >> objects_real_multi WHERE obj_id = "; >> + sql.append(result[rmi->second * ncol + 1]); >> + sql.append(" AND attr_name = '"); >> + sql.append(attrDefinitions[i]->attrName); >> + sql.append("'"); >> + break; >> + >> + default: >> + LOG_ER("UNKOWN attribute type: %d", >> attrDefinitions[i]->attrValueType); >> + abort(); >> + } >> + >> + // Execute SQL >> + if(sqlite3_get_table(dbHandle, sql.c_str(), &res, >> &nr, &nc, &errmsg) != SQLITE_OK) { >> + LOG_ER("Cannot fetch values for attribute '%s' >> in class '%s'. Reason: %s", >> + attrDefinitions[i]->attrName, className, >> errmsg); >> + goto bailout; >> + } >> + >> + // First multi value check. Check number of values >> + if(nr != (int)attributes[attrPos]->attrValuesNumber) { >> + LOG_ER("Mismatch in number of multi value >> attributes in attribute '%s' in object '%s'", >> + attributes[attrPos]->attrName, objectName); >> + ok = false; >> + goto finish; >> + } >> + >> + for(r=1; r<=nr; r++) { >> + // First loop. res vs. attributes >> + if(!verifyObjectAttributePBE(res[r], >> attributes[attrPos])) { >> + LOG_ER("Cannot match value for multi value >> attribute '%s' in object '%s'", >> + attributes[attrPos]->attrName, objectName); >> + // Values do not match >> + ok = false; >> + goto finish; >> + } >> + // Second loop. attributes vs. res >> + for(n=0; n<nr; n++) { >> + if(verifyAttributeValuePBE(res[r], >> attributes[attrPos]->attrValues[n], >> attributes[attrPos]->attrValueType)) { >> + // Found value >> + break; >> + } >> + } >> + if(n == nr) { >> + LOG_ER("Cannot match value for multi value >> attribute '%s' in object '%s'.", >> + attributes[attrPos]->attrName, objectName); >> + // Values didn't match in the second loop >> + ok = false; >> + goto finish; >> + } >> + } >> + >> +finish: >> + sqlite3_free_table(res); >> + if(!ok) { >> + goto bailout; >> + } >> + } else { // Check non-multi value attribute >> + // Find column in 'result' >> + for(c=2; c<ncol; c++) { >> + if(!strcmp(attrDefinitions[i]->attrName, >> result[c])) { >> + break; >> + } >> + } >> + >> + // Verify fetched value against value from the >> search result >> + if(!verifyObjectAttributePBE(result[rmi->second * ncol + c], >> attributes[attrPos])) { >> + LOG_ER("Cannot match attribute value for >> attribute '%s' in object '%s'", >> + attributes[attrPos]->attrName, objectName); >> + goto bailout; >> + } >> + } >> + } >> + } >> + >> + saImmOmSearchFinalize(searchHandle); >> + sqlite3_free_table(result); >> + saImmOmClassDescriptionMemoryFree_2(immHandle, attrDefinitions); >> + >> + if(objectCounter != nrow) { >> + LOG_ER("Mismatch in number of objects between IMM database >> and PBE database"); >> + TRACE_LEAVE(); >> + return false; >> + } >> + >> + TRACE_LEAVE(); >> + >> + return true; >> + >> +bailout: >> + if(result) { >> + sqlite3_free_table(result); >> + } >> + >> + if(searchHandle) { >> + saImmOmSearchFinalize(searchHandle); >> + } >> + >> + if(attrDefinitions) { >> + saImmOmClassDescriptionMemoryFree_2(immHandle, >> attrDefinitions); >> + } >> + >> + TRACE_LEAVE(); >> + >> + return false; >> +} >> + >> static ClassInfo* verifyClassPBE(std::string classNameString, >> SaImmHandleT immHandle, >> void* db_handle) >> @@ -1199,11 +1552,9 @@ static ClassInfo* verifyClassPBE(std::st >> SaImmAttrDefinitionT_2 **attrDefinitions; >> SaAisErrorT errorCode; >> /* >> - This function does very little verification right now. It >> should do more. >> - Reason is we are re-attaching to a DB file after a gap during >> which we do not know >> - what has happened to that file. We should at least verify that >> the number of classes >> - and number of objects match. Each object should really have a >> checksum. >> - Verification of objects should be a separate function >> verifyObjectPBE. >> + We are re-attaching to a DB file after a gap during which we >> do not know >> + what has happened to that file. We should at least verify that >> the number >> + of classes and number of objects match. >> */ >> TRACE_ENTER(); >> @@ -2509,7 +2860,7 @@ bool dumpClassesToPbe(SaImmHandleT immHa >> return false; >> } >> -int verifyPbeState(SaImmHandleT immHandle, ClassMap *classIdMap, >> void* db_handle) >> +int verifyPbeState(SaImmHandleT immHandle, ClassMap *classIdMap, >> void* db_handle, bool pbeVerifyObjects) >> { >> /* Function used only when re-connecting to an already >> existing DB file. */ >> std::list<std::string> classNameList; >> @@ -2524,6 +2875,8 @@ int verifyPbeState(SaImmHandleT immHandl >> int nrows=0; >> int ncols=0; >> bool badfile=false; >> + bool verified; >> + >> TRACE_ENTER(); >> classNameList = getClassNames(immHandle); >> @@ -2542,11 +2895,20 @@ int verifyPbeState(SaImmHandleT immHandl >> ClassInfo* cl_info = verifyClassPBE((*it), immHandle, >> dbHandle); >> if(cl_info) { >> (*classIdMap)[(*it)] = cl_info; >> - it++; >> } else { >> badfile=true; >> goto bailout; >> } >> + >> + if(pbeVerifyObjects) { >> + verified = verifyClassObjectsPBE((*it), immHandle, >> dbHandle); >> + if(!verified) { >> + badfile=true; >> + goto bailout; >> + } >> + } >> + >> + it++; >> } >> rc = sqlite3_get_table(dbHandle, sqlQ.c_str(), &result, >> &nrows, &ncols, &qErr); >> @@ -3816,7 +4178,7 @@ SaAisErrorT getCcbOutcomeFromPbe(void* d >> return SA_AIS_ERR_LIBRARY; >> } >> -int verifyPbeState(SaImmHandleT immHandle, ClassMap *classIdMap, >> void* db_handle) >> +int verifyPbeState(SaImmHandleT immHandle, ClassMap *classIdMap, >> void* db_handle, bool pbeVerifyObjects) >> { >> abort(); >> return 0; >> diff --git a/osaf/libs/common/immsv/immsv_evt.c >> b/osaf/libs/common/immsv/immsv_evt.c >> --- a/osaf/libs/common/immsv/immsv_evt.c >> +++ b/osaf/libs/common/immsv/immsv_evt.c >> @@ -2908,6 +2908,27 @@ static uint32_t immsv_evt_enc_toplevel(I >> ncs_enc_claim_space(o_ub, 4); >> /* immdevt->info.ctrl_msg.pbeFile.buf encoded by >> sublevel */ >> } >> + >> + if((immdevt->info.ctrl_msg.refresh == 2) && >> + (immdevt->type == IMMD_EVT_ND2D_INTRO)) { /* Intro >> after IMMD restart. */ >> + >> + IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 8); >> + ncs_encode_64bit(&p8, >> immdevt->info.ctrl_msg.fevs_count); >> + ncs_enc_claim_space(o_ub, 8); >> + >> + IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 4); >> + ncs_encode_32bit(&p8, >> immdevt->info.ctrl_msg.admo_id_count); >> + ncs_enc_claim_space(o_ub, 4); >> + >> + IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 4); >> + ncs_encode_32bit(&p8, >> immdevt->info.ctrl_msg.ccb_id_count); >> + ncs_enc_claim_space(o_ub, 4); >> + >> + IMMSV_RSRV_SPACE_ASSERT(p8, o_ub, 4); >> + ncs_encode_32bit(&p8, >> immdevt->info.ctrl_msg.impl_count); >> + ncs_enc_claim_space(o_ub, 4); >> + } >> + >> break; >> case IMMD_EVT_ND2D_SYNC_FEVS_BASE: >> @@ -4283,6 +4304,28 @@ static uint32_t immsv_evt_dec_toplevel(N >> ncs_dec_skip_space(i_ub, 4); >> /* immdevt->info.ctrl_msg.pbeFile.buf decoded by >> sublevel */ >> } >> + >> + >> + if((immdevt->info.ctrl_msg.refresh == 2) && >> + (immdevt->type == IMMD_EVT_ND2D_INTRO)) { /* Intro >> after IMMD restart. */ >> + >> + IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 8); >> + immdevt->info.ctrl_msg.fevs_count = >> ncs_decode_64bit(&p8); >> + ncs_dec_skip_space(i_ub, 8); >> + >> + IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 4); >> + immdevt->info.ctrl_msg.admo_id_count = >> ncs_decode_32bit(&p8); >> + ncs_dec_skip_space(i_ub, 4); >> + >> + IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 4); >> + immdevt->info.ctrl_msg.ccb_id_count = >> ncs_decode_32bit(&p8); >> + ncs_dec_skip_space(i_ub, 4); >> + >> + IMMSV_FLTN_SPACE_ASSERT(p8, local_data, i_ub, 4); >> + immdevt->info.ctrl_msg.impl_count = >> ncs_decode_32bit(&p8); >> + ncs_dec_skip_space(i_ub, 4); >> + } >> + >> break; >> case IMMD_EVT_ND2D_SYNC_FEVS_BASE: >> diff --git a/osaf/libs/common/immsv/include/immpbe_dump.hh >> b/osaf/libs/common/immsv/include/immpbe_dump.hh >> --- a/osaf/libs/common/immsv/include/immpbe_dump.hh >> +++ b/osaf/libs/common/immsv/include/immpbe_dump.hh >> @@ -81,7 +81,7 @@ void deleteClassToPBE(std::string classN >> ClassInfo* theClass); >> int verifyPbeState(SaImmHandleT immHandle, ClassMap *classIdMap, >> - void* db_handle); >> + void* db_handle, bool pbeVerifyObjects); >> int dumpObjectsToPbe(SaImmHandleT immHandle, ClassMap* classIdMap, >> void* db_handle); >> diff --git a/osaf/libs/common/immsv/include/immsv_api.h >> b/osaf/libs/common/immsv/include/immsv_api.h >> --- a/osaf/libs/common/immsv/include/immsv_api.h >> +++ b/osaf/libs/common/immsv/include/immsv_api.h >> @@ -61,6 +61,7 @@ extern "C" { >> #define OPENSAF_IMM_LONG_DNS_ALLOWED "longDnsAllowed" >> #define OPENSAF_IMM_ACCESS_CONTROL_MODE "accessControlMode" >> #define OPENSAF_IMM_AUTHORIZED_GROUP "authorizedGroup" >> +#define OPENSAF_IMM_SC_ABSENCE_ALLOWED "scAbsenceAllowed" >> typedef enum { >> ACCESS_CONTROL_DISABLED = 0, >> diff --git a/osaf/libs/common/immsv/include/immsv_evt.h >> b/osaf/libs/common/immsv/include/immsv_evt.h >> --- a/osaf/libs/common/immsv/include/immsv_evt.h >> +++ b/osaf/libs/common/immsv/include/immsv_evt.h >> @@ -412,7 +412,9 @@ typedef struct immsv_d2nd_control { >> IMMSV_OCTET_STRING dir; >> IMMSV_OCTET_STRING xmlFile; >> - IMMSV_OCTET_STRING pbeFile; >> + IMMSV_OCTET_STRING pbeFile; >> + >> + >> } IMMSV_D2ND_CONTROL; >> /**************************************************************************** >> @@ -422,7 +424,7 @@ typedef struct immsv_d2nd_control { >> typedef struct immsv_nd2d_control { >> SaUint32T ndExecPid; >> SaUint32T epoch; >> - uint8_t refresh; //TRUE=> This is a refresh of epoch. >> + uint8_t refresh; /* refresh>0 => Refresh of epoch; refresh==2 => >> IMMD restart intro.*/ >> uint8_t pbeEnabled;/* OpenSaf4.4: >> 2:not-enabled-not-configured can be convertred >> to 0 in immd. >> 3:not-enabled-configured >> @@ -435,6 +437,17 @@ typedef struct immsv_nd2d_control { >> IMMSV_OCTET_STRING dir; >> IMMSV_OCTET_STRING xmlFile; >> IMMSV_OCTET_STRING pbeFile; >> + >> + /* OpenSaf4.6: At restart of IMMD sv-id, IMMND gives feeedback on: >> [Hung] Not OpenSaf4.6 :) >> >> + - fevs_count >> + - admo_id_count >> + - ccb_id_count >> + - impl_count >> + */ >> + SaUint64T fevs_count; //Max received at IMMND for Fevs Count >> + SaUint32T admo_id_count;//Max received at IMMND for AdminOwner ID >> + SaUint32T ccb_id_count; //Max received at IMMND for CCB ID >> + SaUint32T impl_count; //Max received at IMMND for Implementer ID >> } IMMSV_ND2D_CONTROL; >> typedef struct immsv_nd2d_2_pbe { >> >> ------------------------------------------------------------------------------ >> >> >> _______________________________________________ >> Opensaf-devel mailing list >> Opensaf-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/opensaf-devel >> >> >> ------------------------------------------------------------------------------ >> >> >> Site24x7 APM Insight: Get Deep Visibility into Application Performance >> APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month >> Monitor end-to-end web transactions and take corrective actions now >> Troubleshoot faster and improve end-user experience. Signup Now! >> http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140 >> _______________________________________________ >> Opensaf-devel mailing list >> Opensaf-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/opensaf-devel > ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel