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.
This commit is contained in:
Howard Chu 2001-12-16 14:21:47 +00:00
parent bf61a1ca9d
commit 4ddb7c5730
2 changed files with 25 additions and 1 deletions

View File

@ -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

View File

@ -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;
}