The reference attribute is a hidden attribute and is maintained on each referenced object. This is created and maintained by DS. The new referencing code in DS is based on a Flexible Adaptable Information Manager (FLAIM) index called LocalEntryIDIndex that DS creates. Though FLAIM maintains the index, the usage is determined by DS. FLAIM automatically updates the index when a DN value is added or deleted. Each key in the index is a compound key, i.e, DN of the object being referenced + Entry ID of the referencing object. For example, if there is an object with Entry ID 343, and it has a “member” value that points to object #899, FLAIM will automatically generate a key in the index of 899+343. DS can now do lookups in the index to find all the objects pointing to object #899. Object #899 does not have to keep a reference attribute on itself to remember all the objects referencing it. Actually, FLAIM maintains the index without knowing how it is used, but DS has the code that knows how to use the index.
However, the new way of maintaining references requires a database upgrade when the existing eDirectory instance is upgraded to 9.1 or later versions. The upgrade requires the creation of a new index, which will require traversing each entry in the database. It also requires the removal of all of the “reference” attributes from each entry in the database. In addition, some internal octet string attributes used by DS that had embedded DNs would need to generate some new DN values to store alongside the octet string value. All this would be a time consuming process on a large database. Since DS is changed to do referential integrity using new FLAIM feature, and that depends on the new index, there is no way DS can really operate until the conversion is complete. Therefore, the first time an existing database is opened, all reference attributes need to be changed to a new index. It could take hours before it actually opens and is ready for use by applications for a large database.