#! /bin/sh
msg()
{
echo "========"
echo "======== $1"
echo "========"
}
func_clean()
{
rm -rf run
}
func_ubbinit()
{
MACHINE_NAME=`uname -n`
cat > $RUN/config/ubb.cfg << END_OF_UBB_FILE
*RESOURCES
IPCKEY 200103
DOMAINID domain3
MASTER cluster3
MAXACCESSERS 10
MAXSERVERS 5
MAXSERVICES 10
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="$RUN/bin"
TUXCONFIG="$TUXCONFIG"
TLOGDEVICE="$TLOGDEVICE"
TUXDIR="$TUXDIR"
$MACHINE_NAME LMID=cluster3
*GROUPS
group_tm LMID=cluster3 GRPNO=1 TMSNAME=DBRM TMSCOUNT=2 OPENINFO="BERKELEY-DB:$RUN/data"
*SERVERS
DEFAULT:
CLOPT="-A"
server1 SRVGRP=group_tm SRVID=1 MAXGEN=3 RESTART=Y
server2 SRVGRP=group_tm SRVID=2 MAXGEN=3 RESTART=Y
*SERVICES
TestTxn1
TestTxn2
END_OF_UBB_FILE
tmloadcf -y $RUN/config/ubb.cfg
}
init_tmadmin()
{
tmadmin << END_OF_TMADMIN
crdl -z $TLOGDEVICE -b 500
crlog -m cluster3
END_OF_TMADMIN
}
run()
{
msg "CLEANING UP FROM THE LAST RUN."
rm -rf run
mkdir -p run/bin run/config run/data
msg "BUILDING THE CONFIGURATION FILE."
func_ubbinit
cd $RUN/bin
COMPILE_FLAGS="$CFLAGS $COMPILE_FLAGS -g -I../../.."
msg "BUILDING CLIENT"
CFLAGS="$COMPILE_FLAGS"; export CFLAGS
buildclient -v -r BERKELEY-DB -o client \
-f ../../src/htimestampxa.c -f ../../src/client.c
test "$?" -eq 0 || {
echo "FAIL: buildclient failed."
exit 1
}
msg "BUILDING SERVER #1"
CFLAGS="$COMPILE_FLAGS -DSERVER1"; export CFLAGS
buildserver -v -r BERKELEY-DB -o server1 \
-s TestTxn1:TestTxn1 \
-f ../../src/htimestampxa.c -f ../../src/server.c
test "$?" -eq 0 || {
echo "FAIL: buildserver failed."
exit 1
}
msg "BUILDING SERVER #2"
CFLAGS="$COMPILE_FLAGS -DSERVER2"; export CFLAGS
buildserver -v -r BERKELEY-DB -o server2 \
-s TestTxn2:TestTxn2 \
-f ../../src/htimestampxa.c -f ../../src/server.c
test "$?" -eq 0 || {
echo "FAIL: buildserver failed."
exit 1
}
msg "BUILDING THE RESOURCE MANAGER."
buildtms -v -o DBRM -r BERKELEY-DB
msg "BUILDING THE LOG DEVICE."
init_tmadmin
msg "BOOTING TUXEDO."
tmboot -y
exitval=0
for i in 10 100 1000; do
msg "RUN THE CLIENT WITH $i TRANSACTIONS."
./client -n $i
test "$?" -ne 0 && {
echo "FAIL: client failed"
exitval=1
break;
}
done
msg "SHUTTING DOWN THE TRANSACTION MANAGER."
echo 'y' | tmshutdown
msg "ULOG FILES:"
cat ULOG*
msg "STDOUT:"
cat stdout
msg "STDERR:"
cat stderr
test -s stderr && {
echo "FAIL: stderr file not empty"
exitval=1
}
msg "RECOVERY:"
../../../db_recover -h ../data -v
test "$?" -ne 0 && {
echo "FAIL: recovery failed"
exitval=1
}
return $exitval
}
test -z "$TUXDIR" && {
echo "FAIL: the TUXDIR environment variable NOT set"
echo \
"FAIL: TUXDIR must be set to the absolute path of the Tuxedo install"
echo "FAIL: immediately above the subdirectories bin, include and lib"
exit 1
}
dlist="include lib"
for i in $dlist; do
test -d $TUXDIR/$i || {
echo "FAIL: check the Tuxedo install"
echo "FAIL: the required directory $TUXDIR/$i does not exist"
exit 1
}
done
flist="bin/buildclient bin/buildserver bin/buildtms bin/tmadmin bin/tmboot
bin/tmloadcf bin/tmshutdown udataobj/RM"
for i in $flist; do
test -f $TUXDIR/$i || {
echo "FAIL: check the Tuxedo install"
echo "FAIL: the required file $TUXDIR/$i does not exist"
exit 1
}
done
msg "Using Tuxedo $TUXDIR installation"
REL=../../dist/RELEASE
test -z "$DB_INSTALL" && test -f $REL && {
. $REL
DB_INSTALL=/usr/local/BerkeleyDB.${DB_VERSION_MAJOR}.${DB_VERSION_MINOR}
export DB_INSTALL
}
if test -f "$DB_INSTALL/lib/libdb.so"; then
msg "Using Berkeley DB $DB_INSTALL/lib/ installation"
else
echo "FAIL: $DB_INSTALL/lib/libdb.so not found"
echo \
"FAIL: DB_INSTALL must be set to the absolute path of the Berkeley DB install"
exit 1
fi
egrep "^BERKELEY-DB:db_xa_switch:" $TUXDIR/udataobj/RM > /dev/null || {
echo "FAIL: $TUXDIR/udataobj/RM does not list DB as one of its RMs"
echo "FAIL: Try adding:"
echo "FAIL: BERKELEY-DB:db_xa_switch:-L\${DB_INSTALL}/lib -ldb"
exit 1
}
RUN=`pwd`/run; export RUN
FIELDTBLS32=datafml.fml; export FIELDTBLS32
FLDTBLDIR32=$RUN/config; export FLDTBLDIR32
TLOGDEVICE=$RUN/data/dlog; export TLOGDEVICE
TUXCONFIG=$RUN/config/tuxconfig;export TUXCONFIG
PATH="$PATH:$RUN/bin:$TUXDIR/bin"
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DB_INSTALL/lib:$TUXDIR/lib;
export LD_LIBRARY_PATH PATH
if test $ case "$1" in
clean) func_clean;;
shutdown) echo 'y' | tmshutdown -w 5;;
*)
echo 'usage: chk.xa [clean | shutdown]'
exit 1;;
esac
else
run if test "$?" -ne 0; then
exit 1
fi
fi
exit 0