Hi Mahesh,

The problem is in executing osafimmloadd. Check if the file is corrupted or is 
missing, as Hung stated.

BR,
Zoran

From: A V Mahesh [mailto:mahesh.va...@oracle.com]
Sent: Wednesday, February 17, 2016 6:28 AM
To: opensaf-devel@lists.sourceforge.net; Zoran Milinkovic; 
reddy.neelaka...@oracle.com
Subject: Re: [devel] [PATCH 1 of 5] imm: add common library support for cloud 
resilience feature [#1625]

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<mailto:zoran.milinko...@ericsson.com>
Sent: Tuesday, December 22, 2015 9:14PM
To: Neelakanta Reddy
      reddy.neelaka...@oracle.com<mailto:reddy.neelaka...@oracle.com>
Cc: Opensaf-devel
      
opensaf-devel@lists.sourceforge.net<mailto: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<mailto: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<mailto: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

Reply via email to