]> git.sur5r.net Git - openldap/blobdiff - tests/data/regressions/its8752/its8752
Wait for slapd to stop before proceeding. Otherwise this test may fail.
[openldap] / tests / data / regressions / its8752 / its8752
index 30a51846bf36182cd0435ca6bd179ea8bf884c5e..0a8150fb0aa29edf5b30478a670f3c53dc645c1d 100755 (executable)
@@ -29,6 +29,15 @@ if test $BACKEND = ldif ; then
        exit 0
 fi
 
+dtest=`date +%N|sed s/...$//`
+
+if test $dtest = N; then
+       echo "nanosecond date values not supported, test skipped"
+       exit 0
+fi
+
+echo "This test tracks a case where slapd deadlocks during a significant write load"
+echo "See http://www.openldap.org/its/index.cgi/?findid=8752 for more information."
 
 MMR=4
 XDIR=$TESTDIR/srv
@@ -141,6 +150,7 @@ fi
 echo "Stopping slapd and reworking configuration for MMR..."
 
 test $KILLSERVERS != no && kill -HUP $KILLPIDS
+wait $KILLPIDS
 
 KILLPIDS=
 n=1
@@ -149,19 +159,19 @@ while [ $n -le $MMR ]; do
        MYLOG=`eval echo '$LOG'$n`
        MYCONF=`eval echo '$CONF'$n`
        echo "Starting provider slapd on TCP/IP URI $MYURI"
-       . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf.mmr > $CONF
-       sed -e "s/MMR/$n/g" $CONF > $MYCONF
+       . $CONFFILTER $BACKEND $MONITORDB < $ITSDIR/slapd.conf.mmr > $TESTDIR/slapd.conf
+       sed -e "s/MMR/$n/g" $TESTDIR/slapd.conf > $MYCONF
        j=1
        while [ $j -le $MMR ]; do
                MMCURI=`eval echo '$URI'$j`
-               sed -e "s|MMC${j}|${MMCURI}|" $MYCONF > $CONF
-               mv $CONF $MYCONF
+               sed -e "s|MMC${j}|${MMCURI}|" $MYCONF > $TESTDIR/slapd.conf
+               mv $TESTDIR/slapd.conf $MYCONF
                j=`expr $j + 1`
        done
-       if [ -f $CONF ]; then
-               rm -f $CONF
+       if [ -f $TESTDIR/slapd.conf ]; then
+               rm -f $TESTDIR/slapd.conf
        fi
-       $SLAPD -f $MYCONF -h $MYURI  -d $LVL $TIMING > $MYLOG 2>&1 &
+       $SLAPD -f $MYCONF -h $MYURI  -d $LVL $TIMING >> $MYLOG 2>&1 &
        PID=$!
        if test $WAIT != 0 ; then
                echo PID $PID
@@ -190,6 +200,7 @@ while [ $n -le $MMR ]; do
        n=`expr $n + 1`
 done
 
+echo "Setting up accesslog on each master..."
 n=1
 while [ $n -le $MMR ]; do
        echo "Modifying dn: cn=Elmer_Fudd,ou=People,dc=example,dc=com on master $n"
@@ -202,10 +213,53 @@ changetype: modify
 replace: sn
 sn: Fudd
 EOMODS
+       sleep 5
+       n=`expr $n + 1`
+done
+
+echo "Sleeping 30 seconds to ensure replication is reconciled between all nodes"
+echo "The next step of the test will perform 20000 random write operations and may take some time."
+echo "As this test is for a deadlock, it will take manual intervention to exit the test if one occurs."
+sleep 30
+
+echo "Starting random master/entry modifications..."
+DN1="cn=Elmer_Fudd,ou=People,$BASEDN"
+VAL1="Fudd"
+
+DN2="cn=Jessica_Rabbit,ou=People,$BASEDN"
+VAL2="Rabbit"
+
+DN3="cn=Bugs_Bunny,ou=People,$BASEDN"
+VAL3="Bunny"
 
+DN4="cn=Daffy_Duck,ou=People,$BASEDN"
+VAL4="Duck"
+
+n=1
+while [ $n -le 20000 ]; do
+       seed=`date +%N|sed s/...$//`
+       rvalue=`echo|awk "BEGIN {srand($seed)
+{print int(1+rand()*4)}}"`
+       MYURI=`eval echo '$URI'$rvalue`
+       seed=`date +%N|sed s/...$//`
+       rvalue=`echo|awk "BEGIN {srand($seed)
+{print int(1+rand()*4)}}"`
+       MYDN=`eval echo '$DN'$rvalue`
+       MYVAL=`eval echo '$VAL'$rvalue`
+       echo "Modifying $MYURI entry $MYDN with value $MYVAL iteration $n of 20000"
+       $LDAPMODIFY -v -D "$MANAGERDN" -H $MYURI -w $PASSWD > \
+               $TESTOUT 2>&1 << EOMODS
+
+dn: $MYDN
+changetype: modify
+replace: sn
+sn: $MYVAL
+EOMODS
        n=`expr $n + 1`
 done
 
+test $KILLSERVERS != no && kill -HUP $KILLPIDS
+
 echo ">>>>> Test succeeded"
 
 test $KILLSERVERS != no && wait