[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: objectClass index from slapd.conf is not working



tim stone wrote:
Hello,

I've a strange behavior while using index objectClass for searching.

In my slapd.conf I have defined the index in the database section:

index objectClass eq

Other indexes follows in the config. All of them working fine.

If I search via ldapsearch like:

ldapsearch -x -h localhost -w password -D"cn=admin,ou=root"
-b"ou=root" "(objectclass=Guest)"

I can find following Message in the syslog (loglevel -1):

Sep  1 14:02:52 LDAP01 slapd[17856]:    EQUALITY
Sep  1 14:02:52 LDAP01 slapd[17856]: =>  bdb_equality_candidates (objectClass)
Sep  1 14:02:52 LDAP01 slapd[17856]: =>  key_read
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_index_read: failed (-30989)
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_equality_candidates: id=0,
first=0, last=0
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_filter_candidates: id=0
first=0 last=0
Sep  1 14:02:52 LDAP01 slapd[17856]: =>  bdb_filter_candidates
Sep  1 14:02:52 LDAP01 slapd[17856]:    EQUALITY
Sep  1 14:02:52 LDAP01 slapd[17856]: =>  bdb_equality_candidates (objectClass)
Sep  1 14:02:52 LDAP01 slapd[17856]: =>  key_read
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_index_read 355545 candidates
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_equality_candidates:
id=-1, first=228, last=355772
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_filter_candidates: id=-1
first=228 last=355772
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_list_candidates: id=-1
first=228 last=355772
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_filter_candidates: id=-1
first=228 last=355772
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_list_candidates: id=-1
first=112277 last=355755
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_filter_candidates: id=-1
first=112277 last=355755
Sep  1 14:02:52 LDAP01 slapd[17856]: bdb_search_candidates: id=-1
first=112277 last=355755
Sep  1 14:02:52 LDAP01 slapd[17856]: =>  test_filter
Sep  1 14:02:52 LDAP01 slapd[17856]:     EQUALITY
Sep  1 14:02:52 LDAP01 slapd[17856]:<= test_filter 5
Sep  1 14:02:52 LDAP01 slapd[17856]: bdb_search: 112277 does not match filter
Sep  1 14:02:52 LDAP01 slapd[17856]: entry_decode: "cn=Aaa,cn=Bbb,...
Sep  1 14:02:52 LDAP01 slapd[17856]:<= entry_decode(cn=Aaa,cn=Bbb,...
Sep  1 14:02:52 LDAP01 slapd[17856]: =>  bdb_dn2id("cn=aaa,cn=bbb,...
Sep  1 14:02:52 LDAP01 slapd[17856]:<= bdb_dn2id: got id=0x1b696
Sep  1 14:02:52 LDAP01 slapd[17856]: =>  test_filter
Sep  1 14:02:52 LDAP01 slapd[17856]:     EQUALITY
Sep  1 14:02:52 LDAP01 slapd[17856] ... all other entires following...

As result, the entires are found, but not in the index and the search
takes a very long time.

The index is working as designed, it's just filled with a lot of false matches which have to be explicitly tested against the filter to be weeded out. The objectclass index provided 355545 candidates in the range of 228 thru 355772. Some other search term provided (355755-112277) candidates, leaving the range from 112277 thru 355755 needing to be tested. If this search takes too long, then you need a larger entry cache.

--
  -- Howard Chu
  CTO, Symas Corp.           http://www.symas.com
  Director, Highland Sun     http://highlandsun.com/hyc/
  Chief Architect, OpenLDAP  http://www.openldap.org/project/