]> git.sur5r.net Git - openldap/commitdiff
Added experimental support for DB_DIRTY_READ.
authorHoward Chu <hyc@openldap.org>
Wed, 28 Nov 2001 03:11:04 +0000 (03:11 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 28 Nov 2001 03:11:04 +0000 (03:11 +0000)
13 files changed:
servers/slapd/back-bdb/add.c
servers/slapd/back-bdb/back-bdb.h
servers/slapd/back-bdb/config.c
servers/slapd/back-bdb/dbcache.c
servers/slapd/back-bdb/delete.c
servers/slapd/back-bdb/dn2id.c
servers/slapd/back-bdb/id2entry.c
servers/slapd/back-bdb/idl.c
servers/slapd/back-bdb/init.c
servers/slapd/back-bdb/modify.c
servers/slapd/back-bdb/modrdn.c
servers/slapd/back-bdb/passwd.c
servers/slapd/back-bdb/tools.c

index fff5f6534575e56ee52964e61b6c7d315cb3eb86..090f855e18eff3e536aff46a0a115cf56de4de71 100644 (file)
@@ -70,7 +70,8 @@ retry:        rc = txn_abort( ltid );
 
        /* begin transaction */
        if( bdb->bi_txn ) {
-               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 0 );
+               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 
+                       bdb->bi_db_opflags );
                text = NULL;
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_TRACE,
index ec7184447797f665dafe0675dc03746f825026f2..26eb103c5ca74fdba5a530f0359844aae0392c6e 100644 (file)
@@ -72,6 +72,7 @@ struct bdb_info {
        int                     bi_ndatabases;
        struct bdb_db_info **bi_databases;
        ldap_pvt_thread_mutex_t bi_database_mutex;
+       int             bi_db_opflags;  /* db-specific flags */
 
        slap_mask_t     bi_defaultmask;
        Avlnode         *bi_attrs;
index da6a7db39f3d3b35c6ffa24572854d4c868b788f..75d41a4dc4d1f42c1b0e1109d76a09344915726c 100644 (file)
@@ -13,6 +13,7 @@
 #include "back-bdb.h"
 
 #define        SLAP_BDB_ALLOW_DBNOTXN
+#define        SLAP_BDB_ALLOW_DIRTY_READ
 
 int
 bdb_db_config(
@@ -48,6 +49,10 @@ bdb_db_config(
        /* turn off transactions, use CDB mode instead */
        } else if ( strcasecmp( argv[0], "dbnotxn" ) == 0 ) {
                bdb->bi_txn = 0;
+#endif
+#ifdef SLAP_BDB_ALLOW_DIRTY_READ
+       } else if ( strcasecmp( argv[0], "dirtyread" ) == 0 ) {
+               bdb->bi_db_opflags |= DB_DIRTY_READ;
 #endif
        /* transaction checkpoint configuration */
        } else if ( strcasecmp( argv[0], "dbnosync" ) == 0 ) {
index db63bcd705d900719eae832fb676a544a198f6ec..a959c23505b30546f398abe713d3d7e1e72d3846 100644 (file)
@@ -73,7 +73,7 @@ bdb_db_cache(
 
        rc = db->bdi_db->open( db->bdi_db,
                file, name,
-               DB_BTREE, DB_CREATE|DB_THREAD,
+               DB_BTREE, bdb->bi_db_opflags | DB_CREATE | DB_THREAD,
                bdb->bi_dbenv_mode );
 
        ch_free( file );
index 22e67f6f67a404367ea7560294c449cad40c0683..b64f972f7ecf678b40b8677c48c68960d830a827 100644 (file)
@@ -50,7 +50,8 @@ retry:        /* transaction retry */
 
        if( bdb->bi_txn ) {
                /* begin transaction */
-               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 0 );
+               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 
+                       bdb->bi_db_opflags );
                text = NULL;
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_TRACE,
index 3395d47fbbecfb9c573d585979df5149315e60b5..0e73b9573872c2a481741953113a9723df03680f 100644 (file)
@@ -210,7 +210,7 @@ bdb_dn2id(
        data.flags = DB_DBT_USERMEM;
 
        /* fetch it */
-       rc = db->get( db, txn, &key, &data, 0 );
+       rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags );
 
        if( rc != 0 ) {
                Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: get failed: %s (%d)\n",
@@ -260,7 +260,7 @@ bdb_dn2id_matched(
                *id = NOID;
 
                /* fetch it */
-               rc = db->get( db, txn, &key, &data, 0 );
+               rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags );
 
                if( rc == DB_NOTFOUND ) {
                        char *pdn = dn_parent( be, dn );
@@ -339,7 +339,7 @@ bdb_dn2id_children(
        data.doff = 0;
        data.dlen = sizeof(id);
 
-       rc = db->get( db, txn, &key, &data, 0 );
+       rc = db->get( db, txn, &key, &data, bdb->bi_db_opflags );
 
        Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id_children( %s ): %schildren (%d)\n",
                dn,
@@ -376,7 +376,7 @@ bdb_dn2idl(
        data.flags = DB_DBT_USERMEM;
 
        /* fetch it */
-       rc = db->get( db, NULL, &key, &data, 0 );
+       rc = db->get( db, NULL, &key, &data, bdb->bi_db_opflags );
 
        if( rc != 0 ) {
                Debug( LDAP_DEBUG_TRACE,
index 2edc0dbe0e49045133435119d111f48b7274d940..2ca460ead769020991544f37e417ff928572bdef 100644 (file)
@@ -92,7 +92,7 @@ int bdb_id2entry(
        data.flags = DB_DBT_MALLOC;
 
        /* fetch it */
-       rc = db->get( db, tid, &key, &data, 0 );
+       rc = db->get( db, tid, &key, &data, bdb->bi_db_opflags );
 
        if( rc != 0 ) {
                return rc;
index 0d080894a0da7dd8dc3e60f65c2cd0dce740081e..b3b11458a3c71ecefa7d7f4e970dae2b8631b2df 100644 (file)
@@ -220,6 +220,7 @@ bdb_idl_fetch_key(
        DBT                     *key,
        ID                      *ids )
 {
+       struct bdb_info *bdb = (struct bdb_info *) be->be_private;
        int rc;
        DBT data;
 
@@ -231,7 +232,7 @@ bdb_idl_fetch_key(
        data.flags = DB_DBT_USERMEM;
 
        /* fetch it */
-       rc = db->get( db, tid, key, &data, 0 );
+       rc = db->get( db, tid, key, &data, bdb->bi_db_opflags );
 
        if( rc == DB_NOTFOUND ) {
                return rc;
@@ -268,6 +269,7 @@ bdb_idl_insert_key(
        DBT                     *key,
        ID                      id )
 {
+       struct bdb_info *bdb = (struct bdb_info *) be->be_private;
        int     rc;
        ID ids[BDB_IDL_DB_SIZE];
        DBT data;
@@ -284,7 +286,7 @@ bdb_idl_insert_key(
        data.flags = DB_DBT_USERMEM;
 
        /* fetch the key for read/modify/write */
-       rc = db->get( db, tid, key, &data, DB_RMW );
+       rc = db->get( db, tid, key, &data, DB_RMW | bdb->bi_db_opflags );
 
        if( rc == DB_NOTFOUND ) {
                ids[0] = 1;
@@ -358,6 +360,7 @@ bdb_idl_delete_key(
        DBT                     *key,
        ID                      id )
 {
+       struct bdb_info *bdb = (struct bdb_info *) be->be_private;
        int     rc;
        ID ids[BDB_IDL_DB_SIZE];
        DBT data;
@@ -374,7 +377,7 @@ bdb_idl_delete_key(
        data.flags = DB_DBT_USERMEM;
 
        /* fetch the key for read/modify/write */
-       rc = db->get( db, tid, key, &data, DB_RMW );
+       rc = db->get( db, tid, key, &data, DB_RMW | bdb->bi_db_opflags );
 
        if ( rc != 0 ) {
                Debug( LDAP_DEBUG_ANY, "=> bdb_idl_delete_key: "
index 8e5f5b51af4f06b711827555c30a711713e512f7..b7775be791349e54402d83117c15c7c6a938d751 100644 (file)
@@ -210,7 +210,7 @@ bdb_db_open( BackendDB *be )
                }
        }
 
-       flags = DB_THREAD | DB_CREATE;
+       flags = DB_THREAD | DB_CREATE | bdb->bi_db_opflags;
 
        bdb->bi_databases = (struct bdb_db_info **) ch_malloc(
                BDB_INDICES * sizeof(struct bdb_db_info *) );
index 42869b59a784b74b273be75d7d5f73ee3b81119d..a72be960b4870c0af5cecfd9de3b6de0ea1ec2b7 100644 (file)
@@ -189,7 +189,8 @@ retry:      /* transaction retry */
 
        if( bdb->bi_txn ) {
                /* begin transaction */
-               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 0 );
+               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 
+                       bdb->bi_db_opflags );
                text = NULL;
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_TRACE,
index 6742f71b46f86c6a71c52f7c868df4e79c590777..1f907af2cafc2cbeb8507a813d747d722fdf3c34 100644 (file)
@@ -83,7 +83,8 @@ retry:        /* transaction retry */
 
        if( bdb->bi_txn ) {
                /* begin transaction */
-               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 0 );
+               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 
+                       bdb->bi_db_opflags );
                text = NULL;
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_TRACE,
index 96ea8dc6e387d2ea0d586e5b410f5a86d84a9012..f41f8ed8a94242c4e42ecc12c54fd18f22845958 100644 (file)
@@ -99,7 +99,8 @@ retry:        /* transaction retry */
 
        if( bdb->bi_txn ) {
                /* begin transaction */
-               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 0 );
+               rc = txn_begin( bdb->bi_dbenv, NULL, &ltid, 
+                       bdb->bi_db_opflags );
                *text = NULL;
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_TRACE,
index 892db3ee73d859b8996cc3a3ae54f39b5ed5eb33..2738bf10eef546913b2ff70c10646472bdb0897f 100644 (file)
@@ -64,7 +64,8 @@ ID bdb_tool_entry_next(
        
        if (cursor == NULL) {
                rc = bdb->bi_id2entry->bdi_db->cursor(
-                       bdb->bi_id2entry->bdi_db, NULL, &cursor, 0 );
+                       bdb->bi_id2entry->bdi_db, NULL, &cursor,
+                       bdb->bi_db_opflags );
                if( rc != 0 ) {
                        return NOID;
                }
@@ -120,7 +121,8 @@ ID bdb_tool_entry_put(
                (long) e->e_id, e->e_dn, 0 );
 
        if( bdb->bi_txn ) {
-               rc = txn_begin( bdb->bi_dbenv, NULL, &tid, 0 );
+               rc = txn_begin( bdb->bi_dbenv, NULL, &tid, 
+                       bdb->bi_db_opflags );
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
                                "=> bdb_tool_entry_put: txn_begin failed: %s (%d)\n",
@@ -208,7 +210,7 @@ int bdb_tool_entry_reindex(
        }
 
        if( bi->bi_txn ) {
-               rc = txn_begin( bi->bi_dbenv, NULL, &tid, 0 );
+               rc = txn_begin( bi->bi_dbenv, NULL, &tid, bi->bi_db_opflags );
                if( rc != 0 ) {
                        Debug( LDAP_DEBUG_ANY,
                                "=> bdb_tool_entry_reindex: txn_begin failed: %s (%d)\n",