Hi Hung,

Reviewed the patch.
Ac from me.

Thanks,
Zoran

-----Original Message-----
From: Hung Nguyen [mailto:[email protected]] 
Sent: Tuesday, March 08, 2016 11:57 AM
To: Zoran Milinkovic; [email protected]
Cc: [email protected]
Subject: [PATCH 1 of 1] imm: Discard dying admin owners when headless [#1696]

 osaf/services/saf/immsv/immnd/ImmModel.cc |  12 ++++++------
 osaf/services/saf/immsv/immnd/ImmModel.hh |   2 +-
 2 files changed, 7 insertions(+), 7 deletions(-)


Admin owners are marked as dying when being hard finalized during sync.
Normally the dying admo will be discarded in finalizeSync().

When headless, we don't need to keep those dying admin owners.

diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc 
b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -1286,7 +1286,7 @@ immModel_discardNode(IMMND_CB *cb,
     ConnVector cv, gv;
     ConnVector::iterator cvi, gvi;
     unsigned int ix=0;
-    ImmModel::instance(&cb->immModel)->discardNode(nodeId, cv, gv, 
cb->mIsCoord);
+    ImmModel::instance(&cb->immModel)->discardNode(nodeId, cv, gv, 
+ cb->mIsCoord, false);
     *arrSize = (SaUint32T) cv.size();
     if(*arrSize) {
         *ccbIdArr = (SaUint32T *) malloc((*arrSize)* sizeof(SaUint32T)); @@ 
-12477,7 +12477,7 @@ ImmModel::getImplementerId(SaUint32T loc  }
 
 void
-ImmModel::discardNode(unsigned int deadNode, IdVector& cv, IdVector& gv, bool 
isAtCoord )
+ImmModel::discardNode(unsigned int deadNode, IdVector& cv, IdVector& 
+gv, bool isAtCoord, bool scAbsence)
 {
     ImplementerVector::iterator i;
     AdminOwnerVector::iterator i2;
@@ -12580,7 +12580,7 @@ ImmModel::discardNode(unsigned int deadN
     i2 = sOwnerVector.begin();
     while(i2 != sOwnerVector.end()) {
         AdminOwnerInfo* ainfo = (*i2);
-        if(ainfo->mNodeId == deadNode && (!ainfo->mDying)) {
+        if(ainfo->mNodeId == deadNode && (!ainfo->mDying || scAbsence)) 
+ {
             //Inefficient: lookup of admin owner again.
             if(adminOwnerDelete(ainfo->mId, true) == SA_AIS_OK) {
                 i2 = sOwnerVector.begin();//restart of iteration again.
@@ -17979,7 +17979,7 @@ ImmModel::finalizeSync(ImmsvOmFinalizeSy
                 for(;ivi != sNodesDeadDuringSync.end(); ++ivi) {
                     ConnVector cv, gv;
                     LOG_NO("Sync client re-executing discardNode for node %x", 
(*ivi));
-                    this->discardNode((*ivi), cv, gv, false);
+                    this->discardNode((*ivi), cv, gv, false, false);
                     if(!(cv.empty())) {
                         LOG_ER("Sync can not discard node with active ccbs");
                         err = SA_AIS_ERR_FAILED_OPERATION; @@ -18302,7 
+18302,7 @@ ImmModel::isolateThisNode(unsigned int t
             i++;
         } else {
             info = NULL;
-            this->discardNode(otherNode, cv, gv, isAtCoord);
+            this->discardNode(otherNode, cv, gv, isAtCoord, true);
             LOG_NO("Impl Discarded node %x", otherNode);
             /* Discard ccbs. */
 
@@ -18320,7 +18320,7 @@ ImmModel::isolateThisNode(unsigned int t
             i2++;
         } else {
             ainfo = NULL;
-            this->discardNode(otherNode, cv, gv, isAtCoord);
+            this->discardNode(otherNode, cv, gv, isAtCoord, true);
             LOG_NO("Admo Discarded node %x", otherNode);
             /* Discard ccbs */
 
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.hh 
b/osaf/services/saf/immsv/immnd/ImmModel.hh
--- a/osaf/services/saf/immsv/immnd/ImmModel.hh
+++ b/osaf/services/saf/immsv/immnd/ImmModel.hh
@@ -546,7 +546,7 @@ public:
                                         IdVector& gv, 
                                         bool isAtCoord);
     void              discardContinuations(SaUint32T dead);
-    void              discardNode(unsigned int nodeId, IdVector& cv, IdVector& 
gv, bool isAtCoord);
+    void              discardNode(unsigned int nodeId, IdVector& cv, IdVector& 
gv, bool isAtCoord, bool scAbsence);
     void              getCcbIdsForOrigCon(SaUint32T dead, IdVector& cv);
     void              getAdminOwnerIdsForCon(SaUint32T dead, IdVector& cv);
     bool              ccbCommit(SaUint32T ccbId, ConnVector& connVector);

------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to