Hi Neelakanta,

Agree with Hung's comments.

In an object, there can be more attributes with no-dangling flags, or 
multi-value attribute with no-dangling flag. Multi-value attribute can also 
have multiple object DNs.
Then this solution will not work correct.

BR,
Zoran


From: Hung Nguyen [mailto:[email protected]]
Sent: Wednesday, November 18, 2015 10:38 AM
To: [email protected]; Zoran Milinkovic
Cc: [email protected]
Subject: Re: [PATCH 1 of 1] imm:Allow deletion of dangling ref object, when the 
object is modified by clearing NO_DANGLING attribute in same CCB [#1599]


Hi Neel,



Please see my comments inline.



BR,

Hung Nguyen - DEK Technologies


--------------------------------------------------------------------------------

From: Neelakanta Reddy 
[email protected]<mailto:[email protected]>

Sent: Wednesday, November 18, 2015 4:17PM

To: Zoran Milinkovic, Hung Nguyen

    [email protected]<mailto:[email protected]>, 
[email protected]<mailto:[email protected]>

Cc: Opensaf-devel

    
[email protected]<mailto:[email protected]>

Subject: [PATCH 1 of 1] imm:Allow deletion of dangling ref object, when the 
object is modified by clearing NO_DANGLING attribute in same CCB [#1599]





 osaf/services/saf/immsv/immnd/ImmModel.cc |  20 ++++++++++++++++++++

 1 files changed, 20 insertions(+), 0 deletions(-)





If the NO_DANGLING reference is modified(removed) in the same CCB,

then deletion of the NO_DANGLING object can be allowed because, we

are in apply and the CCBcommit will modify sReverseRefsNoDanglingMMap.



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

@@ -5050,6 +5050,26 @@ bool ImmModel::validateNoDanglingRefsDel

         if(!(ommi->second->mObjFlags & IMM_DELETE_LOCK)) {

             std::string objName;

             getObjectName(ommi->second, objName);

+            if(ommi->second->mObjFlags & IMM_NO_DANGLING_FLAG){ // 
IMM_NO_DANGLING_FLAG will be set in CcbModify

+                /* If the NO_DANGLING reference is modified(removed) in the 
same CCB,

+                   then deletion of the NO_DANGLING object can be allowed 
because, we are in apply

+                   and the CCBcommit will modify sReverseRefsNoDanglingMMap*/

+                ObjectMutationMap::iterator omit = 
ccb->mMutations.find(objName);

+                if(omit != ccb->mMutations.end()){

+                    ObjectInfo * afim = omit->second->mAfterImage;

+                    AttrMap::iterator amit;

+                    for(amit=afim->mClassInfo->mAttrMap.begin(); 
amit!=afim->mClassInfo->mAttrMap.end(); ++amit){

+                        if(amit->second->mFlags & SA_IMM_ATTR_NO_DANGLING){

+                            break;

+                        }

+                    }

[Hung] This only gets the first no-dangling attribute we found in mAttrMap.

Shouldn't other no-dangling attributes be checked also?



+                    ImmAttrValueMap::iterator afim_amit = 
afim->mAttrValueMap.find(amit->first.c_str());

+                    if(afim_amit->second->empty()){ //CcbModify operation 
cleared the NO_DANGLING attribute value.

+                        break;

+                    }

[Hung] If the attribute has no-dangling ref to other objects (not the one to be 
deleted), we should allow that case too.

The 'empty' requirement is too strict here.

Also the multi-value attribute case is not covered.



---



I think it's better to use collectNoDanglingRefs() here.



ObjectNameSet afimNDRefs;

collectNoDanglingRefs(afim, afimNDRefs);



Then we just simply check if 'omi->first' is in the 'afimNDRefs'.



afimNDRefs.find(omi->first) == afimNDRefs.end()





+                }

+            }

+

             LOG_WA("ERR_FAILED_OPERATION: Delete of object %s would violate 
NO_DANGLING reference "

                     "from object %s, not scheduled for delete by this Ccb:%u",

                     omit->first.c_str(), objName.c_str(), ccb->mId);

------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to