X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-bdb%2Fproto-bdb.h;h=1f9335421b860bd065235155c7787d99e1258f74;hb=5c6976518b2d31112bf5f35ed459b22e5713afff;hp=906ffad499409051a16c2eb4b755fa820dbf6141;hpb=3301a31755b08ae1fa1aa501e240473c53cc6f99;p=openldap diff --git a/servers/slapd/back-bdb/proto-bdb.h b/servers/slapd/back-bdb/proto-bdb.h index 906ffad499..1f9335421b 100644 --- a/servers/slapd/back-bdb/proto-bdb.h +++ b/servers/slapd/back-bdb/proto-bdb.h @@ -1,7 +1,16 @@ /* $OpenLDAP$ */ -/* - * Copyright 2000-2003 The OpenLDAP Foundation, All Rights Reserved. - * COPYING RESTRICTIONS APPLY, see COPYRIGHT file +/* This work is part of OpenLDAP Software . + * + * Copyright 2000-2008 The OpenLDAP Foundation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. + * + * A copy of this license is available in the file LICENSE in the + * top-level directory of the distribution or, alternatively, at + * . */ #ifndef _PROTO_BDB_H @@ -11,8 +20,10 @@ LDAP_BEGIN_DECL #ifdef BDB_HIER #define BDB_SYMBOL(x) LDAP_CONCAT(hdb_,x) +#define BDB_UCTYPE "HDB" #else #define BDB_SYMBOL(x) LDAP_CONCAT(bdb_,x) +#define BDB_UCTYPE "BDB" #endif /* @@ -20,18 +31,40 @@ LDAP_BEGIN_DECL */ #define bdb_attr_mask BDB_SYMBOL(attr_mask) +#define bdb_attr_flush BDB_SYMBOL(attr_flush) +#define bdb_attr_slot BDB_SYMBOL(attr_slot) #define bdb_attr_index_config BDB_SYMBOL(attr_index_config) #define bdb_attr_index_destroy BDB_SYMBOL(attr_index_destroy) +#define bdb_attr_index_free BDB_SYMBOL(attr_index_free) +#define bdb_attr_index_unparse BDB_SYMBOL(attr_index_unparse) +#define bdb_attr_info_free BDB_SYMBOL(attr_info_free) -void bdb_attr_mask( struct bdb_info *bdb, - AttributeDescription *desc, - slap_mask_t *indexmask ); +AttrInfo *bdb_attr_mask( struct bdb_info *bdb, + AttributeDescription *desc ); + +void bdb_attr_flush( struct bdb_info *bdb ); + +int bdb_attr_slot( struct bdb_info *bdb, + AttributeDescription *desc, unsigned *insert ); int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb, const char *fname, int lineno, int argc, char **argv )); -void bdb_attr_index_destroy LDAP_P(( Avlnode *tree )); +void bdb_attr_index_unparse LDAP_P(( struct bdb_info *bdb, BerVarray *bva )); +void bdb_attr_index_destroy LDAP_P(( struct bdb_info *bdb )); +void bdb_attr_index_free LDAP_P(( struct bdb_info *bdb, + AttributeDescription *ad )); + +void bdb_attr_info_free( AttrInfo *ai ); + +/* + * config.c + */ + +#define bdb_back_init_cf BDB_SYMBOL(back_init_cf) + +int bdb_back_init_cf( BackendInfo *bi ); /* * dbcache.c @@ -41,8 +74,7 @@ void bdb_attr_index_destroy LDAP_P(( Avlnode *tree )); int bdb_db_cache( Backend *be, - DB_TXN *tid, - const char *name, + struct berval *name, DB **db ); /* @@ -52,7 +84,7 @@ bdb_db_cache( int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid, struct berval *dn, EntryInfo **e, int matched, - u_int32_t locker, DB_LOCK *lock )); + DB_LOCK *lock )); /* * dn2id.c @@ -65,9 +97,10 @@ int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid, int bdb_dn2id( Operation *op, - DB_TXN *tid, struct berval *dn, - EntryInfo *ei ); + EntryInfo *ei, + DB_TXN *txn, + DB_LOCK *lock ); int bdb_dn2id_add( Operation *op, @@ -88,7 +121,9 @@ int bdb_dn2id_children( int bdb_dn2idl( Operation *op, - Entry *e, + DB_TXN *txn, + struct berval *ndn, + EntryInfo *ei, ID *ids, ID *stack ); @@ -117,7 +152,13 @@ int bdb_fix_dn( Entry *e, int checkit ); */ #define bdb_errcall BDB_SYMBOL(errcall) +#if DB_VERSION_FULL < 0x04030000 void bdb_errcall( const char *pfx, char * msg ); +#else +#define bdb_msgcall BDB_SYMBOL(msgcall) +void bdb_errcall( const DB_ENV *env, const char *pfx, const char * msg ); +void bdb_msgcall( const DB_ENV *env, const char * msg ); +#endif #ifdef HAVE_EBCDIC #define ebcdic_dberror BDB_SYMBOL(ebcdic_dberror) @@ -133,6 +174,7 @@ char *ebcdic_dberror( int rc ); int bdb_filter_candidates( Operation *op, + DB_TXN *txn, Filter *f, ID *ids, ID *tmp, @@ -161,11 +203,14 @@ int bdb_id2entry_delete( DB_TXN *tid, Entry *e); +#ifdef SLAP_ZONE_ALLOC +#else int bdb_id2entry( BackendDB *be, DB_TXN *tid, ID id, Entry **e); +#endif #define bdb_entry_free BDB_SYMBOL(entry_free) #define bdb_entry_return BDB_SYMBOL(entry_return) @@ -173,7 +218,11 @@ int bdb_id2entry( #define bdb_entry_get BDB_SYMBOL(entry_get) void bdb_entry_free ( Entry *e ); +#ifdef SLAP_ZONE_ALLOC +int bdb_entry_return( struct bdb_info *bdb, Entry *e, int seqno ); +#else int bdb_entry_return( Entry *e ); +#endif BI_entry_release_rw bdb_entry_release; BI_entry_get_rw bdb_entry_get; @@ -181,11 +230,12 @@ BI_entry_get_rw bdb_entry_get; /* * idl.c */ -#ifdef SLAP_IDL_CACHE #define bdb_idl_cache_get BDB_SYMBOL(idl_cache_get) #define bdb_idl_cache_put BDB_SYMBOL(idl_cache_put) #define bdb_idl_cache_del BDB_SYMBOL(idl_cache_del) +#define bdb_idl_cache_add_id BDB_SYMBOL(idl_cache_add_id) +#define bdb_idl_cache_del_id BDB_SYMBOL(idl_cache_del_id) int bdb_idl_cache_get( struct bdb_info *bdb, @@ -206,7 +256,20 @@ bdb_idl_cache_del( struct bdb_info *bdb, DB *db, DBT *key ); -#endif + +void +bdb_idl_cache_add_id( + struct bdb_info *bdb, + DB *db, + DBT *key, + ID id ); + +void +bdb_idl_cache_del_id( + struct bdb_info *bdb, + DB *db, + DBT *key, + ID id ); #define bdb_idl_first BDB_SYMBOL(idl_first) #define bdb_idl_next BDB_SYMBOL(idl_next) @@ -214,6 +277,9 @@ bdb_idl_cache_del( #define bdb_idl_insert BDB_SYMBOL(idl_insert) #define bdb_idl_intersection BDB_SYMBOL(idl_intersection) #define bdb_idl_union BDB_SYMBOL(idl_union) +#define bdb_idl_sort BDB_SYMBOL(idl_sort) +#define bdb_idl_append BDB_SYMBOL(idl_append) +#define bdb_idl_append_one BDB_SYMBOL(idl_append_one) #define bdb_idl_fetch_key BDB_SYMBOL(idl_fetch_key) #define bdb_idl_insert_key BDB_SYMBOL(idl_insert_key) @@ -222,11 +288,13 @@ bdb_idl_cache_del( unsigned bdb_idl_search( ID *ids, ID id ); int bdb_idl_fetch_key( - BackendDB *be, - DB *db, - DB_TXN *txn, - DBT *key, - ID *ids ); + BackendDB *be, + DB *db, + DB_TXN *txn, + DBT *key, + ID *ids, + DBC **saved_cursor, + int get_flag ); int bdb_idl_insert( ID *ids, ID id ); @@ -257,27 +325,26 @@ bdb_idl_union( ID bdb_idl_first( ID *ids, ID *cursor ); ID bdb_idl_next( ID *ids, ID *cursor ); - -#define bdb_bt_compare BDB_SYMBOL(bt_compare) - -int bdb_bt_compare( - DB *db, - const DBT *a, - const DBT *b ); +void bdb_idl_sort( ID *ids, ID *tmp ); +int bdb_idl_append( ID *a, ID *b ); +int bdb_idl_append_one( ID *ids, ID id ); /* * index.c */ -#define bdb_index_is_indexed BDB_SYMBOL(index_is_indexed) +#define bdb_index_mask BDB_SYMBOL(index_mask) #define bdb_index_param BDB_SYMBOL(index_param) #define bdb_index_values BDB_SYMBOL(index_values) #define bdb_index_entry BDB_SYMBOL(index_entry) +#define bdb_index_recset BDB_SYMBOL(index_recset) +#define bdb_index_recrun BDB_SYMBOL(index_recrun) -extern int -bdb_index_is_indexed LDAP_P(( +extern AttrInfo * +bdb_index_mask LDAP_P(( Backend *be, - AttributeDescription *desc )); + AttributeDescription *desc, + struct berval *name )); extern int bdb_index_param LDAP_P(( @@ -294,23 +361,31 @@ bdb_index_values LDAP_P(( DB_TXN *txn, AttributeDescription *desc, BerVarray vals, - BerVarray xvals, ID id, int opid )); -int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e )); +extern int +bdb_index_recset LDAP_P(( + struct bdb_info *bdb, + Attribute *a, + AttributeType *type, + struct berval *tags, + IndexRec *ir )); -#define bdb_index_entry_add(be,t,e) \ - bdb_index_entry((be),(t),SLAP_INDEX_ADD_OP,(e)) -#define bdb_index_entry_del(be,t,e) \ - bdb_index_entry((be),(t),SLAP_INDEX_DELETE_OP,(e)) +extern int +bdb_index_recrun LDAP_P(( + Operation *op, + struct bdb_info *bdb, + IndexRec *ir, + ID id, + int base )); -/* - * init.c - */ -#define bdb_uuid BDB_SYMBOL(uuid) +int bdb_index_entry LDAP_P(( Operation *op, DB_TXN *t, int r, Entry *e )); -extern struct berval bdb_uuid; +#define bdb_index_entry_add(op,t,e) \ + bdb_index_entry((op),(t),SLAP_INDEX_ADD_OP,(e)) +#define bdb_index_entry_del(op,t,e) \ + bdb_index_entry((op),(t),SLAP_INDEX_DELETE_OP,(e)) /* * key.c @@ -324,7 +399,9 @@ bdb_key_read( DB *db, DB_TXN *txn, struct berval *k, - ID *ids ); + ID *ids, + DBC **saved_cursor, + int get_flags ); extern int bdb_key_change( @@ -341,7 +418,7 @@ bdb_key_change( #define bdb_next_id BDB_SYMBOL(next_id) #define bdb_last_id BDB_SYMBOL(last_id) -int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *id ); +int bdb_next_id( BackendDB *be, ID *id ); int bdb_last_id( BackendDB *be, DB_TXN *tid ); /* @@ -359,43 +436,54 @@ int bdb_modify_internal( size_t textlen ); /* - * passwd.c + * monitor.c */ -#define bdb_exop_passwd BDB_SYMBOL(exop_passwd) -BI_op_extended bdb_exop_passwd; +#define bdb_monitor_db_init BDB_SYMBOL(monitor_db_init) +#define bdb_monitor_db_open BDB_SYMBOL(monitor_db_open) +#define bdb_monitor_db_close BDB_SYMBOL(monitor_db_close) +#define bdb_monitor_db_destroy BDB_SYMBOL(monitor_db_destroy) + +int bdb_monitor_db_init( BackendDB *be ); +int bdb_monitor_db_open( BackendDB *be ); +int bdb_monitor_db_close( BackendDB *be ); +int bdb_monitor_db_destroy( BackendDB *be ); +#ifdef BDB_MONITOR_IDX +#define bdb_monitor_idx_add BDB_SYMBOL(monitor_idx_add) +int +bdb_monitor_idx_add( + struct bdb_info *bdb, + AttributeDescription *desc, + slap_mask_t type ); +#endif /* BDB_MONITOR_IDX */ /* * cache.c */ #define bdb_cache_entry_db_unlock BDB_SYMBOL(cache_entry_db_unlock) +#define bdb_cache_return_entry_rw BDB_SYMBOL(cache_return_entry_rw) #define bdb_cache_entryinfo_lock(e) \ ldap_pvt_thread_mutex_lock( &(e)->bei_kids_mutex ) #define bdb_cache_entryinfo_unlock(e) \ ldap_pvt_thread_mutex_unlock( &(e)->bei_kids_mutex ) +#define bdb_cache_entryinfo_trylock(e) \ + ldap_pvt_thread_mutex_trylock( &(e)->bei_kids_mutex ) /* What a mess. Hopefully the current cache scheme will stabilize * and we can trim out all of this stuff. */ -#if 0 -void bdb_cache_return_entry_rw( DB_ENV *env, Cache *cache, Entry *e, +void bdb_cache_return_entry_rw( struct bdb_info *bdb, Entry *e, int rw, DB_LOCK *lock ); -#else -#define bdb_cache_return_entry_rw( env, cache, e, rw, lock ) \ - bdb_cache_entry_db_unlock( env, lock ) -#define bdb_cache_return_entry( env, lock ) \ - bdb_cache_entry_db_unlock( env, lock ) -#endif -#define bdb_cache_return_entry_r(env, c, e, l) \ - bdb_cache_return_entry_rw((env), (c), (e), 0, (l)) -#define bdb_cache_return_entry_w(env, c, e, l) \ - bdb_cache_return_entry_rw((env), (c), (e), 1, (l)) +#define bdb_cache_return_entry_r(bdb, e, l) \ + bdb_cache_return_entry_rw((bdb), (e), 0, (l)) +#define bdb_cache_return_entry_w(bdb, e, l) \ + bdb_cache_return_entry_rw((bdb), (e), 1, (l)) #if 0 -void bdb_unlocked_cache_return_entry_rw( Cache *cache, Entry *e, int rw ); +void bdb_unlocked_cache_return_entry_rw( struct bdb_info *bdb, Entry *e, int rw ); #else -#define bdb_unlocked_cache_return_entry_rw( a, b, c ) +#define bdb_unlocked_cache_return_entry_rw( a, b, c ) ((void)0) #endif #define bdb_unlocked_cache_return_entry_r( c, e ) \ bdb_unlocked_cache_return_entry_rw((c), (e), 0) @@ -405,12 +493,15 @@ void bdb_unlocked_cache_return_entry_rw( Cache *cache, Entry *e, int rw ); #define bdb_cache_add BDB_SYMBOL(cache_add) #define bdb_cache_children BDB_SYMBOL(cache_children) #define bdb_cache_delete BDB_SYMBOL(cache_delete) -#define bdb_cache_delete_cleanup BDB_SYMBOL(cache_delete_cleanup) +#define bdb_cache_delete_cleanup BDB_SYMBOL(cache_delete_cleanup) #define bdb_cache_find_id BDB_SYMBOL(cache_find_id) +#define bdb_cache_find_info BDB_SYMBOL(cache_find_info) #define bdb_cache_find_ndn BDB_SYMBOL(cache_find_ndn) +#define bdb_cache_find_parent BDB_SYMBOL(cache_find_parent) #define bdb_cache_modify BDB_SYMBOL(cache_modify) #define bdb_cache_modrdn BDB_SYMBOL(cache_modrdn) #define bdb_cache_release_all BDB_SYMBOL(cache_release_all) +#define bdb_cache_delete_entry BDB_SYMBOL(cache_delete_entry) int bdb_cache_children( Operation *op, @@ -422,141 +513,156 @@ int bdb_cache_add( EntryInfo *pei, Entry *e, struct berval *nrdn, - u_int32_t locker + DB_TXN *txn, + DB_LOCK *lock ); int bdb_cache_modrdn( + struct bdb_info *bdb, Entry *e, struct berval *nrdn, Entry *new, EntryInfo *ein, - DB_ENV *env, - u_int32_t locker, + DB_TXN *txn, DB_LOCK *lock ); int bdb_cache_modify( + struct bdb_info *bdb, Entry *e, Attribute *newAttrs, - DB_ENV *env, - u_int32_t locker, + DB_TXN *txn, DB_LOCK *lock ); int bdb_cache_find_ndn( Operation *op, - DB_TXN *txn, + DB_TXN *txn, struct berval *ndn, - EntryInfo **res, - u_int32_t locker + EntryInfo **res +); +EntryInfo * bdb_cache_find_info( + struct bdb_info *bdb, + ID id ); + +#define ID_LOCKED 1 +#define ID_NOCACHE 2 int bdb_cache_find_id( Operation *op, DB_TXN *tid, ID id, EntryInfo **eip, - int islocked, - u_int32_t locker, + int flag, DB_LOCK *lock ); +int +bdb_cache_find_parent( + Operation *op, + DB_TXN *txn, + ID id, + EntryInfo **res +); int bdb_cache_delete( - Cache *cache, + struct bdb_info *bdb, Entry *e, - DB_ENV *env, - u_int32_t locker, + DB_TXN *txn, DB_LOCK *lock ); void bdb_cache_delete_cleanup( - Entry *e + Cache *cache, + EntryInfo *ei ); void bdb_cache_release_all( Cache *cache ); -#ifdef LDAP_SYNC +#ifdef BDB_HIER +int hdb_cache_load( + struct bdb_info *bdb, + EntryInfo *ei, + EntryInfo **res +); +#endif + #define bdb_cache_entry_db_relock BDB_SYMBOL(cache_entry_db_relock) int bdb_cache_entry_db_relock( - DB_ENV *env, - u_int32_t locker, + struct bdb_info *bdb, + DB_TXN *txn, EntryInfo *ei, int rw, int tryOnly, DB_LOCK *lock ); -#endif - -#ifdef BDB_REUSE_LOCKERS - -#define bdb_locker_id BDB_SYMBOL(locker_id) -int bdb_locker_id( Operation *op, DB_ENV *env, int *locker ); - -#define LOCK_ID_FREE(env, locker) -#define LOCK_ID(env, locker) bdb_locker_id(op, env, locker) -#else +int bdb_cache_entry_db_unlock( + struct bdb_info *bdb, + DB_LOCK *lock ); -#define LOCK_ID_FREE(env, locker) XLOCK_ID_FREE(env, locker) -#define LOCK_ID(env, locker) XLOCK_ID(env, locker) - -#endif +#define bdb_reader_get BDB_SYMBOL(reader_get) +#define bdb_reader_flush BDB_SYMBOL(reader_flush) +int bdb_reader_get( Operation *op, DB_ENV *env, DB_TXN **txn ); +void bdb_reader_flush( DB_ENV *env ); /* - * search.c + * trans.c */ +#define bdb_trans_backoff BDB_SYMBOL(trans_backoff) -#ifdef LDAP_SYNC - -#define bdb_abandon BDB_SYMBOL(abandon) -#define bdb_cancel BDB_SYMBOL(cancel) -#define bdb_do_search BDB_SYMBOL(do_search) - -BI_op_abandon bdb_abandon; -BI_op_cancel bdb_cancel; - -int bdb_do_search( - Operation *op, - SlapReply *rs, - Operation *ps_op, - Entry *entry, - int psearch_type -); -#define bdb_psearch(op, rs, sop, e, ps_type) bdb_do_search(op, rs, sop, e, ps_type) -#endif - - -#ifdef LDAP_SYNC -#define bdb_build_sync_state_ctrl BDB_SYMBOL(build_sync_state_ctrl) -#define bdb_build_sync_done_ctrl BDB_SYMBOL(build_sync_done_ctrl) -#define bdb_send_ldap_intermediate BDB_SYMBOL(send_ldap_intermediate) - -int -bdb_build_sync_state_ctrl( - Operation *op, - SlapReply *rs, - Entry *e, - int entry_sync_state, - LDAPControl **ctrls, - int num_ctrls, - int send_cookie, - struct berval *csn ); - -int -bdb_build_sync_done_ctrl( - Operation *op, - SlapReply *rs, - LDAPControl **ctrls, - int num_ctrls, - int send_cookie, - struct berval *latest_entrycsn_bv ); - -int -bdb_send_ldap_intermediate( - Operation *op, - SlapReply *rs, - int state, - struct berval *cookie ); -#endif +void +bdb_trans_backoff( int num_retries ); /* - * trans.c + * former external.h */ -void -bdb_trans_backoff( int num_retries ); +#define bdb_back_initialize BDB_SYMBOL(back_initialize) +#define bdb_db_config BDB_SYMBOL(db_config) +#define bdb_add BDB_SYMBOL(add) +#define bdb_bind BDB_SYMBOL(bind) +#define bdb_compare BDB_SYMBOL(compare) +#define bdb_delete BDB_SYMBOL(delete) +#define bdb_modify BDB_SYMBOL(modify) +#define bdb_modrdn BDB_SYMBOL(modrdn) +#define bdb_search BDB_SYMBOL(search) +#define bdb_extended BDB_SYMBOL(extended) +#define bdb_referrals BDB_SYMBOL(referrals) +#define bdb_operational BDB_SYMBOL(operational) +#define bdb_hasSubordinates BDB_SYMBOL(hasSubordinates) +#define bdb_tool_entry_open BDB_SYMBOL(tool_entry_open) +#define bdb_tool_entry_close BDB_SYMBOL(tool_entry_close) +#define bdb_tool_entry_next BDB_SYMBOL(tool_entry_next) +#define bdb_tool_entry_get BDB_SYMBOL(tool_entry_get) +#define bdb_tool_entry_put BDB_SYMBOL(tool_entry_put) +#define bdb_tool_entry_reindex BDB_SYMBOL(tool_entry_reindex) +#define bdb_tool_dn2id_get BDB_SYMBOL(tool_dn2id_get) +#define bdb_tool_entry_modify BDB_SYMBOL(tool_entry_modify) +#define bdb_tool_idl_add BDB_SYMBOL(tool_idl_add) + +extern BI_init bdb_back_initialize; + +extern BI_db_config bdb_db_config; + +extern BI_op_add bdb_add; +extern BI_op_bind bdb_bind; +extern BI_op_compare bdb_compare; +extern BI_op_delete bdb_delete; +extern BI_op_modify bdb_modify; +extern BI_op_modrdn bdb_modrdn; +extern BI_op_search bdb_search; +extern BI_op_extended bdb_extended; + +extern BI_chk_referrals bdb_referrals; + +extern BI_operational bdb_operational; + +extern BI_has_subordinates bdb_hasSubordinates; + +/* tools.c */ +extern BI_tool_entry_open bdb_tool_entry_open; +extern BI_tool_entry_close bdb_tool_entry_close; +extern BI_tool_entry_next bdb_tool_entry_next; +extern BI_tool_entry_get bdb_tool_entry_get; +extern BI_tool_entry_put bdb_tool_entry_put; +extern BI_tool_entry_reindex bdb_tool_entry_reindex; +extern BI_tool_dn2id_get bdb_tool_dn2id_get; +extern BI_tool_entry_modify bdb_tool_entry_modify; + +int bdb_tool_idl_add( BackendDB *be, DB *db, DB_TXN *txn, DBT *key, ID id ); LDAP_END_DECL