This patch is intended to be applied to Berkeley DB 4.2.52 and, if applied, will automatically be used by slapd(8) back-bdb/hdb. Without this patch the BDB DB_LOG_AUTOREMOVE option will not work, nor will db_archive allow any transaction log files to be removed while slapd is running. The patch can be applied to the BDB source using patch(1) as follows cd db-4.2.52 patch -p0 < openldap-src/build/BerkeleyDB42.patch (modify directory paths as necessary, then recompile and reinstall the BerkeleyDB 4.2 library.) The patch should not be applied to Berkeley DB 4.3. Index: dbinc/db.in =================================================================== RCS file: /var/CVSROOT/bdb42/dbinc/db.in,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- dbinc/db.in 25 Nov 2003 21:58:02 -0000 1.1.1.1 +++ dbinc/db.in 17 Jul 2004 16:07:23 -0000 1.2 @@ -839,6 +839,7 @@ #define TXN_NOWAIT 0x040 /* Do not wait on locks. */ #define TXN_RESTORED 0x080 /* Transaction has been restored. */ #define TXN_SYNC 0x100 /* Sync on prepare and commit. */ +#define TXN_NOLOG 0x200 /* Do not log this transaction. */ u_int32_t flags; }; Index: txn/txn.c =================================================================== RCS file: /var/CVSROOT/bdb42/txn/txn.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- txn/txn.c 17 Dec 2003 21:43:53 -0000 1.1.1.2 +++ txn/txn.c 17 Jul 2004 16:07:27 -0000 1.2 @@ -127,7 +127,7 @@ if ((ret = __db_fchk(dbenv, "txn_begin", flags, DB_DIRTY_READ | DB_TXN_NOWAIT | - DB_TXN_NOSYNC | DB_TXN_SYNC)) != 0) + DB_TXN_NOSYNC | DB_TXN_SYNC | DB_TXN_NOT_DURABLE)) != 0) return (ret); if ((ret = __db_fcchk(dbenv, "txn_begin", flags, DB_TXN_NOSYNC, DB_TXN_SYNC)) != 0) @@ -193,6 +193,8 @@ F_SET(txn, TXN_SYNC); if (LF_ISSET(DB_TXN_NOWAIT)) F_SET(txn, TXN_NOWAIT); + if (LF_ISSET(DB_TXN_NOT_DURABLE)) + F_SET(txn, TXN_NOLOG); if ((ret = __txn_begin_int(txn, 0)) != 0) goto err; @@ -328,7 +330,7 @@ * We should set this value when we write the first log record, not * here. */ - if (DBENV_LOGGING(dbenv)) + if (DBENV_LOGGING(dbenv) && !F_ISSET(txn, TXN_NOLOG)) __log_txn_lsn(dbenv, &begin_lsn, NULL, NULL); else ZERO_LSN(begin_lsn);