From 78adfde54e0aa46efbfadb926135f0e93bca951a Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Fri, 5 Oct 2001 20:12:16 +0000 Subject: [PATCH] BDB_INDEX code does no harm (but no good yet, not used by filters yet). --- servers/slapd/back-bdb/add.c | 2 -- servers/slapd/back-bdb/attr.c | 3 --- servers/slapd/back-bdb/back-bdb.h | 12 ++++-------- servers/slapd/back-bdb/dbcache.c | 18 +++++++++++++++++- servers/slapd/back-bdb/index.c | 4 ---- servers/slapd/back-bdb/init.c | 6 ++---- servers/slapd/back-bdb/key.c | 17 +++++++---------- servers/slapd/back-bdb/modify.c | 10 ++++------ servers/slapd/back-bdb/tools.c | 4 ---- 9 files changed, 34 insertions(+), 42 deletions(-) diff --git a/servers/slapd/back-bdb/add.c b/servers/slapd/back-bdb/add.c index b71d7196bb..90d4eda611 100644 --- a/servers/slapd/back-bdb/add.c +++ b/servers/slapd/back-bdb/add.c @@ -238,7 +238,6 @@ retry: rc = txn_abort( ltid ); goto return_results; } -#ifdef BDB_INDEX /* attribute indexes */ if ( bdb_index_entry_add( be, ltid, e, e->e_attrs ) != LDAP_SUCCESS ) { Debug( LDAP_DEBUG_TRACE, "bdb_add: index_entry_add failed\n", @@ -253,7 +252,6 @@ retry: rc = txn_abort( ltid ); text = "index generation failed"; goto return_results; } -#endif rc = txn_commit( ltid, 0 ); ltid = NULL; diff --git a/servers/slapd/back-bdb/attr.c b/servers/slapd/back-bdb/attr.c index 6ce4fbb00b..66c77242cd 100644 --- a/servers/slapd/back-bdb/attr.c +++ b/servers/slapd/back-bdb/attr.c @@ -15,8 +15,6 @@ #include "slap.h" #include "back-bdb.h" -#if BDB_CONFIG_INDICES - /* for the cache of attribute information (which are indexed, etc.) */ typedef struct bdb_attrinfo { #ifdef SLAPD_USE_AD @@ -258,4 +256,3 @@ bdb_attr_index_destroy( Avlnode *tree ) avl_free( tree, ainfo_free ); } -#endif diff --git a/servers/slapd/back-bdb/back-bdb.h b/servers/slapd/back-bdb/back-bdb.h index 47bc9fb67e..d4de309479 100644 --- a/servers/slapd/back-bdb/back-bdb.h +++ b/servers/slapd/back-bdb/back-bdb.h @@ -15,10 +15,7 @@ LDAP_BEGIN_DECL -/* #define BDB_INDEX 1 */ -/* #define BDB_REINDEX 1 */ /* #define BDB_FILTER_INDICES 1 */ -#define BDB_CONFIG_INDICES 1 /* #define SLAPD_USE_AD 1 */ #define DN_BASE_PREFIX SLAP_INDEX_EQUALITY_PREFIX @@ -67,6 +64,10 @@ struct bdb_info { int bi_ndatabases; struct bdb_db_info **bi_databases; + ldap_pvt_thread_mutex_t bi_database_mutex; + + slap_mask_t bi_defaultmask; + Avlnode *bi_attrs; int bi_txn_cp; u_int32_t bi_txn_cp_min; @@ -78,11 +79,6 @@ struct bdb_info { ldap_pvt_thread_t bi_lock_detect_tid; #endif -#if BDB_CONFIG_INDICES - slap_mask_t bi_defaultmask; - Avlnode *bi_attrs; -#endif - ID bi_lastid; }; diff --git a/servers/slapd/back-bdb/dbcache.c b/servers/slapd/back-bdb/dbcache.c index 7387b2e6f6..f45b84e73e 100644 --- a/servers/slapd/back-bdb/dbcache.c +++ b/servers/slapd/back-bdb/dbcache.c @@ -32,14 +32,26 @@ bdb_db_cache( *dbout = NULL; - for( i=BDB_NDB; bdb->bi_databases[i]->bdi_name; i++ ) { + for( i=BDB_NDB; bdb->bi_databases[i]; i++ ) { if( !strcmp( bdb->bi_databases[i]->bdi_name, name) ) { *dbout = bdb->bi_databases[i]->bdi_db; return 0; } } + ldap_pvt_thread_mutex_lock( &bdb->bi_database_mutex ); + + /* check again! may have been added by another thread */ + for( i=BDB_NDB; bdb->bi_databases[i]; i++ ) { + if( !strcmp( bdb->bi_databases[i]->bdi_name, name) ) { + *dbout = bdb->bi_databases[i]->bdi_db; + ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); + return 0; + } + } + if( i >= BDB_INDICES ) { + ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); return -1; } @@ -52,6 +64,7 @@ bdb_db_cache( Debug( LDAP_DEBUG_ANY, "bdb_db_cache: db_create(%s) failed: %s (%d)\n", bdb->bi_dbenv_home, db_strerror(rc), rc ); + ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); return rc; } @@ -69,12 +82,15 @@ bdb_db_cache( Debug( LDAP_DEBUG_ANY, "bdb_db_cache: db_open(%s) failed: %s (%d)\n", name, db_strerror(rc), rc ); + ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); return rc; } + bdb->bi_databases[i+1] = NULL; bdb->bi_databases[i] = db; *dbout = db->bdi_db; + ldap_pvt_thread_mutex_unlock( &bdb->bi_database_mutex ); return 0; } diff --git a/servers/slapd/back-bdb/index.c b/servers/slapd/back-bdb/index.c index 6b7c16c7b9..a9643a7d7f 100644 --- a/servers/slapd/back-bdb/index.c +++ b/servers/slapd/back-bdb/index.c @@ -15,8 +15,6 @@ #include "slap.h" #include "back-bdb.h" -#ifdef BDB_INDEX - static slap_mask_t index_mask( Backend *be, AttributeDescription *desc, @@ -399,5 +397,3 @@ bdb_index_entry( return LDAP_SUCCESS; } - -#endif diff --git a/servers/slapd/back-bdb/init.c b/servers/slapd/back-bdb/init.c index ed28d77a31..1739e8a43c 100644 --- a/servers/slapd/back-bdb/init.c +++ b/servers/slapd/back-bdb/init.c @@ -71,6 +71,8 @@ bdb_db_init( BackendDB *be ) bdb->bi_lock_detect = DB_LOCK_NORUN; #endif + ldap_pvt_thread_mutex_init( &bdb->bi_database_mutex ); + be->be_private = bdb; return 0; } @@ -373,11 +375,7 @@ bdb_initialize( bi->bi_tool_entry_next = bdb_tool_entry_next; bi->bi_tool_entry_get = bdb_tool_entry_get; bi->bi_tool_entry_put = bdb_tool_entry_put; -#if BDB_REINDEX bi->bi_tool_entry_reindex = bdb_tool_entry_reindex; -#else - bi->bi_tool_entry_reindex = 0; -#endif bi->bi_tool_sync = 0; bi->bi_connection_init = 0; diff --git a/servers/slapd/back-bdb/key.c b/servers/slapd/back-bdb/key.c index f2d0eed586..e892b0102c 100644 --- a/servers/slapd/back-bdb/key.c +++ b/servers/slapd/back-bdb/key.c @@ -14,8 +14,8 @@ #include "slap.h" #include "back-bdb.h" +#include "idl.h" -#ifdef BDB_FILTER_INDICES /* read a key */ int bdb_key_read( @@ -26,7 +26,8 @@ bdb_key_read( ID *ids ) { - DBT key; + int rc; + DBT key; #ifdef NEW_LOGGING LDAP_LOG(( "index", LDAP_LEVEL_ENTRY, @@ -35,10 +36,10 @@ bdb_key_read( Debug( LDAP_DEBUG_TRACE, "=> key_read\n", 0, 0, 0 ); #endif - DBzero( &key ); + DBTzero( &key ); bv2DBT(k,&key); - rc = bdb_idl_fetch_key( be, db, txn, key, ids ); + rc = bdb_idl_fetch_key( be, db, txn, &key, ids ); if( rc != LDAP_SUCCESS ) { #ifdef NEW_LOGGING @@ -52,19 +53,16 @@ bdb_key_read( } else { #ifdef NEW_LOGGING LDAP_LOG(( "index", LDAP_LEVEL_ENTRY, - "bdb_key_read: %ld candidates\n", - idl ? ID_BLOCK_NIDS(idl) : 0 )); + "bdb_key_read: %ld candidates\n", BDB_IDL_N(ids) ); #else Debug( LDAP_DEBUG_TRACE, "<= bdb_index_read %ld candidates\n", - idl ? ID_BLOCK_NIDS(idl) : 0, 0, 0 ); + BDB_IDL_N(ids), 0, 0 ); #endif } return rc; } -#endif -#ifdef BDB_INDEX /* Add or remove stuff from index files */ int bdb_key_change( @@ -109,4 +107,3 @@ bdb_key_change( return rc; } -#endif diff --git a/servers/slapd/back-bdb/modify.c b/servers/slapd/back-bdb/modify.c index a154945ab0..4076ff48d3 100644 --- a/servers/slapd/back-bdb/modify.c +++ b/servers/slapd/back-bdb/modify.c @@ -127,14 +127,13 @@ int bdb_modify_internal( return rc; } -#ifdef BDB_INDEX /* delete indices for old attributes */ rc = bdb_index_entry_del( be, tid, e, save_attrs); if ( rc != LDAP_SUCCESS ) { attrs_free( e->e_attrs ); e->e_attrs = save_attrs; - Debug( LDAP_DEBUG_ANY, "entry index delete failed: %s\n", - *text, 0, 0 ); + Debug( LDAP_DEBUG_ANY, "entry index delete failed!\n", + 0, 0, 0 ); return rc; } @@ -143,11 +142,10 @@ int bdb_modify_internal( if ( rc != LDAP_SUCCESS ) { attrs_free( e->e_attrs ); e->e_attrs = save_attrs; - Debug( LDAP_DEBUG_ANY, "entry index add failed: %s\n", - *text, 0, 0 ); + Debug( LDAP_DEBUG_ANY, "entry index add failed!\n", + 0, 0, 0 ); return rc; } -#endif attrs_free( save_attrs ); return rc; diff --git a/servers/slapd/back-bdb/tools.c b/servers/slapd/back-bdb/tools.c index 853746447b..b6723fab20 100644 --- a/servers/slapd/back-bdb/tools.c +++ b/servers/slapd/back-bdb/tools.c @@ -156,7 +156,6 @@ ID bdb_tool_entry_put( goto done; } -#ifdef BDB_INDEX rc = bdb_index_entry_add( be, tid, e, e->e_attrs ); if( rc != 0 ) { Debug( LDAP_DEBUG_ANY, @@ -164,7 +163,6 @@ ID bdb_tool_entry_put( db_strerror(rc), rc, 0 ); goto done; } -#endif done: if( rc == 0 ) { @@ -187,7 +185,6 @@ done: return e->e_id; } -#if BDB_REINDEX int bdb_tool_entry_reindex( BackendDB *be, ID id ) @@ -250,4 +247,3 @@ done: entry_free( e ); return rc; } -#endif -- 2.39.5