#!/bin/bash
set -e
function cleanptipc()
{
aas=$(ipcs -s | grep ^0x | awk '{ print $2 }')
aam=$(ipcs -m | grep ^0x | awk '{ print $2 }')
for bb in $aas
do
ipcrm -s $bb
done
for bb in $aam
do
ipcrm -m $bb
done
ipcs
}
function dumpgstack()
{
gtmproc=$(ps -f -u $currentuser | grep gs_gtm | grep tmp_check | grep -v grep | awk '{ print $2 }')
gaussdbproc=$(ps -f -u $currentuser | grep gaussdb | grep tmp_check | grep -v grep | awk '{ print $2 }')
DT=$(date +%F_%T | sed 's/-//g' | sed 's/://g')
ps -ef | grep ^$currentuser | grep -P "(gs_gtm|gaussdb)" > $logloc/allstack$DT
gstack $gtmproc >> allstack$DT
for bb in $gaussdbproc
do
gstack $bb >> $logloc/allstack$DT
done
}
typeset -i waitcount=20
typeset -i runningproc=1
typeset -i count=0
typeset -i totalcount=0
typeset -i killflag=0
currentuser=$(whoami)
startts=$(date +%F_%T | sed 's/-//g' | sed 's/://g')
logloc=$PWD/loopTest.log
logfile=$PWD/loopTest.log/loopTest$startts
mkdir -p $PWD/loopTest.log
cleanptipc
if [ -f $logloc ]
then
rm -f $logloc
fi
while [ 1 ]
do
count=0
runningproc=1
totalcount=${totalcount}+1
echo "test started at $(date +%F:%T)" >> $logfile
make fastcheck p=12121 &
sleep 300
while [ $runningproc -gt 0 ]
do
runningproc=$(ps -f -u $currentuser | grep tmp_check | grep gaussdb | grep -v grep | wc -l)
echo $count
if [ $count -gt $waitcount ]
then
dumpgstack
echo "***** Test $totalcount has been killed at $(date +%F:%T)" >> $logfile
echo ""
killall -9 gaussdb gs_gtm pg_regress
killflag=1
sleep 30
runningproc=$(ps -f -u $currentuser | grep tmp_check | grep gaussdb | grep -v grep | wc -l)
else
sleep 10
count=${count}+1
fi
done
if [ $killflag -ne 0 ]
then
killflag=0
else
echo "Test $totalcount finished at $(date +%F:%T)" >> $logfile
echo ""
fi
sleep 3
done