| 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, and then build and install OpenLDAP |
| Software. |
| |
| 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); |