diff --git a/doc/man/man5/slapd.conf.5 b/doc/man/man5/slapd.conf.5 index 06c506315108d9121f74c1ac775b06d3704a8e41..223dc9bccc3ce8aca6b00caf7c0139552ec0dc65 100644 --- a/doc/man/man5/slapd.conf.5 +++ b/doc/man/man5/slapd.conf.5 @@ -266,6 +266,10 @@ by the LDBM backend database instance. The default is 1000 entries. Specify the size in bytes of the in-memory cache associated with each open index file. If not supported by the underlying database method, this option is ignored without comment. The default is 100000 bytes. +.B dbcachenowsync +Specify that database writes should not be immediately synchronized +with in memory changes. Enabling this option may improving performance +at the expense of data security. .TP .B directory <directory> Specify the directory where the LDBM files containing the database and diff --git a/servers/slapd/back-ldbm/back-ldbm.h b/servers/slapd/back-ldbm/back-ldbm.h index dda1ff8452aa6bb37d6b18bb17c49bc6e09add26..960d2e1d4e0e4cc24958502150792a635f528a87 100644 --- a/servers/slapd/back-ldbm/back-ldbm.h +++ b/servers/slapd/back-ldbm/back-ldbm.h @@ -110,7 +110,7 @@ struct ldbminfo { struct cache li_cache; Avlnode *li_attrs; int li_dbcachesize; - int li_flush_wrt; + int li_dbcachewsync; struct dbcache li_dbcache[MAXDBCACHE]; pthread_mutex_t li_dbcache_mutex; pthread_cond_t li_dbcache_cv; diff --git a/servers/slapd/back-ldbm/config.c b/servers/slapd/back-ldbm/config.c index 0e087dc0b18badec3009ca2f54fe9fbedd4c68b5..a47d7a14a1386e3deeef99fb3c99251223adbbd5 100644 --- a/servers/slapd/back-ldbm/config.c +++ b/servers/slapd/back-ldbm/config.c @@ -80,9 +80,9 @@ ldbm_back_config( } li->li_dbcachesize = atoi( argv[1] ); - /* flush on writes */ - } else if ( strcasecmp( argv[0], "flushwrites" ) == 0 ) { - li->li_flush_wrt = 1; + /* no write sync */ + } else if ( strcasecmp( argv[0], "dbcachenowsync" ) == 0 ) { + li->li_dbcachewsync = 0; /* anything else */ } else { diff --git a/servers/slapd/back-ldbm/dn2id.c b/servers/slapd/back-ldbm/dn2id.c index ff56ba616be5f11aa0d251524ef3939a0cbc26f1..4a7da28731e28b7986fd23473304c9658ea792be 100644 --- a/servers/slapd/back-ldbm/dn2id.c +++ b/servers/slapd/back-ldbm/dn2id.c @@ -50,7 +50,7 @@ dn2id_add( data.dsize = sizeof(ID); flags = LDBM_INSERT; - if ( li->li_flush_wrt ) flags |= LDBM_SYNC; + if ( li->li_dbcachewsync ) flags |= LDBM_SYNC; rc = ldbm_cache_store( db, key, data, flags ); diff --git a/servers/slapd/back-ldbm/id2entry.c b/servers/slapd/back-ldbm/id2entry.c index c458ca503ffe8f1dc1d49826a3e80cc7b0498181..edc8f4c7b209ee64c3aff293d0eb8f376e9c47ce 100644 --- a/servers/slapd/back-ldbm/id2entry.c +++ b/servers/slapd/back-ldbm/id2entry.c @@ -48,7 +48,7 @@ id2entry_add( Backend *be, Entry *e ) /* store it */ flags = LDBM_REPLACE; - if ( li->li_flush_wrt ) flags |= LDBM_SYNC; + if ( li->li_dbcachewsync ) flags |= LDBM_SYNC; rc = ldbm_cache_store( db, key, data, flags ); pthread_mutex_unlock( &entry2str_mutex ); diff --git a/servers/slapd/back-ldbm/idl.c b/servers/slapd/back-ldbm/idl.c index 2f96f8f3c500986cf76fcca13c644eee19346103..a19786603ade88ba730da12ed5aec85d71c97a01 100644 --- a/servers/slapd/back-ldbm/idl.c +++ b/servers/slapd/back-ldbm/idl.c @@ -195,7 +195,7 @@ idl_store( #endif flags = LDBM_REPLACE; - if( li->li_flush_wrt ) flags |= LDBM_SYNC; + if( li->li_dbcachewsync ) flags = LDBM_SYNC; rc = ldbm_cache_store( db, key, data, flags ); /* Debug( LDAP_DEBUG_TRACE, "<= idl_store %d\n", rc, 0, 0 ); */ diff --git a/servers/slapd/back-ldbm/init.c b/servers/slapd/back-ldbm/init.c index 65fda4378518a767f0bda90906cb6dde32604bf7..9193f7213c7859e06d1d26f460d29dc4eb261fdd 100644 --- a/servers/slapd/back-ldbm/init.c +++ b/servers/slapd/back-ldbm/init.c @@ -34,6 +34,9 @@ ldbm_back_init( /* default database cache size */ li->li_dbcachesize = DEFAULT_DBCACHE_SIZE; + /* default cache mode is sync on write */ + li->li_dbcachewsync = 1; + /* default file creation mode */ li->li_mode = DEFAULT_MODE;