Additional comments (third reply mail).
11) In ImmModel::addNoDanglingReferences(ObjectInfo *object)
Comment should explain that this function extracts all NO_DANGLING
references that exist in "object"
and insert them into sReverseRefObjectMap.
Thats with 'object' as source and the object matching the dn in the
no-dangling attribute as target.
This is otherwise a fairly simple and clean function.
-------------------------------------------
12) In ImmModel::removeNoDanglingReferences(ObjectInfo *object,
ObjectInfo *afim, bool removeAll)
The leading comment must be improved.
The function does not operate on the argument "object", it operates on
sReverseRefObjectMMap.
I think the 'removeAll' argument could probably be called
removeRefsToObject ?
Classic object-orientation would have made sense here but I am no
insisting on that now.
This function is not quite symetric with addNoDanglingReferences.
So the comment should be changed say something like:
/*
* Delete from sReverseRefObjectMMap all NO_DANGLING reference values
existing *in* 'object' .
* If "removeRefsToObject" parameter is set to true, then *also* delete
from sReverseRefObjectMMap all
* NO_DANGLING references pointing *to* 'object.' .
* "removeRefsToObject" parameter is set to "false" by default, and is
an optional parameter.
*/
----------------------------------------------------
13) ImmModel::addNoDanglingReferenceSet(ObjectInfo *obj, ObjectNameSet
&dnSet)
The function adds references to sReverseRefObjectMap.
The leading comments could explain what references are constructed from the
input arguments. In essence each reference is constructed from one
element in the
dnSet argument as *source* and with obj as *target*.
But then it also filters on CREATE_LOCK on source/dnSet-element
<------------------------------
Something needs to be said about that ccb-state-relation.
Thus only references from sources that are currently objects being
created (not yet committed)
are inserted.
-------------------------------------------------------------------------------------------------------------
14) ImmModel::removeNoDanglingReferenceSet(ObjectInfo *obj,
ObjectNameSet &dnSet)
Again, comment describing the function does not say much.
Here is my understanding:
The function removes references from sReverseRefObjectMap.
For each dn in dnSet, it removes at most ONE reference in
sReverseRefObjectMap,
where the DN is the *target* and obj is the *source*
Contrary (unsymmetrically) to the addNoDanglingReferenceSet, this delete
function is not sensitive to
any CCB locking state.
--------------------------
15) In ImmModel::commitCreate(ObjectInfo* obj)
if(obj->mObjFlags & IMM_NO_DANGLING_FLAG) {
/* First remove all created NO_DANGLING references in the
operation phase,
* than add all NO_DANGLING references.
* Check for existence of objects is done before calling
ccbCommit function. */
removeNoDanglingReferences(obj, obj);
addNoDanglingReferences(obj);
}
The comment simply states what is obviously done in the next two statements.
It should explain *why* it is doing the remove.. before the create...,
which is not obvious.
-----------------------------------------------------------------------------------------------
16) In ImmModel::commitModify()
This is where the add/remove NoDanglingReferenceSet are used.
The comment:
+ /* Computation for which NO_DANGLING references will be removed,
and which will be added */
Should say something like:
The set of references in the before-image minus the set of references
in the after-image constitutes the
set of references *removed* by the (possibly chained) modify operation.
The set of references in the after-image minus the set of references in
the before-image constitutes the
set of references *added* by the (posibly chained) modify operation.
---------------------------------------------------------------------------------
17) In mmModel::commitDelete(const std::string& dn)
Unnecessary removal of reset of flag IMM_DELETE_ROOT.
A statement is removed:
if(oi->second->mObjFlags & IMM_DELETE_ROOT) {
oi->second->mObjFlags &= ~IMM_DELETE_ROOT; <===============
While not logically wrong, since the object is about to be deleted,
I dont like to see "cleanup" in logic that has nothing to do with
NO_DANGLING.
Also the resetting of the delete-root flag is in the same spirit as
zeroing members
in a struct/class before a delete/free. Its not necessary, but its a low
cost precaution,
(reduction of risk) in case an illegal reference remains somewhere
(i.e. a dangling hard pointer ... a bit OFF recursive irony).
In this case I am paranoid about getting that delete root bit wrong
anywhere because it affects the maintentance of the child-counter in the
imm tree,
which affects the correctness of all searches in the imm.
Imagine if someone rearranges this code in the future...
---------------------------------------------------------
Not quite done yet.
But getting close.
/AndersBj
------------------------------------------------------------------------------
Sponsored by Intel(R) XDK
Develop, test and display web and hybrid apps with a single code base.
Download it for free now!
http://pubads.g.doubleclick.net/gampad/clk?id=111408631&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel