mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-01-30 13:30:57 +08:00
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:
parent
bf61a1ca9d
commit
4ddb7c5730
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user