[389-devel] Please review: Allow modrdn to move subtree and rename non-leaf node
Andrey Ivanov
andrey.ivanov at polytechnique.fr
Sun Jan 17 17:11:26 UTC 2010
Hi,
>> You talk about an
>> expensive entry_id -> dn conversion and you introduce the dn cache to
>> take care of it. However you don't mention the expensive conversion dn
>> -> entry_id (that was the role of entrydn.db4). As far as i understand
>> the standard entry cache should help this conversion? And maybe this
>> type of conversion is much less frequent than entry_id -> dn?
>>
>
> Yes and yes. That's my observation. If you have a dn (operations from
> clients always have it), the matched entry is retrieved from the database
> first, then put in the entry cache. As long as the entry cache holds the
> entry, dn -> entry_id will not be needed. On the other hand, entry_id -> dn
> is more engaged especially when you need to scan the primary db file
> id2entry.db4. That occurs on the unindexed search. Unindexed search is
> generally slow, but without dn cache, it'd be even worse...
Ok. That's what I've thought. Howard also confirms and explains this
in his mail.
>> some of server plug-ins assume that modrdn changes only the rdn part.
>> These plug-ins will be broken. One of them is the
>> referential integrity plug-in - it takes for granted that only the rdn
>> part changes (update_integrity(argv, dn, newrdn, logChanges)).
>> Other possible candidates are memberOf, linked attributes plug-ins,
>> maybe some others. entryusn?
>>
>> Are there any repercussions on replication protocol and mechanism?
>>
>
> I ran the test suite that covers these functionalities. So far, I haven't
> seen any breakage. But I might be missing something important, so your
> reviews would be greatly appreciated.
I'm pretty sure the referential integrity plug-in will not work for
modrdn operations with a new superior. Looking more thoroughly through
the code ( ldap / servers / plugins / referint / referint.c) confirms
my suspicion that new rdn superior is not taken into account. The
function referint_postop_modrdn extracts from the parameter block
only SLAPI_MODRDN_TARGET and SLAPI_MODRDN_NEWRDN, it does not extract
SLAPI_MODRDN_NEWSUPERIOR neither passes it further down the utility
functions - update_integrity(argv, dn, newrdn, logChanges) and
writeintegritylog(argv[1],dn, newrdn). The same applies to the delayed
referint operations (the plug-in writes to the special integrity log
file only the old DN and the new RDN, but never the new superior :
writeintegritylog(argv[1],dn, newrdn);)
@+
More information about the 389-devel
mailing list