mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
639c9dbc85
Now NDB is only initialized and started when the tests that are being run will make use of it. The same thing is also done for the slave databases and the instance manager. After review from Magnus: Only take a snapshot of the data directories that are in use. mysql-test/mysql-test-run.pl: Only initialize (and start) NDB, the instance manager, and the slaves when we have tests that require them. Also, only snapshot the data directories that we are going to use. mysql-test/ndb/ndbcluster.sh: Fix text message that has always annoyed me
353 lines
7.8 KiB
Bash
353 lines
7.8 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2004 MySQL AB
|
|
# For a more info consult the file COPYRIGHT distributed with this file
|
|
|
|
# This scripts starts the table handler ndbcluster
|
|
|
|
# configurable parameters, make sure to change in mysqlcluterd as well
|
|
port=@ndb_port@
|
|
fsdir=`pwd`
|
|
# end configurable parameters
|
|
|
|
#BASEDIR is always one above mysql-test directory
|
|
CWD=`pwd`
|
|
cd ..
|
|
BASEDIR=`pwd`
|
|
cd $CWD
|
|
|
|
# Are we using a source or a binary distribution?
|
|
if [ -d ../sql ] ; then
|
|
SOURCE_DIST=1
|
|
ndbtop=$BASEDIR/ndb
|
|
exec_ndb=$ndbtop/src/kernel/ndbd
|
|
exec_mgmtsrvr=$ndbtop/src/mgmsrv/ndb_mgmd
|
|
exec_waiter=$ndbtop/tools/ndb_waiter
|
|
exec_test=$ndbtop/tools/ndb_test_platform
|
|
exec_mgmtclient=$ndbtop/src/mgmclient/ndb_mgm
|
|
else
|
|
BINARY_DIST=1
|
|
if test -x "$BASEDIR/libexec/ndbd"
|
|
then
|
|
exec_ndb=$BASEDIR/libexec/ndbd
|
|
exec_mgmtsrvr=$BASEDIR/libexec/ndb_mgmd
|
|
else
|
|
exec_ndb=$BASEDIR/bin/ndbd
|
|
exec_mgmtsrvr=$BASEDIR/bin/ndb_mgmd
|
|
fi
|
|
exec_waiter=$BASEDIR/bin/ndb_waiter
|
|
exec_test=$BASEDIR/bin/ndb_test_platform
|
|
exec_mgmtclient=$BASEDIR/bin/ndb_mgm
|
|
fi
|
|
|
|
if $exec_test ; then :; else
|
|
echo "ndb not correctly compiled to support this platform"
|
|
exit 1
|
|
fi
|
|
|
|
pidfile=ndbcluster.pid
|
|
cfgfile=Ndb.cfg
|
|
test_ndb=
|
|
stop_ndb=
|
|
initial_ndb=
|
|
status_ndb=
|
|
ndb_diskless=0
|
|
|
|
ndb_no_ord=512
|
|
ndb_con_op=105000
|
|
ndb_dmem=80M
|
|
ndb_imem=24M
|
|
|
|
NDB_MGM_EXTRA_OPTS=
|
|
NDB_MGMD_EXTRA_OPTS=
|
|
NDBD_EXTRA_OPTS=
|
|
|
|
while test $# -gt 0; do
|
|
case "$1" in
|
|
--test)
|
|
test_ndb=1
|
|
;;
|
|
--stop)
|
|
stop_ndb=1
|
|
;;
|
|
--initial)
|
|
flags_ndb="$flags_ndb --initial"
|
|
initial_ndb=1
|
|
;;
|
|
--debug*)
|
|
flags_ndb="$flags_ndb $1"
|
|
;;
|
|
--status)
|
|
status_ndb=1
|
|
;;
|
|
--small)
|
|
ndb_no_ord=128
|
|
ndb_con_op=10000
|
|
ndb_dmem=40M
|
|
ndb_imem=12M
|
|
;;
|
|
--diskless)
|
|
ndb_diskless=1
|
|
;;
|
|
--data-dir=*)
|
|
fsdir=`echo "$1" | sed -e "s;--data-dir=;;"`
|
|
;;
|
|
--port=*)
|
|
port=`echo "$1" | sed -e "s;--port=;;"`
|
|
;;
|
|
--port-base=*)
|
|
$ECHO "--port-base option depricated. Ignored."
|
|
;;
|
|
--ndb_mgm-extra-opts=*)
|
|
NDB_MGM_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgm-extra-opts=;;"`
|
|
;;
|
|
--ndb_mgmd-extra-opts=*)
|
|
NDB_MGMD_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgmd-extra-opts=;;"`
|
|
;;
|
|
--ndbd-extra-opts=*)
|
|
NDBD_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndbd-extra-opts=;;"`
|
|
;;
|
|
-- ) shift; break ;;
|
|
--* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
|
|
* ) break ;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
fs_ndb="$fsdir/ndbcluster-$port"
|
|
|
|
NDB_HOME=
|
|
if [ ! -x "$fsdir" ]; then
|
|
echo "$fsdir missing"
|
|
exit 1
|
|
fi
|
|
if [ ! -x "$exec_ndb" ]; then
|
|
echo "$exec_ndb missing"
|
|
exit 1
|
|
fi
|
|
if [ ! -x "$exec_mgmtsrvr" ]; then
|
|
echo "$exec_mgmtsrvr missing"
|
|
exit 1
|
|
fi
|
|
if [ ! -x "$exec_waiter" ]; then
|
|
echo "$exec_waiter missing"
|
|
exit 1
|
|
fi
|
|
|
|
exec_mgmtclient="$exec_mgmtclient --no-defaults $NDB_MGM_EXTRA_OPTS"
|
|
exec_mgmtsrvr="$exec_mgmtsrvr --no-defaults $NDB_MGMD_EXTRA_OPTS"
|
|
exec_ndb="$exec_ndb --no-defaults $NDBD_EXTRA_OPTS"
|
|
exec_waiter="$exec_waiter --no-defaults"
|
|
|
|
ndb_host="localhost"
|
|
ndb_mgmd_port=$port
|
|
NDB_CONNECTSTRING="host=$ndb_host:$ndb_mgmd_port"
|
|
export NDB_CONNECTSTRING
|
|
|
|
sleep_until_file_created () {
|
|
file=$1
|
|
loop=$2
|
|
org_time=$2
|
|
message=$3
|
|
while (test $loop -gt 0)
|
|
do
|
|
if [ -r $file ]
|
|
then
|
|
return 0
|
|
fi
|
|
sleep 1
|
|
loop=`expr $loop - 1`
|
|
done
|
|
if [ $message ]
|
|
then
|
|
echo $message
|
|
fi
|
|
echo "ERROR: $file was not created in $org_time seconds; Aborting"
|
|
return 1;
|
|
}
|
|
|
|
start_default_ndbcluster() {
|
|
|
|
# do some checks
|
|
|
|
if [ "$initial_ndb" ] ; then
|
|
[ -d "$fs_ndb" ] || mkdir "$fs_ndb"
|
|
fi
|
|
if [ -d "$fs_ndb" ]; then :; else
|
|
echo "$fs_ndb filesystem directory does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
# Start management server as deamon
|
|
|
|
# Edit file system path and ports in config file
|
|
if [ $initial_ndb ] ; then
|
|
rm -f $fs_ndb/ndb_* 2>&1 | cat > /dev/null
|
|
sed \
|
|
-e s,"CHOOSE_MaxNoOfOrderedIndexes","$ndb_no_ord",g \
|
|
-e s,"CHOOSE_MaxNoOfConcurrentOperations","$ndb_con_op",g \
|
|
-e s,"CHOOSE_DataMemory","$ndb_dmem",g \
|
|
-e s,"CHOOSE_IndexMemory","$ndb_imem",g \
|
|
-e s,"CHOOSE_Diskless","$ndb_diskless",g \
|
|
-e s,"CHOOSE_HOSTNAME_".*,"$ndb_host",g \
|
|
-e s,"CHOOSE_FILESYSTEM","$fs_ndb",g \
|
|
-e s,"CHOOSE_PORT_MGM","$ndb_mgmd_port",g \
|
|
< ndb/ndb_config_2_node.ini \
|
|
> "$fs_ndb/config.ini"
|
|
fi
|
|
|
|
rm -f "$cfgfile" 2>&1 | cat > /dev/null
|
|
rm -f "$fs_ndb/$cfgfile" 2>&1 | cat > /dev/null
|
|
|
|
if ( cd "$fs_ndb" ; $exec_mgmtsrvr -f config.ini ) ; then :; else
|
|
echo "Unable to start $exec_mgmtsrvr from `pwd`"
|
|
exit 1
|
|
fi
|
|
if sleep_until_file_created $fs_ndb/ndb_3.pid 120
|
|
then :; else
|
|
exit 1
|
|
fi
|
|
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
|
|
|
|
# Start database node
|
|
|
|
echo "Starting ndbd"
|
|
( cd "$fs_ndb" ; $exec_ndb $flags_ndb & )
|
|
if sleep_until_file_created $fs_ndb/ndb_1.pid 120
|
|
then :; else
|
|
stop_default_ndbcluster
|
|
exit 1
|
|
fi
|
|
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
|
|
|
|
# Start database node
|
|
|
|
echo "Starting ndbd"
|
|
( cd "$fs_ndb" ; $exec_ndb $flags_ndb & )
|
|
if sleep_until_file_created $fs_ndb/ndb_2.pid 120
|
|
then :; else
|
|
stop_default_ndbcluster
|
|
exit 1
|
|
fi
|
|
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
|
|
|
|
# test if Ndb Cluster starts properly
|
|
|
|
echo "Waiting for NDB data nodes to start..."
|
|
if ( $exec_waiter ) | grep -q "NDBT_ProgramExit: 0 - OK"; then :; else
|
|
echo "Ndbcluster startup failed"
|
|
stop_default_ndbcluster
|
|
exit 1
|
|
fi
|
|
|
|
cat `find "$fs_ndb" -name 'ndb_*.pid'` > $fs_ndb/$pidfile
|
|
|
|
status_ndbcluster
|
|
}
|
|
|
|
status_ndbcluster() {
|
|
# Start management client
|
|
$exec_mgmtclient -e show
|
|
}
|
|
|
|
stop_default_ndbcluster() {
|
|
|
|
# Start management client
|
|
|
|
exec_mgmtclient="$exec_mgmtclient --try-reconnect=1"
|
|
|
|
$exec_mgmtclient -e shutdown 2>&1 | cat > /dev/null
|
|
|
|
if [ -f "$fs_ndb/$pidfile" ] ; then
|
|
kill_pids=`cat "$fs_ndb/$pidfile"`
|
|
attempt=0
|
|
while [ $attempt -lt 10 ] ; do
|
|
new_kill_pid=""
|
|
kill_pids2=""
|
|
for p in $kill_pids ; do
|
|
kill -0 $p 2> /dev/null
|
|
if [ $? -eq 0 ] ; then
|
|
new_kill_pid="$p $new_kill_pid"
|
|
kill_pids2="-$p $kill_pids2"
|
|
fi
|
|
done
|
|
kill_pids=$new_kill_pid
|
|
if [ -z "$kill_pids" ] ; then
|
|
break
|
|
fi
|
|
sleep 1
|
|
attempt=`expr $attempt + 1`
|
|
done
|
|
if [ "$kill_pids2" != "" ] ; then
|
|
echo "Failed to shutdown ndbcluster, executing kill "$kill_pids2
|
|
kill -9 -- $kill_pids2 2> /dev/null
|
|
/bin/kill -9 -- $kill_pids2 2> /dev/null
|
|
/usr/bin/kill -9 -- $kill_pids2 2> /dev/null
|
|
kill -9 $kill_pids2 2> /dev/null
|
|
/bin/kill -9 $kill_pids2 2> /dev/null
|
|
/usr/bin/kill -9 $kill_pids2 2> /dev/null
|
|
fi
|
|
rm "$fs_ndb/$pidfile"
|
|
fi
|
|
}
|
|
|
|
initialize_ndb_test ()
|
|
{
|
|
fs_result=$fs_ndb/r
|
|
rm -rf $fs_result
|
|
mkdir $fs_result
|
|
echo ------------------
|
|
echo starting ndb tests
|
|
echo ------------------
|
|
}
|
|
|
|
do_ndb_test ()
|
|
{
|
|
test_name=$1
|
|
|
|
clusterlog=$fs_ndb/ndb_3_cluster.log
|
|
|
|
test_log_result=$fs_result/${test_name}_log.result
|
|
test_log_reject=$fs_result/${test_name}_log.reject
|
|
test_result=$fs_result/${test_name}.result
|
|
test_reject=$fs_result/${test_name}.reject
|
|
|
|
clean_log='s/.*\[MgmSrvr\]//'
|
|
|
|
cat $clusterlog ndb/${test_name}_log.result | sed -e $clean_log > $test_log_result
|
|
|
|
cp ndb/${test_name}.result $test_result
|
|
|
|
cat ndb/${test_name}.test | $exec_mgmtclient > $test_reject
|
|
cat $clusterlog | sed -e $clean_log > $test_log_reject
|
|
|
|
t="pass"
|
|
diff -C 5 $test_result $test_reject || t="fail"
|
|
printf "ndb_mgm output %20s [%s]\n" $test_name $t
|
|
t="pass"
|
|
diff -C 5 $test_log_result $test_log_reject || t="fail"
|
|
printf "clusterlog output %20s [%s]\n" $test_name $t
|
|
}
|
|
|
|
if [ $status_ndb ] ; then
|
|
status_ndbcluster
|
|
exit 0
|
|
fi
|
|
|
|
if [ $stop_ndb ] ; then
|
|
stop_default_ndbcluster
|
|
else
|
|
start_default_ndbcluster
|
|
fi
|
|
|
|
if [ $test_ndb ] ; then
|
|
initialize_ndb_test
|
|
all_tests=`ls ndb/*.test | sed "s#ndb/##" | sed "s#.test##"`
|
|
for a in $all_tests ; do
|
|
do_ndb_test $a
|
|
done
|
|
echo ------------------
|
|
echo shutting down cluster
|
|
stop_default_ndbcluster
|
|
fi
|
|
|
|
exit 0
|