Community
Participate
Working Groups
While ensuring referential integrity during commits the XRefExcluder is supposed to remove XRef candidates that are to be removed by the ongoing commit. For many-valued XRefs it does so by comparing the index of the XRef and RemoveFeatureDelta from the commit. If the commit contains multiple feature deltas of type ListIndexAffecting this check may go wrong.
Aligning the incoming XRefs from the store accessor with the feature deltas of the ongoing commit is not only a hazzle (indexes would need to be adjusted). Rather it's not possible in all cases, as in the case of a REPLACE, i.e. a set(index, CDOID), because we can not deduce the old value from the delta. Consequently I've removed the whole XRefExcluder (which used to do this alignment). Instead I've deferred the call to checkXRefs() until after computeDirtyObjects() has been called. This way the dirtyObjects can be used instead of the XRef data passed in from the store accessor.
Created attachment 177720 [details] Patch - for future reference
Committed to HEAD
Available in R20110608-1407