]> git.sur5r.net Git - openldap/commitdiff
Add shm_key config keyword to use shared memory for BDB environment
authorHoward Chu <hyc@openldap.org>
Fri, 18 Apr 2003 09:43:22 +0000 (09:43 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 18 Apr 2003 09:43:22 +0000 (09:43 +0000)
Unmeasurable performance difference on my tests, but who knows...

servers/slapd/back-bdb/back-bdb.h
servers/slapd/back-bdb/config.c
servers/slapd/back-bdb/init.c

index 30640a0e455baeeb44118dd75df14952d4ac6a61..feccc5bf4efc6b1785982709f2c7e97ea9f7d8ec 100644 (file)
@@ -157,6 +157,7 @@ struct bdb_info {
        u_int32_t       bi_txn_cp_kbyte;
 
        int                     bi_lock_detect;
+       long            bi_shm_key;
 
        ID                      bi_lastid;
        ldap_pvt_thread_mutex_t bi_lastid_mutex;
index 12bf4d73244bc22141cde250ec548262d34c225d..4ebc17c6498ec92be8597869e80947e6877295a9 100644 (file)
@@ -50,7 +50,7 @@ bdb_db_config(
        } else if ( strcasecmp( argv[0], "dirtyread" ) == 0 ) {
                bdb->bi_db_opflags |= DB_DIRTY_READ;
 #endif
-       /* transaction checkpoint configuration */
+       /* transaction logging configuration */
        } else if ( strcasecmp( argv[0], "dbnosync" ) == 0 ) {
                bdb->bi_dbenv_xflags |= DB_TXN_NOSYNC;
 
@@ -125,6 +125,16 @@ bdb_db_config(
 
                if( rc != LDAP_SUCCESS ) return 1;
 
+       /* unique key for shared memory regions */
+        } else if ( strcasecmp( argv[0], "shm_key" ) == 0 ) {
+                 if ( argc < 2 ) {
+                         fprintf( stderr,
+                 "%s: line %d: missing key in \"shm_key <key>\" line\n",
+                             fname, lineno );
+                         return( 1 );
+                 }
+                 bdb->bi_shm_key = atoi( argv[1] );
+
        /* size of the cache in entries */
         } else if ( strcasecmp( argv[0], "cachesize" ) == 0 ) {
                  if ( argc < 2 ) {
index 5e6c1d3f1f01c6efb81b5506fc15f934926d8434..b1314af50975d1375f3d3a77df0f377c3e006c81 100644 (file)
@@ -194,6 +194,12 @@ bdb_db_open( BackendDB *be )
        if( !(slapMode & SLAP_TOOL_MODE) ) flags |= DB_RECOVER;
 #endif
 
+       /* If a key was set, use shared memory for the BDB environment */
+       if ( bdb->bi_shm_key ) {
+               bdb->bi_dbenv->set_shm_key( bdb->bi_dbenv, bdb->bi_shm_key );
+               flags |= DB_SYSTEM_MEM;
+       }
+
        bdb->bi_dbenv->set_errpfx( bdb->bi_dbenv, be->be_suffix[0].bv_val );
        bdb->bi_dbenv->set_errcall( bdb->bi_dbenv, bdb_errcall );
        bdb->bi_dbenv->set_lk_detect( bdb->bi_dbenv, bdb->bi_lock_detect );