From: Howard Chu Date: Sun, 16 Dec 2001 14:21:47 +0000 (+0000) Subject: Use a 4-byte constant for the presence index key. Set the index db hash X-Git-Tag: LDBM_PRE_GIANT_RWLOCK~643 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=4ddb7c573027f5d7631cffe962c3e9a747797ffb;p=openldap Use a 4-byte constant for the presence index key. Set the index db hash function to simply pass thru the key value, which is already a hash value. --- diff --git a/servers/slapd/back-bdb/dbcache.c b/servers/slapd/back-bdb/dbcache.c index 5e2d6dd41b..10a937c101 100644 --- a/servers/slapd/back-bdb/dbcache.c +++ b/servers/slapd/back-bdb/dbcache.c @@ -17,6 +17,23 @@ #include "slap.h" #include "back-bdb.h" +#include "lutil_hash.h" + +/* Pass-thru hash function. Since the indexer is already giving us hash + * values as keys, we don't need BDB to re-hash them. + */ +#if LUTIL_HASH_BYTES == 4 +static u_int32_t +bdb_db_hash( + DB *db, + const void *bytes, + u_int32_t length +) +{ + u_int32_t *ret = (u_int32_t *)bytes; + return *ret; +} +#endif int bdb_db_cache( @@ -69,6 +86,9 @@ bdb_db_cache( } rc = db->bdi_db->set_pagesize( db->bdi_db, BDB_PAGESIZE ); +#if LUTIL_HASH_BYTES == 4 + rc = db->bdi_db->set_h_hash( db->bdi_db, bdb_db_hash ); +#endif #ifdef BDB_IDL_MULTI rc = db->bdi_db->set_flags( db->bdi_db, DB_DUP | DB_DUPSORT ); #endif diff --git a/servers/slapd/back-bdb/index.c b/servers/slapd/back-bdb/index.c index b91dabec99..816f0abf42 100644 --- a/servers/slapd/back-bdb/index.c +++ b/servers/slapd/back-bdb/index.c @@ -14,6 +14,10 @@ #include "slap.h" #include "back-bdb.h" +#include "lutil_hash.h" + +static char presence_keyval[LUTIL_HASH_BYTES] = {0,0,0,1}; +struct berval presence_key = {LUTIL_HASH_BYTES, presence_keyval}; static slap_mask_t index_mask( Backend *be, @@ -169,7 +173,7 @@ static int indexer( if( rc != LDAP_SUCCESS ) return rc; if( IS_SLAP_INDEX( mask, SLAP_INDEX_PRESENT ) ) { - rc = bdb_key_change( be, db, txn, atname, id, op ); + rc = bdb_key_change( be, db, txn, &presence_key, id, op ); if( rc ) { goto done; }