]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-bdb/proto-bdb.h
Use refcnt instead of keeping entry locked in Add response
[openldap] / servers / slapd / back-bdb / proto-bdb.h
index d1691b0808d0269de28b2289337d06f017b9031f..f0070775d25cd27d3d720e15f2eb446e2a32832a 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 2000-2007 The OpenLDAP Foundation.
+ * Copyright 2000-2011 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -45,11 +45,11 @@ AttrInfo *bdb_attr_mask( struct bdb_info *bdb,
 void bdb_attr_flush( struct bdb_info *bdb );
 
 int bdb_attr_slot( struct bdb_info *bdb,
-       AttributeDescription *desc, unsigned *insert );
+       AttributeDescription *desc, int *insert );
 
 int bdb_attr_index_config LDAP_P(( struct bdb_info *bdb,
        const char *fname, int lineno,
-       int argc, char **argv ));
+       int argc, char **argv, struct config_reply_s *cr ));
 
 void bdb_attr_index_unparse LDAP_P(( struct bdb_info *bdb, BerVarray *bva ));
 void bdb_attr_index_destroy LDAP_P(( struct bdb_info *bdb ));
@@ -70,6 +70,7 @@ int bdb_back_init_cf( BackendInfo *bi );
  * dbcache.c
  */
 #define bdb_db_cache                           BDB_SYMBOL(db_cache)
