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

Re: (ITS#5332) multimaster replication crash



This is a multi-part message in MIME format.
--------------020804010101020205090300
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

Gavin Henry schrieb:
>> # compile openldap
>> ./configure
>> make
>>     
>
> This should be:
>
> ./configure
> make depend
> make
> make test (after of course copying you hacked test script).
>   
Makes no difference, see attaches log, script, test.

Bye,
   Marcel


--------------020804010101020205090300
Content-Type: application/x-shellscript;
 name="runit.sh"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="runit.sh"

IyEvYmluL2Jhc2gKCnJtIC1yZiBvcGVubGRhcC0yLjQuNwp0YXIgeGpmIC4uL1NPVVJDRVMv
b3BlbmxkYXAtMi40LjcudGFyLmJ6MgpjZCBvcGVubGRhcC0yLjQuNwouL2NvbmZpZ3VyZQpt
YWtlIGRlcGVuZAptYWtlCmNwIC90bXAvdGVzdDA1MC1zeW5jcmVwbC1tdWx0aW1hc3RlciB0
ZXN0cy9zY3JpcHRzLwpta2RpciAtcCB0ZXN0cy9kYXRhL3Rlc3QwNTAvCmNkIHRlc3RzL2Rh
dGEvdGVzdDA1MC8KL3RtcC91c2Vyc2xkaWYyLnB5IHwgc3BsaXQgLWwgMjAwMDAgLQpjZCAt
Cm1ha2UgdGVzdAo=
--------------020804010101020205090300
Content-Type: text/plain;
 name="test050-syncrepl-multimaster"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="test050-syncrepl-multimaster"

#! /bin/sh
# $OpenLDAP: pkg/ldap/tests/scripts/test050-syncrepl-multimaster,v 1.7 2008/01/07 23:20:17 kurt Exp $
## This work is part of OpenLDAP Software <http://www.openldap.org/>.
##
## Copyright 1998-2008 The OpenLDAP Foundation.
## All rights reserved.
##
## Redistribution and use in source and binary forms, with or without
## modification, are permitted only as authorized by the OpenLDAP
## Public License.
##
## A copy of this license is available in the file LICENSE in the
## top-level directory of the distribution or, alternatively, at
## <http://www.OpenLDAP.org/license.html>.

echo "running defines.sh"
. $SRCDIR/scripts/defines.sh

if test $SYNCPROV = syncprovno; then 
	echo "Syncrepl provider overlay not available, test skipped"
	exit 0
fi 

PRODIR=$TESTDIR/pro
CONDIR=$TESTDIR/con
CONDIR2=$TESTDIR/con2
DBPRO=$PRODIR/db
DBCON=$CONDIR/db
DBCON2=$CONDIR2/db
CFPRO=$PRODIR/slapd.d
CFCON=$CONDIR/slapd.d
CFCON2=$CONDIR2/slapd.d

mkdir -p $TESTDIR $PRODIR $CONDIR $CONDIR2 $DBPRO $DBCON $DBCON2 $CFPRO $CFCON $CFCON2

$SLAPPASSWD -g -n >$CONFIGPWF

#
# Test replication of dynamic config:
# - start producer
# - start consumer
# - start consumer2
# - configure over ldap
# - populate over ldap
# - configure syncrepl over ldap
# - retrieve database over ldap and compare against expected results
#

echo "Initializing server configurations..."
$SLAPADD -F $CFCON2 -n 0 <<EOF
dn: cn=config
objectClass: olcGlobal
cn: config
olcServerID: 3

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcRootPW:< file://$CONFIGPWF
EOF

$SLAPADD -F $CFCON -n 0 <<EOF
dn: cn=config
objectClass: olcGlobal
cn: config
olcServerID: 2

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcRootPW:< file://$CONFIGPWF
EOF

$SLAPADD -F $CFPRO -n 0 <<EOF
dn: cn=config
objectClass: olcGlobal
cn: config
olcServerID: 1

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcRootPW:< file://$CONFIGPWF
EOF

echo "Starting producer slapd on TCP/IP port $PORT1..."
cd $PRODIR
$SLAPD -F slapd.d -h $URI1 -d $LVL $TIMING > $LOG1 2>&1 &
PID=$!
if test $WAIT != 0 ; then
    echo PID $PID
    read foo
fi
KILLPIDS="$PID"
cd $TESTWD

sleep 1

echo "Using ldapsearch to check that producer slapd is running..."
for i in 0 1 2 3 4 5; do
	$LDAPSEARCH -s base -b "" -H $URI1 \
		'objectclass=*' > /dev/null 2>&1
	RC=$?
	if test $RC = 0 ; then
		break
	fi
	echo "Waiting 5 seconds for slapd to start..."
	sleep 5
done

if test $RC != 0 ; then
	echo "ldapsearch failed ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Inserting syncprov overlay on producer..."
if [ "$SYNCPROV" = syncprovmod ]; then
	$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF > $TESTOUT 2>&1
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: ../../../servers/slapd/overlays
olcModuleLoad: syncprov.la
EOF
	RC=$?
	if test $RC != 0 ; then
		echo "ldapadd failed for moduleLoad ($RC)!"
		test $KILLSERVERS != no && kill -HUP $KILLPIDS
		exit $RC
	fi
fi
#
# Note that we configure a timeout here; it's possible for both
# servers to attempt to bind to each other while a modify to
# cn=config is in progress. When the modify pauses the thread pool
# neither server will progress. The timeout will drop the syncrepl
# attempt and allow the modifies to complete.
#
read CONFIGPW < $CONFIGPWF
$LDAPMODIFY -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >> $TESTOUT 2>&1
dn: cn=config
changetype: modify
replace: olcServerID
olcServerID: 1 $URI1
olcServerID: 2 $URI2
olcServerID: 3 $URI3

dn: olcOverlay=syncprov,olcDatabase={0}config,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
-
add: olcMirrorMode
olcMirrorMode: TRUE
EOF
RC=$?
if test $RC != 0 ; then
	echo "ldapmodify failed for syncrepl config ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Starting consumer slapd on TCP/IP port $PORT2..."
cd $CONDIR
$SLAPD -F ./slapd.d -h $URI2 -d $LVL $TIMING > $LOG2 2>&1 &
SLAVEPID=$!
if test $WAIT != 0 ; then
    echo SLAVEPID $SLAVEPID
    read foo
fi
KILLPIDS="$KILLPIDS $SLAVEPID"
cd $TESTWD

sleep 1

echo "Using ldapsearch to check that consumer slapd is running..."
for i in 0 1 2 3 4 5; do
	$LDAPSEARCH -s base -b "" -H $URI2 \
		'objectclass=*' > /dev/null 2>&1
	RC=$?
	if test $RC = 0 ; then
		break
	fi
	echo "Waiting 5 seconds for slapd to start..."
	sleep 5
done

if test $RC != 0 ; then
	echo "ldapsearch failed ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Configuring syncrepl on consumer..."
$LDAPMODIFY -D cn=config -H $URI2 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
-
add: olcMirrorMode
olcMirrorMode: TRUE
EOF

echo "Starting consumer2 slapd on TCP/IP port $PORT3..."
cd $CONDIR2
$SLAPD -F ./slapd.d -h $URI3 -d $LVL $TIMING > $LOG3 2>&1 &
SLAVE2PID=$!
if test $WAIT != 0 ; then
    echo SLAVE2PID $SLAVE2PID
    read foo
fi
KILLPIDS="$KILLPIDS $SLAVE2PID"
cd $TESTWD

sleep 1

echo "Using ldapsearch to check that consumer2 slapd is running..."
for i in 0 1 2 3 4 5; do
	$LDAPSEARCH -s base -b "" -H $URI3 \
		'objectclass=*' > /dev/null 2>&1
	RC=$?
	if test $RC = 0 ; then
		break
	fi
	echo "Waiting 5 seconds for slapd to start..."
	sleep 5
done

if test $RC != 0 ; then
	echo "ldapsearch failed ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Configuring syncrepl on consumer2..."
$LDAPMODIFY -D cn=config -H $URI3 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=001 provider=$URI1 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
olcSyncRepl: rid=002 provider=$URI2 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
olcSyncRepl: rid=003 provider=$URI3 binddn="cn=config" bindmethod=simple
  credentials=$CONFIGPW searchbase="cn=config" type=refreshAndPersist
  retry="5 5 300 5" timeout=1
-
add: olcMirrorMode
olcMirrorMode: TRUE
EOF

echo "Adding schema and databases on producer..."
$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
include: file://$ABS_SCHEMADIR/core.ldif

include: file://$ABS_SCHEMADIR/cosine.ldif

include: file://$ABS_SCHEMADIR/inetorgperson.ldif

include: file://$ABS_SCHEMADIR/openldap.ldif

include: file://$ABS_SCHEMADIR/nis.ldif
EOF
RC=$?
if test $RC != 0 ; then
	echo "ldapadd failed for schema config ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

if [ "$BACKENDTYPE" = mod ]; then
	$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: ../../../servers/slapd/back-$BACKEND
olcModuleLoad: back_$BACKEND.la
EOF
	RC=$?
	if test $RC != 0 ; then
		echo "ldapadd failed for backend config ($RC)!"
		test $KILLSERVERS != no && kill -HUP $KILLPIDS
		exit $RC
	fi
fi

$LDAPADD -D cn=config -H $URI1 -y $CONFIGPWF <<EOF >>$TESTOUT 2>&1
dn: olcDatabase={1}$BACKEND,cn=config
objectClass: olcDatabaseConfig
objectClass: olc${BACKEND}Config
olcDatabase: {1}$BACKEND
olcSuffix: $BASEDN
olcDbDirectory: ./db
olcRootDN: $MANAGERDN
olcRootPW: $PASSWD
olcSyncRepl: rid=004 provider=$URI1 binddn="$MANAGERDN" bindmethod=simple
  credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
  interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcSyncRepl: rid=005 provider=$URI2 binddn="$MANAGERDN" bindmethod=simple
  credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
  interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcSyncRepl: rid=006 provider=$URI3 binddn="$MANAGERDN" bindmethod=simple
  credentials=$PASSWD searchbase="$BASEDN" type=refreshOnly
  interval=00:00:00:10 retry="5 5 300 5" timeout=1
olcMirrorMode: TRUE

dn: olcOverlay=syncprov,olcDatabase={1}${BACKEND},cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
EOF
RC=$?
if test $RC != 0 ; then
	echo "ldapadd failed for database config ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Using ldapadd to populate producer..."
$LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDERED \
	>> $TESTOUT 2>&1
RC=$?
if test $RC != 0 ; then
	echo "ldapadd failed for database config ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

SLEEP=20
echo "Waiting $SLEEP seconds for syncrepl to receive changes..."
sleep $SLEEP

echo "Using ldapsearch to check that syncrepl received database changes..."
RC=32
for i in 0 1 2 3 4 5; do
	RESULT=`$LDAPSEARCH -H $URI2 \
		-s base -b "cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com" \
		'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
	if test "x$RESULT" = "xOK" ; then
		RC=0
		break
	fi
	echo "Waiting 5 seconds for syncrepl to receive changes..."
	sleep 5
done

if test $RC != 0 ; then
	echo "ldapsearch failed ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Using ldapsearch to check that syncrepl received database changes on consumer2..."
RC=32
for i in 0 1 2 3 4 5; do
	RESULT=`$LDAPSEARCH -H $URI3 \
		-s base -b "cn=Ursula Hampster,ou=Alumni Association,ou=People,dc=example,dc=com" \
		'(objectClass=*)' 2>&1 | awk '/^dn:/ {print "OK"}'`
	if test "x$RESULT" = "xOK" ; then
		RC=0
		break
	fi
	echo "Waiting 5 seconds for syncrepl to receive changes..."
	sleep 5
done

if test $RC != 0 ; then
	echo "ldapsearch failed ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Using ldapsearch to read config from the producer..."
$LDAPSEARCH -b cn=config -D cn=config -H $URI1 -y $CONFIGPWF  \
	'objectclass=*' > $MASTEROUT 2>&1
RC=$?

if test $RC != 0 ; then
	echo "ldapsearch failed at producer ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Using ldapsearch to read config from the consumer..."
$LDAPSEARCH -b cn=config -D cn=config -H $URI2 -y $CONFIGPWF \
	'objectclass=*' > $SLAVEOUT 2>&1
RC=$?

if test $RC != 0 ; then
	echo "ldapsearch failed at consumer ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Using ldapsearch to read config from consumer2..."
$LDAPSEARCH -b cn=config -D cn=config -H $URI3 -y $CONFIGPWF \
	'objectclass=*' > $SLAVE2OUT 2>&1
RC=$?

if test $RC != 0 ; then
	echo "ldapsearch failed at consumer2 ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Filtering producer results..."
. $LDIFFILTER < $MASTEROUT > $MASTERFLT
echo "Filtering consumer results..."
. $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
echo "Filtering consumer2 results..."
. $LDIFFILTER < $SLAVE2OUT > $SLAVE2FLT

echo "Comparing retrieved configs from producer and consumer..."
$CMP $MASTERFLT $SLAVEFLT > $CMPOUT

if test $? != 0 ; then
	echo "test failed - producer and consumer configs differ"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit 1
fi

echo "Comparing retrieved configs from producer and consumer2..."
$CMP $MASTERFLT $SLAVE2FLT > $CMPOUT

if test $? != 0 ; then
	echo "test failed - producer and consumer2 configs differ"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit 1
fi

echo "Using ldapsearch to read all the entries from the producer..."
$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI1 -w $PASSWD  \
	'objectclass=*' > $MASTEROUT 2>&1
RC=$?

if test $RC != 0 ; then
	echo "ldapsearch failed at producer ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Using ldapsearch to read all the entries from the consumer..."
$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI2 -w $PASSWD  \
	'objectclass=*' > $SLAVEOUT 2>&1
RC=$?

if test $RC != 0 ; then
	echo "ldapsearch failed at consumer ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Using ldapsearch to read all the entries from the consumer2..."
$LDAPSEARCH -S "" -b "$BASEDN" -D "$MANAGERDN" -H $URI3 -w $PASSWD  \
	'objectclass=*' > $SLAVE2OUT 2>&1
RC=$?

if test $RC != 0 ; then
	echo "ldapsearch failed at consumer2 ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi


test $KILLSERVERS != no && kill -HUP $KILLPIDS

echo "Filtering producer results..."
. $LDIFFILTER < $MASTEROUT > $MASTERFLT
echo "Filtering consumer results..."
. $LDIFFILTER < $SLAVEOUT > $SLAVEFLT
echo "Filtering consumer2 results..."
. $LDIFFILTER < $SLAVE2OUT > $SLAVE2FLT

echo "Comparing retrieved entries from producer and consumer..."
$CMP $MASTERFLT $SLAVEFLT > $CMPOUT

if test $? != 0 ; then
	echo "test failed - producer and consumer databases differ"
	exit 1
fi

echo "Comparing retrieved entries from producer and consumer2..."
$CMP $MASTERFLT $SLAVE2FLT > $CMPOUT

if test $? != 0 ; then
	echo "test failed - producer and consumer2 databases differ"
	exit 1
fi

test $KILLSERVERS != no && wait

echo "Restarting servers..."
echo "Starting producer slapd on TCP/IP port $PORT1..."
cd $PRODIR
echo "======================= RESTART =======================" >> $LOG1
$SLAPD -F ./slapd.d -h $URI1 -d $LVL $TIMING >> $LOG1 2>&1 &
PID=$!
if test $WAIT != 0 ; then
    echo PID $PID
    read foo
fi
KILLPIDS="$PID"
cd $TESTWD
echo "Using ldapsearch to check that producer slapd is running..."
for i in 0 1 2 3 4 5; do
	$LDAPSEARCH -s base -b "" -H $URI1 \
		'objectclass=*' > /dev/null 2>&1
	RC=$?
	if test $RC = 0 ; then
		break
	fi
	echo "Waiting 5 seconds for slapd to start..."
	sleep 5
done

if test $RC != 0 ; then
	echo "ldapsearch failed ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi
#exit 0
echo "Starting consumer slapd on TCP/IP port $PORT2..."
cd $CONDIR
echo "======================= RESTART =======================" >> $LOG2
$SLAPD -F ./slapd.d -h $URI2 -d $LVL $TIMING >> $LOG2 2>&1 &
SLAVEPID=$!
if test $WAIT != 0 ; then
    echo SLAVEPID $SLAVEPID
    read foo
fi
KILLPIDS="$KILLPIDS $SLAVEPID"
cd $TESTWD

sleep 1

echo "Using ldapsearch to check that consumer slapd is running..."
for i in 0 1 2 3 4 5; do
	$LDAPSEARCH -s base -b "" -H $URI2 \
		'objectclass=*' > /dev/null 2>&1
	RC=$?
	if test $RC = 0 ; then
		break
	fi
	echo "Waiting 5 seconds for slapd to start..."
	sleep 5
done

if test $RC != 0 ; then
	echo "ldapsearch failed ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

echo "Starting consumer2 slapd on TCP/IP port $PORT3..."
cd $CONDIR2
echo "======================= RESTART =======================" >> $LOG3
$SLAPD -F ./slapd.d -h $URI3 -d $LVL $TIMING >> $LOG3 2>&1 &
SLAVE2PID=$!
if test $WAIT != 0 ; then
    echo SLAVE2PID $SLAVE2PID
    read foo
fi
KILLPIDS="$KILLPIDS $SLAVE2PID"
cd $TESTWD

sleep 1

echo "Using ldapsearch to check that consumer2 slapd is running..."
for i in 0 1 2 3 4 5; do
	$LDAPSEARCH -s base -b "" -H $URI3 \
		'objectclass=*' > /dev/null 2>&1
	RC=$?
	if test $RC = 0 ; then
		break
	fi
	echo "Waiting 5 seconds for slapd to start..."
	sleep 5
done

if test $RC != 0 ; then
	echo "ldapsearch failed ($RC)!"
	test $KILLSERVERS != no && kill -HUP $KILLPIDS
	exit $RC
fi

# Insert modifications and more tests here.
SLEEP=10
echo "Waiting $SLEEP seconds for servers to resync..."
sleep $SLEEP

echo "Start gdb for:"
echo "PIDS: $KILLPIDS"

echo "$PWD/data/test050/"
ls -l "$PWD"/data/test050/*
for LDIFORDERED in $PWD/data/test050/*; do
  /usr/bin/time -f "%e" -o time -- $LDAPADD -D "$MANAGERDN" -H $URI1 -w $PASSWD -f $LDIFORDERED >> ldif.log 2>&1
  RC=$?
  SLAPDS=$(pidof slapd | wc -w)
  TOOK=$(cat time)
  if [ "x$RC" = "x0" ]; then
     echo "Added: $(basename $LDIFORDERED) in $TOOK s - OK (# of slapds: $SLAPDS)"
  else
     echo "Added: $(basename $LDIFORDERED) in $TOOK s - Failed (# of slapds: $SLAPDS)"
  fi
  sleep 1
  if [ "x$SLAPDS" != "x3" ]; then
    echo "At least one slapd died ... test failed"
    break
  fi
done

test $KILLSERVERS != no && kill -HUP $KILLPIDS

echo ">>>>> Test succeeded"

test $KILLSERVERS != no && wait

exit 0

--------------020804010101020205090300
Content-Type: text/x-python;
 name="usersldif2.py"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="usersldif2.py"

#!/usr/bin/env python

import string
import sys

uids=[]

for lineno in xrange(0,100000):

  print """dn: uid=test%(lineno)s,ou=People,dc=example,dc=com
objectClass: top
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
cn: User %(lineno)s
gecos: User %(lineno)s
gidNumber: %(lineno)s
homeDirectory: /home/test%(lineno)s
loginShell: /bin/bash
shadowInactive: -1
shadowLastChange: 12570
shadowMax: 99999
shadowMin: 0
shadowWarning: 7
sn: test%(lineno)s
uid: test%(lineno)s
uidNumber: %(lineno)s
userPassword: {crypt}WNu26PDD.aYC.
""" % { 'lineno': lineno }

--------------020804010101020205090300
Content-Type: application/x-bzip;
 name="log.bz2"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="log.bz2"

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
UrK6WktLAXTCQ7tVLRWTaZRoYRDEwMLFI5S0h8MrZkzMyy/ebrZFW1YquZt2Fue82w2TteIm
fRXH+gjc8akrhU4c8YyFqlNedi8lIbyj1PF9AXBckcCuSJci9rPB4rkleo7TuUzFFxykbDB2
HoRBzjwSLwcSz/hT7VaFRaRQP0SFdHikOzmk2FkKlJVDqownhc288szMxNhpERF8iWR8NXYV
ykFW4NEplKk3Y8dQqoTk6I4QceLmxS7G1+8nYicbHZguRTsD9TXVEnxYOxVqqtVVVXorBljC
818GknfLcp5tvtr2MPOtheUqcTZgSZSJwQOGaqro6t8PBGsWMNzFSHlTuqlpasqWRNH+J3eT
jPP8TUrvYVtYy1EWmwmOLc1T1a0tzLWpo0lhzeHiqsssyZZY0zGmYxjTMZfLkyZMmWSO3L8z
Gxvo2YnF9U61OQn2GlOCyos+OINDi7HWjTTYtBitFUy44sJL1wWUwaKJXURTVknhdq1MvGWI
kUWybKcTDdVSm3GEnqd0A/vdEiRrNPpjGM3OLMsnBHBz2QpRwTqVW57oT4GnDg1VTFVvMYZU
8CJHMxOjy/oUqyKof9ynoG7ix5UpHlmGMlDGYxOnvyQNGqVVVy2aRozHZWDMgh7jZgN6aKGh
SISk0VMsiSWxtFs/NHtRyic1H4NK/lUsdKuTiqZnyLhq8FIidXq+Tg0iCY9dmTkyKNg1vMpZ
UqmzaYZjLMwxZoskaSRJSNplkCimSUlkkoksaaxsRSopkklGKiZM1FIGZTTQqwpMTZbTJkll
KlKXW28nq3lvW8mutNLKYpZL03VmmLMspZlZspkpZZZkUlmYxaa8XUlJZTJLzrXUtLLKUu63
ZZLJZSzc6kpfJdXUtmYpLNpPHrvLzJpiyVllpbp0klLxcbJJZXbtXZZLIbNLLLMszFkpSyWa
ZMsizSyWbeXVuslvyqt2SyWb1100RZuluxjGMYxiNFkpMUyyRSlllmWSyWbNkqpTAdjc4k9i
aFcLoUxcKsUYYxLMWYWB1G4T/sdiqpVOoIPtfccfB/A3nWrZVq+tYVbaq0vzvCJfmdkSY4yo
epR5nyHKTVPKh6BYjvOQntMipiDCGSTKZTCgxVlR/pDD4Sr3ypSn9TDZ/aeMTaQ4Ku55tnRM
0Seq+Eq7ytqm9bXDGhTyOjueRp4uaPVc0yysdDpjg6m0ypZZQrx+GkmZWa1mVawWtaMy1ou4
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
cKHQiGKHAEoGdhEgQOjTqBjxOA2NK4YrJulgYgwqYSwj4yxN0yxJtcbXE9++PpWLFacfu0aN
NNNEk0qelGLKs45xM6YlrBs2aNE31TU0ECgOIgkopTivBI1UKIIglItkLHbUhLlDyO53O/Dh
Mhd5ppu7unFFiJmYWACCacNNN3d03d3DSQJnkRyDGHFsxo0hNM42bMSZKq7UtwTnym8YJkVW
Vu3K1JhodjGMNJTQpYYjkX6ZkOBXBxfRomomsS2S2JbLTt2xPRuUt9fiwfB6NPpMw2vk7XlU
3PYZS14LiKypiNFZwIqmRupNhdqNqHBcCUw0YJhEoioxVJahTDDAuBoNSai2MmxrFBVMzGMG
oksPvLCU2KcNEtXBwrW61U1Y2VZoaLEYlG9Nml/Wwa90721XGn0C0JywwS2e59jat5xv+ZhP
nxmwDePBhMCYVrEkjLElTLMYUdQeGjs2TS+lFzXhDgTvSXBiTi1pS7gulxj+97+SbOUh2nGq
tCbWToKlwmwdtbe/1u7nLdxEW1Se5gPN+R4Dd9IlwrtL7nf4m9Q/Le36zuJE7tzumIclhSyq
lSwwkieZRjMmJ9wmqaVIlJIrJVNiVil79cV8XNzXd1yNd3ovLleKOzWsMzVk1wbZWHpOjafm
SWnRbByXFIvrNKHNsFbospU28Lf1qD6Z5XCnJHYSnPRfaoPF8na7m4qvjSvViXXGw+pLGPt1
jKmZwvcYW9VZXlfJNt9MkkmCSSSSSQJJCSSSSSSSSQkokkkkzJJJJJJCSSQJJJJCSSQkAADI
SSSSSSSUySX5Mtqr2r9+9tefC991e2cxjF08rzXV112JSbytdzeXbr4zmLzrsYxg3V1uxXcz
AuXKjjhIUpSlMzMjMAuCYhwmMKIIrJkgjjmTcDBYSFuu04kl13d3ddXV0Yp0kkukY8q87yLu
6dSukOrq6MHXXRi66S7EjpdddddI5JkSDhKsokIDKY0uOSHlSZdvK87uukukYwEYxhmGMY87
jGMYxRoj3qpw1ckkXBnMBYEklVESmS4XBA6urqDF11xp0uMXq88S8ypI44kcmOIiIiKk0olK
RjMYSFEECUzCiUREpbbhmBSlxHEtKUpmEpRCUwwgyxJCQPLzzy666SzpduuujGMaO12upzjy
tnMYiDQaDEow2zGMYwMY08dnS4REoTGSkEVCJByTtmiWZJkhEERDWqqqqqqqqSQgiId10l26
dIguuup5buZ5LpDOl1111112MYPJXm812zTCsMMMFsuI3cZpJHZwf8683HGuyHk1qWmixViq
jC8Y1TKR83BXZ+9TGMfmY5ujr2X855EmpzD71Y8TwWG+2WYMsWisSvnG5TUsqMmLm2XZPsnr
pMKq/tGCwYVYyYMLBiVvFMrm/oY5mbuwYymMkz4a3J1R3uzimwl/a/Pym8pLMe5IYyqWHhmo
xHJw/EdV+VLlkvQS5jnWGWMMWRncB0E2sRYQxUmMMxp6ctoL9tIyST0Kd0UxJYMrizRYLGHD
12ttXxWvaW31i2332sRy6XSk1c7Lom6QWq7ZqbKupncy6dEREREum6mntcg3tKrfgyIdWFo5
p8THdH9LzJjBjE750irvrPUMvYvBYyF5bF4qMZlKd7K2mJyWRiMid5fJ5xVd8ZJs4k0fps8d
YzH35q3cxO/plwT7DJilL1NU45F9eZrUYewkjmd/xwayHBKndJP414u3I3Ha2LkFkebEbslJ
sYQZhR+H7/be9e1qy/HduwJLJUmAVVSsqdlZQlT+RIXhh6ojgaTzY4UmXuE4rTpJWdRTHznV
o8TuZKmHPWao1iMlNmGUqdtOweSSKpT75IqMFPHxPbgjyvxdBq/WQ+j3QGCsmUdiUZPj8OQ8
nb8KARP1rV1SSrSVtdVK1aLGFgDFdF20eJeq5xvkWelsXv7XYU4xvcX5JjdDuy4Z61ymv3Y2
ZdXB7Hi7zLVXlb1T8TscnF6b3oZUPoWCGUxrB+V7/UrdvJuMJSxw69vfrtnXXYww3h8xua6a
ovOZybwAx/S9gqK+sphnOHeC5HJHKHbN0pMzCBgdyZS6RJY9GjQoc1nmklgp0f0HmfRUwVGp
Uj2MTBwgFb+FuFwrDHsjDnFi48z9q1UtVpms1aWrTgViWLKaK6xeJwk+PDXXQSQeDEvSXl5C
cz7DtVOql3rhU/kL1ytYYVS/SFx0qdrw8ZsYdyu8c8PCd+oh2+st+9VLeXF2zfaW0q3LsDAh
gkyJaDwr5cEOxzOCyG2P2XHpnOc5xjPGHSHYZhJN9bBM94achPNJHj3YrY1kcCmqE2RzCZTh
FRJ86tWrVq7LWGFfJ2rGk5aXJ3LSqbqksHxjHedxi7zR3xdOF3yleBk62/pmZmbV4xzLkzJ+
1icDsXtOm1LoS4bOAV2Fwg8Cn0jnJH2uEzp1SSVtPCmXoy1eGvxh6p2jtJkkdHR0dHnvwdGO
9o1ZhzGlNMbWGS1lZE0aUpPWX/2zwrNaSTW0m1M0apmatFGGWCw2jFhpqqx3YqaMS2xqjWxV
hVTQptWKiy25LhswxbhCdBMhMxKpHBgYGTZJJIQhgGUne51o1SfFJ3p1pGSGGECYC42iuKr8
XL1vanpLPdO4IMXuo4OKIo7sTeBpQQUQWUqle6hhCTMIEwCTJk7ENEh263T1I8V5zbCTVJAg
iEE3d3Vd2hfB4vRU0mQhy3wbVlvrnli45WWkSy3j3SS5RMsyCpTAmsaNUZTCgZJUMFIVtJEo
TnVxbDXFxDRcCOEXXbrJXi/A4WYed+aziH52XpQjr23LBOjFwTsR14CY4Wqkrt33bKZUZnDs
HWVYSMs5j4q14XVTEMCMJiyS0kqlmDkTRCVU9GExWKtkWUH1POp4vXQviFyqvXVUxjrUm7kp
EjrIfskKnmbo7lOxQysYLyTB8DMPSLl2qWUxLLuryTJjVHqR7PHY8MtnWeEoxyKdhlC75Fzn
pLgK8T1SrjcrHAwtGV4JlVO8xQ8mMpky7PPwZd+LwG5aYYxSzEwxJuxqUGINnhvSaV5dulU4
xMsWIWJYJpcScGGeEG7a5KVxNq9yXRxuQnA7Pe3llfDfFRqSpKSyaijGVmGZMYtKrzi3brY7
Y9JbyUyXMeCsCGqhZDRxCbjkIm1ZRS/IdiL1VD+LPXk6vbxNR6HN3MOh1iHq3W7zj/eMYrNR
tg6EqKqqb6J3TjGeUeKvCSJqhp4oZon6mSTry0csonETklwa02VNcf074XtXqbbaS9pKa4RE
ozGYYygwWaqpowS4TY6bTvudx4lo6Z6RjY0otKX0UZPnFxKr3uuXa2dsRfDo5l6dV0UHfMZZ
dZa3LX5rr43lbvWuWjUVGTWYzJMxZizFDTDPCpfWkXLEhNju2YVor5G6t3d+ueNeLDjpkwf5
/6uZsqWZJTfhrsY6tPpe50/2/7v7+PWORKYdU5PdDJ7/R2ZbuDWduESH3Uvhh6JTgnFlrSJp
05Nm0plq2CZMLGhJsR4qqqqSas3o+ujokyxou8o4qzvoGWYSYbYTJ0VoKNWDWpk/2E/eEAzn
ydOB2PYepxV0OcRXeOJ1wDPgCj6iqHZPjCJqmhaW1G7Ex5OTLQiVCyDwbtGiMJRNmxht8b+f
beLXTGs6dfgC2RFOQQRMYRBOGgdHHdh0V8a9mIQ4JHTDmBiQxZBRwcUYHsgo4MQ4yIM7DGEJ
IuwokyPhtytpk3hS4zMMM+3UYXRzh2RPBUh30XJdumzTdpsTSySQkh56FOENOaLiXZt2F2bu
wUaJIQ8pnZtOjnCnbz7nOx0Jqm9OeguIQcNddu/j04+U5lpjtWJaSLC3sWLBiwZYphhyMFZR
MpMSmJkkwjVhlgy2mk1YNYGjlUNNGDLEy2hWkaimIqKxbDBFlkUpvqSjmn2EpzO6kw5sLzOn
LG/N2CdrlwhcfXU/UuwVoU4I7POyX05mZjDC8qJ4InciRmTZqYRSnwKalUpVJksmFI6UR3TQ
JNervidSJVs7tVNjELe31q1qaGrNEPqYNJ7353jppo6rIGzEJqa1pWa1OSzrZdsstVLdZYkT
Nj+k5sWQWZPR7VS8BW8dGTibWQv5BjzDicLavhKUyiiKIoiiJVpatVRVWr2HwwelPbDCHunA
9y2vyKLudilWOw3jY8iTV01NrOFj+Ckzx6vHYGsPUkJ4QqvJ71FiixK54GZAxhzWVnmnKI7/
ljjtCyS8JZjMZlGWJK1M/s1XaMVQ7zK+8lMH9eCtlDAxAxDjMFePO9a8O+sT6Y9P5XP2SXNF
pdWPHNHGppVsBjmeFxfQmi0blSUptN8Gvp204R7og1E3h68XlZYLDMRimtHTrJdbxt7+InJN
M2F/AaKraq8Dq0sTRoMXY3cVs3qlvi1FtovoxbYawTMswEt2PK7Ti1El5bG6yfo7ml4lYay4
lOHM2Tcw7GRpl0JcBT1nv4x3I3YMY+kw1MXJvtVVdPTp3+03jO6MfEJ+W+chLJOxU8lnOofx
vzbJK5Rhtek/yfWJsk9hjkxZi9hsakNJl8RjzOgo2J5JTdyJFNz8Y1ETBls6PWlqLKzDQVBU
lihY3WIPES0SnjbbY3PN6vN7nVokfDLtufOaslRRRUlEp73fXyTyaqww1IbGYkjg8mjV1XJg
0tqqxPvVsOZ13cXRjGnBXRcLXBTpowYrVXB034fRyx7xSlFHRwdjotLE49jTd9y4Fsx1VWjd
dHQyE1Q0MQkzkd8xyatdU1NX2tcsieGU6ccOBg4pOSxOjUwMZYTFunfXLK705vL2pEQ1dVm7
GRkERH1DOju7DFjhHxzra9ZxIacNLkmmQ00dIFg06u9dQgxJFmGiXGRxHVrvisjs8srRA7JS
rCxHLt488h7Z3NKWZBWXduzd2m5JkkmGmDdNNKbhu7um7u6Egnd8punRM3pMbNGWWrOzSaNZ
crLcrmccAiZ1I3MuAnMow4OA4Z1i6fWSNITNDgbLWJFmSDs7vPdcX9iMet70TrXaW7wWJJcL
i0YTGGMVjKUYqcDDkjCm7MbTRtHXDKmU9vzejJJJMMgS+FdVerV8artoqY6MQjAsr64jDRhG
pUjBcpLgYi20hRgNRsROQlPBVOClpxEtOmNymJgxhjk0sC2Kb9W8+nNTzqNDBuLTyYmS02tL
UoqNsxZra3q1UUWCdOw06uxtdTd5Ojd7GzRL0dioqKpaJpUp5RaqadUHiZUVHd4l1qyDIdxJ
JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJLVkqqr9jE9JMxhKi1JCVZeXod
3V2h1CkLGrok0VZXnU/Op/Cpup3xjMmWdYLRiE5xuYXLZuJtPxavNfPNkqTZNk2SpNk3yUlP
d0zmWSz1wj3Ztt/3YxW64tvDv0TpJPjzd7CUxwI75nl7leAuZQ3yexO4e1jvNLcXGG17uuOf
F0JOiYlQ3RxYQ2bBs0tlWGzQrRMVowDEwxpGhoxWSmRjBhS0urJSsJCcRKDxLJJMVati2Vpa
ciYlo00NFcDdd5N0zTMtt1k5OdLToVhVzJjMIifU25deZFxlJuYlhgsxUYphTCqior4Y8XZ1
fZJEk/Vd3QqMVcYN/gczn31HdkeLKsSpyL6pw1naeTmXLhOasp5kizk2LSWxFkpLojrbfkZs
nnm8WKLgXgFckG1LvEbKWrcTKnLahOrZoxx8ne7HF6LFGxuZDVoMHkmrVZbac2skRlrxtsLM
a8FCJUkSzEaT1Zw14XxcsWbNoX0MRfK6c5cu9dzjLa2T1GGxTZG82LdmMXUncMpXjaOa3Yp8
PTe1btXJ5uT2dZ4p/pT9h0EeoJHkjuiOsKiPgpgwYUqVQTU5e2sFNcpvcHZ4cPw42LmRVPHH
9pgrUpUrgMRDBIPGGVQz/U8/83f35ic0t3COs5Sd+Z4ntAzIeTwq2V7ih5VypPzJpYalLNr+
0bE6LEp6kXcQ5y8l32rwLRlawr6hZ9B+NzVtbGVlgf7XFRYkxS1EXLIizyq0wwx5Zae9ruRY
l2u9qxOBltLRqsTkYm0nyR3Obkt+zSxGqTiUuhkj62T5J95YLUush/oexOz3PW00k8Ni3jkn
IxWGHup9ZMoexbJuYaSuNlS19WLmdhTjcN2li8p8KdHRzciexlxyq92GEDxD5WCG5enyk1Eh
Bgmo5JMhLblhifRIF7uYkz0akSORgj1Q7zR2I4pfWTBzTSYLSwnXZssWE0wvYxdq4tNIbxyY
VaIQ/OhDFyZZshLHKfDPVx7pinOc5znOaQZLQ219bxYsJacbxu+t4mGqZve9r3ver1e9jsOY
59LQaNXogeuoiYhqjsUsrrLwvSSNXi6vNTkHVrF2xF3WrFu5uvYS76jMonxlzM7yS/RkTkzJ
EqsLUtblYVbEmU6ucN5rngI2T1h5w6DNg2zHCTq5uLu7vFPhomHIWpg7GD8k1nVe3t25o3Ll
jFYLpp3eV9/412mxpMsqqq1J/MMs1atSYZSlCGhTMK+MxK1NmOxVy1cTjU1R6jBXFYHVei5l
zd7vdCeK32N1fBWWLxTZPqEbvzKQPR6ueY4c2cuTmaqatJ6uQmGw5qYFVJxccIy4klcWzi10
St0qlYc2zLIqdeB0kjQcamTVJmbYrER00uWQZmjr0ypaljxsth1WaQhMTRKTM4TcLolJpRpk
yDDl4dGkozo6KZSZzISNbLdpVGTXLSCEUhJSGlwpbS20spCFIdUEmC5oUhMzAPQ9DmeREfSf
/h7Lbo7XZyviXY7/1ssZ8ZKwZOPG/nWUY8Kl/Z5o4uIYUzIssqrpqxs4RF6TMT5VU1hWIgWK
Rxh6oOiwPIFIf6C/4WzIL5i8Av/F3JFOFCQnkiH5QA==
--------------020804010101020205090300--