[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: keep getting errors on this DSA



for the record - in case anyone asks...
RHEL 3.0 on dual xeon machine

the build options and patches that I used on db4 & openldap-2.2.23

openldap-2.2.23 (patched for transactions - info below)
db4-2.52 (patch info below for transactions & patches 1/2)

I went to build folder of db4
cd db-4.2.52/build_unix
make realclean
# cat Config
CFLAGS='-O2'
CXXFLAGS='-O2'
../dist/configure \
        --prefix=/usr/local \
        --enable-compat185
# ./Config
# make
# make test
# make install

I went to build folder of openldap-2.2.23
# cat Config
#!/bin/sh
export LDFLAGS="-L/usr/local/lib -R/usr/local/lib"
export CPPFLAGS="-I/usr/local/ssl/include"
export LD_LIBRARY_PATH=/usr/local/lib
export LD_RUN_PATH=/usr/local/lib
export LANG=en_US
./configure \
    --prefix=/usr/local \
    --disable-ipv6 \
    --with-cyrus-sasl \
    --with-kerberos \
    --with-tls \
    --enable-monitor \
    --enable-dynamic \
    --enable-phonetic \
    --enable-slapd \
    --enable-spasswd \
    --enable-rlookups \
    --enable-wrappers \
    --enable-crypt \
    --enable-hdb \
    --with-dyngroup=yes \
    --with-proxycache=yes
# make
# make test
# make install

****
patched with transaction.diff

# cat transactions.diff.1
--- openldap-2.2.15/servers/slapd/back-bdb/cache.c.orig 2004-09-09
18:34:48.701487000 -0700
+++ openldap-2.2.15/servers/slapd/back-bdb/cache.c      2004-09-09
18:35:30.722007000 -0700
@@ -1186,7 +1186,7 @@

        if ( ldap_pvt_thread_pool_getkey( ctx, ((char *)env)+1, &data,
NULL ) ) {
                for ( i=0, rc=1; rc != 0 && i<4; i++ ) {
-                       rc = TXN_BEGIN( env, NULL, txn, 0 );
+                       rc = TXN_BEGIN( env, NULL, txn,
DB_TXN_NOT_DURABLE );
                        if (rc) ldap_pvt_thread_yield();
                }
                if ( rc != 0) {

****
db4-4.2.52
patched with transaction.diff
# cat transactions.diff
--- db4-4.2.52/dbinc/db.in.orig 2004-09-09 18:29:17.987387000 -0700
+++ db4-4.2.52/dbinc/db.in      2004-09-09 18:30:00.547903000 -0700
@@ -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;
};

--- db4-4.2.52/txn/txn.c.orig   2004-09-09 18:30:36.348345000 -0700
+++ db4-4.2.52/txn/txn.c        2004-09-09 18:32:14.559561000 -0700
@@ -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);

# cat patch.4.2.52.*
*** mp/mp_fget.c.orig   25 Sep 2003 02:15:16 -0000      11.81
--- mp/mp_fget.c        9 Dec 2003 19:06:28 -0000       11.82
***************
*** 440,446 ****
                c_mp->stat.st_pages--;
                alloc_bhp = NULL;
                R_UNLOCK(dbenv, &dbmp->reginfo[n_cache]);
-               MUTEX_LOCK(dbenv, &hp->hash_mutex);

                /*
                 * We can't use the page we found in the pool if
DB_MPOOL_NEW
--- 440,445 ----
***************
*** 455,460 ****
--- 454,462 ----
                        b_incr = 0;
                        goto alloc;
                }
+
+               /* We can use the page -- get the bucket lock. */
+               MUTEX_LOCK(dbenv, &hp->hash_mutex);
                break;
        case SECOND_MISS:
                /*
*** mp/mp_fput.c.orig   30 Sep 2003 17:12:00 -0000      11.48
--- mp/mp_fput.c        13 Dec 2003 00:08:29 -0000      11.49
***************
*** 285,290 ****
--- 285,291 ----
                    bhp != NULL; bhp = SH_TAILQ_NEXT(bhp, hq, __bh))
                        if (bhp->priority != UINT32_T_MAX &&
                            bhp->priority > MPOOL_BASE_DECREMENT)
+                               bhp->priority -= MPOOL_BASE_DECREMENT;
                MUTEX_UNLOCK(dbenv, &hp->hash_mutex);
        }
  }
*** lock/lock.c.save    2004-01-30 10:48:33.000000000 -0800
--- lock/lock.c 2004-01-30 10:55:58.000000000 -0800
***************
*** 2216,2226 ****
                                        dp = (u_int8_t *)dp +
\
                                            sizeof(db_pgno_t);
\
                                } while (0)
! #define COPY_OBJ(dp, obj)     do {
\
!                                       memcpy(dp, obj->data, obj-
>size);  \
!                                       dp = (u_int8_t *)dp +
\
!                                            ALIGN(obj->size,
\
!                                            sizeof(u_int32_t));
\
                                } while (0)

  #define GET_COUNT(dp, count)  do {
\
--- 2216,2227 ----
                                        dp = (u_int8_t *)dp +
\
                                            sizeof(db_pgno_t);
\
                                } while (0)
! #define COPY_OBJ(dp, obj)     do {
\
!                                       memcpy(dp,
\
!                                           (obj)->data, (obj)->size);
\
!                                       dp = (u_int8_t *)dp +
\
!                                            ALIGN((obj)->size,
\
!                                           sizeof(u_int32_t));
\
                                } while (0)

  #define GET_COUNT(dp, count)  do {
\
***************
*** 2339,2345 ****
                for (i = 0; i < nlocks; i = j) {
                        PUT_PCOUNT(dp, obj[i].ulen);
                        PUT_SIZE(dp, obj[i].size);
!                       COPY_OBJ(dp, obj);
                        lock = (DB_LOCK_ILOCK *)obj[i].data;
                        for (j = i + 1; j <= i + obj[i].ulen; j++) {
                                lock = (DB_LOCK_ILOCK *)obj[j].data;
--- 2340,2346 ----
                for (i = 0; i < nlocks; i = j) {
                        PUT_PCOUNT(dp, obj[i].ulen);
                        PUT_SIZE(dp, obj[i].size);
!                       COPY_OBJ(dp, &obj[i]);
                        lock = (DB_LOCK_ILOCK *)obj[i].data;
                        for (j = i + 1; j <= i + obj[i].ulen; j++) {
                                lock = (DB_LOCK_ILOCK *)obj[j].data;