+#define bdb_db_findsize                                BDB_SYMBOL(db_findsize)
 
 int
 bdb_db_cache(
@@ -77,6 +78,11 @@ bdb_db_cache(
     struct berval *name,
        DB **db );
 
+int
+bdb_db_findsize(
+       struct bdb_info *bdb,
+       struct berval *name );
+
 /*
  * dn2entry.c
  */
@@ -84,7 +90,7 @@ bdb_db_cache(
 
 int bdb_dn2entry LDAP_P(( Operation *op, DB_TXN *tid,
        struct berval *dn, EntryInfo **e, int matched,
-       BDB_LOCKER locker, DB_LOCK *lock ));
+       DB_LOCK *lock ));
 
 /*
  * dn2id.c
@@ -99,8 +105,8 @@ int bdb_dn2id(
        Operation *op,
        struct berval *dn,
        EntryInfo *ei,
-       BDB_LOCKER locker,
-       DB_LOCK *lock );
+       DB_TXN *txn,
+       DBC **cursor );
 
 int bdb_dn2id_add(
        Operation *op,
@@ -121,7 +127,7 @@ int bdb_dn2id_children(
 
 int bdb_dn2idl(
        Operation *op,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
        struct berval *ndn,
        EntryInfo *ei,
        ID *ids,
@@ -129,14 +135,20 @@ int bdb_dn2idl(
 
 #ifdef BDB_HIER
 #define bdb_dn2id_parent                       BDB_SYMBOL(dn2id_parent)
+#define bdb_dup_compare                                BDB_SYMBOL(dup_compare)
 #define bdb_fix_dn                                     BDB_SYMBOL(fix_dn)
 
 int bdb_dn2id_parent(
        Operation *op,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
        EntryInfo *ei,
        ID *idp );
 
+int bdb_dup_compare(
+       DB *db,
+       const DBT *usrkey,
+       const DBT *curkey );
+
 int bdb_fix_dn( Entry *e, int checkit );
 #endif
 
@@ -168,7 +180,7 @@ char *ebcdic_dberror( int rc );
 
 int bdb_filter_candidates(
        Operation *op,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
        Filter  *f,
        ID *ids,
        ID *tmp,
@@ -202,7 +214,6 @@ int bdb_id2entry_delete(
 int bdb_id2entry(
        BackendDB *be,
        DB_TXN *tid,
-       BDB_LOCKER locker,
        ID id,
        Entry **e);
 #endif
@@ -285,7 +296,7 @@ unsigned bdb_idl_search( ID *ids, ID id );
 int bdb_idl_fetch_key(
        BackendDB       *be,
        DB                      *db,
-       BDB_LOCKER locker,
+       DB_TXN          *txn,
        DBT                     *key,
        ID                      *ids,
        DBC                     **saved_cursor,
@@ -392,7 +403,7 @@ extern int
 bdb_key_read(
     Backend    *be,
        DB *db,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
     struct berval *k,
        ID *ids,
     DBC **saved_cursor,
@@ -413,7 +424,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 );
 
 /*
@@ -490,13 +501,13 @@ void bdb_unlocked_cache_return_entry_rw( struct bdb_info *bdb, Entry *e, int rw
 #define bdb_cache_delete                       BDB_SYMBOL(cache_delete)
 #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)
+#define bdb_cache_deref                                BDB_SYMBOL(cache_deref)
 
 int bdb_cache_children(
        Operation *op,
@@ -508,7 +519,7 @@ int bdb_cache_add(
        EntryInfo *pei,
        Entry   *e,
        struct berval *nrdn,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
        DB_LOCK *lock
 );
 int bdb_cache_modrdn(
@@ -517,49 +528,46 @@ int bdb_cache_modrdn(
        struct berval *nrdn,
        Entry   *new,
        EntryInfo *ein,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
        DB_LOCK *lock
 );
 int bdb_cache_modify(
        struct bdb_info *bdb,
        Entry *e,
        Attribute *newAttrs,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
        DB_LOCK *lock
 );
 int bdb_cache_find_ndn(
        Operation *op,
-       BDB_LOCKER      locker,
+       DB_TXN *txn,
        struct berval   *ndn,
        EntryInfo       **res
 );
-EntryInfo * bdb_cache_find_info(
-       struct bdb_info *bdb,
-       ID id
-);
 
 #define        ID_LOCKED       1
 #define        ID_NOCACHE      2
+#define        ID_NOENTRY      4
+#define        ID_CHKPURGE     8
 int bdb_cache_find_id(
        Operation *op,
        DB_TXN  *tid,
        ID              id,
        EntryInfo **eip,
        int     flag,
-       BDB_LOCKER      locker,
        DB_LOCK         *lock
 );
 int
 bdb_cache_find_parent(
        Operation *op,
-       BDB_LOCKER      locker,
+       DB_TXN *txn,
        ID id,
        EntryInfo **res
 );
 int bdb_cache_delete(
        struct bdb_info *bdb,
        Entry   *e,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
        DB_LOCK *lock
 );
 void bdb_cache_delete_cleanup(
@@ -567,6 +575,7 @@ void bdb_cache_delete_cleanup(
        EntryInfo *ei
 );
 void bdb_cache_release_all( Cache *cache );
+void bdb_cache_deref( EntryInfo *ei );
 
 #ifdef BDB_HIER
 int hdb_cache_load(
@@ -579,7 +588,7 @@ int hdb_cache_load(
 #define bdb_cache_entry_db_relock              BDB_SYMBOL(cache_entry_db_relock)
 int bdb_cache_entry_db_relock(
        struct bdb_info *bdb,
-       BDB_LOCKER locker,
+       DB_TXN *txn,
        EntryInfo *ei,
        int rw,
        int tryOnly,
@@ -589,22 +598,10 @@ int bdb_cache_entry_db_unlock(
        struct bdb_info *bdb,
        DB_LOCK *lock );
 
-#ifdef BDB_REUSE_LOCKERS
-
-#define bdb_locker_id                          BDB_SYMBOL(locker_id)
-#define bdb_locker_flush                       BDB_SYMBOL(locker_flush)
-int bdb_locker_id( Operation *op, DB_ENV *env, BDB_LOCKER *locker );
-void bdb_locker_flush( DB_ENV *env );
-
-#define        LOCK_ID_FREE(env, locker)       ((void)0)
-#define        LOCK_ID(env, locker)    bdb_locker_id(op, env, locker)
-
-#else
-
-#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 );
 
 /*
  * trans.c
@@ -633,6 +630,7 @@ bdb_trans_backoff( int num_retries );
 #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_first_x         BDB_SYMBOL(tool_entry_first_x)
 #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)
@@ -663,6 +661,7 @@ 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_first_x           bdb_tool_entry_first_x;
 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;