[389-devel] Please review (revised): [Bug 506786] Index maintenance mechanism causes wrong search results when modifying attributes with subtypes

Noriko Hosoi nhosoi at redhat.com
Tue Aug 11 00:56:07 UTC 2009


Summary: Index maintenance mechanism causes wrong search results when 
modifying attributes with subtypes

https://bugzilla.redhat.com/show_bug.cgi?id=506786

There was a not-working case found in my previous proposal.

The problem is if these attribute value pairs exist in an entry:
   mail: abc
   mail;en: abc
   mail;fr: xyz
removing mail=abc or mail;en=abc, should not remove =abc from the 
mail.db#.  My previous fix worked only when removing "mail;en=abc", but 
not when removing "mail=abc".

[Problem Description]

When adding a value to an attribute with subtype indexed on equality and 
then
deleting this attribute subtype the index is not maintained correctly which
results in wrong search results afterwards. After stopping the server and
reindexing with db2index everything works correctly again. The unindexed 
and
substring searches do not seem to be concerned.

[Fix Description]
When there are identical attribute value pairs except subtypes exist
in an entry, if one of the pairs are deleted, it should not affect the
index the attribute value is the key.

e.g.,
  mail: abc
  mail;en: abc
  mail;fr: xyz

  removing mail=abc or mail;en=abc, should not remove =abc from the
  mail.db#.

This fix uses the value array evals to determine if the equality key
in the index should be deleted or not.  The value array evals stores
the values of the attribute in the entry after the deletion is done.
If evals is empty, it means the to-be-deleted attribute value pair is
the only pair in the entry.  Thus, the equality key can be removed fom
the index.

If evals has values, then the to-be-deleted attribute (curr_attr,
which was retrieved from the old entry) value needs to be checked if
it's in evals or not.  If it is in evals, the equality key is still
used by other pair(s).  So, leave it.  Otherwise, the key can be
removed.

In the above example, let's assume removing mail=abc.  evals holds
{"abc", "xyz"}.  curr_attr abc is in evals, thus =abc will not be
removed.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-506786-Index-maintenance-mechanism-causes-wrong-sea.patch
Type: text/x-patch
Size: 4373 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/fedora-directory-devel/attachments/20090810/3c38fe0b/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 3250 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://listman.redhat.com/archives/fedora-directory-devel/attachments/20090810/3c38fe0b/attachment.p7s>


More information about the Fedora-directory-devel mailing list