ndbcluster
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:8k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/bin/sh
  2. # Copyright (C) 2004 MySQL AB
  3. # For a more info consult the file COPYRIGHT distributed with this file
  4. # This scripts starts the table handler ndbcluster
  5. # configurable parameters, make sure to change in mysqlcluterd as well
  6. port=1186
  7. port_base=2202
  8. fsdir=`pwd`
  9. # end configurable parameters
  10. #BASEDIR is always one above mysql-test directory
  11. CWD=`pwd`
  12. cd ..
  13. BASEDIR=`pwd`
  14. cd $CWD
  15. # Are we using a source or a binary distribution?
  16. if [ -d ../sql ] ; then
  17.    SOURCE_DIST=1
  18.    ndbtop=$BASEDIR/ndb
  19.    exec_ndb=$ndbtop/src/kernel/ndbd
  20.    exec_mgmtsrvr=$ndbtop/src/mgmsrv/ndb_mgmd
  21.    exec_waiter=$ndbtop/tools/ndb_waiter
  22.    exec_test=$ndbtop/tools/ndb_test_platform
  23.    exec_mgmtclient=$ndbtop/src/mgmclient/ndb_mgm
  24. else
  25.    BINARY_DIST=1
  26.    if test -x "$BASEDIR/libexec/ndbd"
  27.    then
  28.      exec_ndb=$BASEDIR/libexec/ndbd
  29.      exec_mgmtsrvr=$BASEDIR/libexec/ndb_mgmd
  30.    else
  31.      exec_ndb=$BASEDIR/bin/ndbd
  32.      exec_mgmtsrvr=$BASEDIR/bin/ndb_mgmd
  33.    fi
  34.    exec_waiter=$BASEDIR/bin/ndb_waiter
  35.    exec_test=$BASEDIR/bin/ndb_test_platform
  36.    exec_mgmtclient=$BASEDIR/bin/ndb_mgm
  37. fi
  38. if $exec_test ; then :; else
  39.   echo "ndb not correctly compiled to support this platform"
  40.   exit 1
  41. fi
  42. pidfile=ndbcluster.pid
  43. cfgfile=Ndb.cfg
  44. test_ndb=
  45. stop_ndb=
  46. initial_ndb=
  47. status_ndb=
  48. ndb_diskless=0
  49. ndb_no_ord=512
  50. ndb_con_op=105000
  51. ndb_dmem=80M
  52. ndb_imem=24M
  53. NDB_MGM_EXTRA_OPTS=
  54. NDB_MGMD_EXTRA_OPTS=
  55. NDBD_EXTRA_OPTS=
  56. while test $# -gt 0; do
  57.   case "$1" in
  58.     --test)
  59.      test_ndb=1
  60.      ;;
  61.     --stop)
  62.      stop_ndb=1
  63.      ;;
  64.     --initial)
  65.      flags_ndb="$flags_ndb --initial"
  66.      initial_ndb=1
  67.      ;;
  68.     --debug*)
  69.      flags_ndb="$flags_ndb $1"
  70.      ;;
  71.     --status)
  72.      status_ndb=1
  73.      ;;
  74.     --small)
  75.      ndb_no_ord=128
  76.      ndb_con_op=10000
  77.      ndb_dmem=40M
  78.      ndb_imem=12M
  79.      ;;
  80.     --diskless)
  81.      ndb_diskless=1
  82.      ;;
  83.     --data-dir=*)
  84.      fsdir=`echo "$1" | sed -e "s;--data-dir=;;"`
  85.      ;;
  86.     --port=*)
  87.      port=`echo "$1" | sed -e "s;--port=;;"`
  88.      ;;
  89.     --port-base=*)
  90.      port_base=`echo "$1" | sed -e "s;--port-base=;;"`
  91.      ;;
  92.     --ndb_mgm-extra-opts=*)
  93.      NDB_MGM_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgm-extra-opts=;;"`
  94.      ;;
  95.     --ndb_mgmd-extra-opts=*)
  96.      NDB_MGMD_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgmd-extra-opts=;;"`
  97.      ;;
  98.     --ndbd-extra-opts=*)
  99.      NDBD_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndbd-extra-opts=;;"`
  100.      ;;
  101.     -- )  shift; break ;;
  102.     --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
  103.     * ) break ;;
  104.   esac
  105.   shift
  106. done
  107. fs_ndb="$fsdir/ndbcluster-$port"
  108. NDB_HOME=
  109. if [ ! -x "$fsdir" ]; then
  110.   echo "$fsdir missing"
  111.   exit 1
  112. fi
  113. if [ ! -x "$exec_ndb" ]; then
  114.   echo "$exec_ndb missing"
  115.   exit 1
  116. fi
  117. if [ ! -x "$exec_mgmtsrvr" ]; then
  118.   echo "$exec_mgmtsrvr missing"
  119.   exit 1
  120. fi
  121. if [ ! -x "$exec_waiter" ]; then
  122.   echo "$exec_waiter missing"
  123.   exit 1
  124. fi
  125. exec_mgmtclient="$exec_mgmtclient --no-defaults $NDB_MGM_EXTRA_OPTS"
  126. exec_mgmtsrvr="$exec_mgmtsrvr --no-defaults $NDB_MGMD_EXTRA_OPTS"
  127. exec_ndb="$exec_ndb --no-defaults $NDBD_EXTRA_OPTS"
  128. exec_waiter="$exec_waiter --no-defaults"
  129. ndb_host="localhost"
  130. ndb_mgmd_port=$port
  131. NDB_CONNECTSTRING="host=$ndb_host:$ndb_mgmd_port"
  132. export NDB_CONNECTSTRING
  133. sleep_until_file_created () {
  134.   file=$1
  135.   loop=$2
  136.   org_time=$2
  137.   message=$3
  138.   while (test $loop -gt 0)
  139.   do
  140.     if [ -r $file ]
  141.     then
  142.       return 0
  143.     fi
  144.     sleep 1
  145.     loop=`expr $loop - 1`
  146.   done
  147.   if [ $message ]
  148.   then
  149.     echo $message
  150.   fi
  151.   echo "ERROR: $file was not created in $org_time seconds;  Aborting"
  152.   return 1;
  153. }
  154. start_default_ndbcluster() {
  155. # do some checks
  156. if [ "$initial_ndb" ] ; then
  157.   [ -d "$fs_ndb" ] || mkdir "$fs_ndb"
  158. fi
  159. if [ -d "$fs_ndb" ]; then :; else
  160.   echo "$fs_ndb filesystem directory does not exist"
  161.   exit 1
  162. fi
  163. # Start management server as deamon
  164. # Edit file system path and ports in config file
  165. if [ $initial_ndb ] ; then
  166.   rm -f $fs_ndb/ndb_* 2>&1 | cat > /dev/null
  167.   sed 
  168.     -e s,"CHOOSE_MaxNoOfOrderedIndexes","$ndb_no_ord",g 
  169.     -e s,"CHOOSE_MaxNoOfConcurrentOperations","$ndb_con_op",g 
  170.     -e s,"CHOOSE_DataMemory","$ndb_dmem",g 
  171.     -e s,"CHOOSE_IndexMemory","$ndb_imem",g 
  172.     -e s,"CHOOSE_Diskless","$ndb_diskless",g 
  173.     -e s,"CHOOSE_HOSTNAME_".*,"$ndb_host",g 
  174.     -e s,"CHOOSE_FILESYSTEM","$fs_ndb",g 
  175.     -e s,"CHOOSE_PORT_MGM","$ndb_mgmd_port",g 
  176.     -e s,"CHOOSE_PORT_TRANSPORTER","$port_base",g 
  177.     < ndb/ndb_config_2_node.ini 
  178.     > "$fs_ndb/config.ini"
  179. fi
  180. rm -f "$cfgfile" 2>&1 | cat > /dev/null
  181. rm -f "$fs_ndb/$cfgfile" 2>&1 | cat > /dev/null
  182. if ( cd "$fs_ndb" ; $exec_mgmtsrvr -f config.ini ) ; then :; else
  183.   echo "Unable to start $exec_mgmtsrvr from `pwd`"
  184.   exit 1
  185. fi
  186. if sleep_until_file_created $fs_ndb/ndb_3.pid 120
  187. then :; else
  188.   exit 1
  189. fi
  190. cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
  191. # Start database node 
  192. echo "Starting ndbd"
  193. ( cd "$fs_ndb" ; $exec_ndb $flags_ndb & )
  194. if sleep_until_file_created $fs_ndb/ndb_1.pid 120
  195. then :; else
  196.   stop_default_ndbcluster
  197.   exit 1
  198. fi
  199. cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
  200. # Start database node 
  201. echo "Starting ndbd"
  202. ( cd "$fs_ndb" ; $exec_ndb $flags_ndb & )
  203. if sleep_until_file_created $fs_ndb/ndb_2.pid 120
  204. then :; else
  205.   stop_default_ndbcluster
  206.   exit 1
  207. fi
  208. cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
  209. # test if Ndb Cluster starts properly
  210. echo "Waiting for started..."
  211. if ( $exec_waiter ) | grep "NDBT_ProgramExit: 0 - OK"; then :; else
  212.   echo "Ndbcluster startup failed"
  213.   stop_default_ndbcluster
  214.   exit 1
  215. fi
  216. cat `find "$fs_ndb" -name 'ndb_*.pid'` > $fs_ndb/$pidfile
  217. status_ndbcluster
  218. }
  219. status_ndbcluster() {
  220.   # Start management client
  221.   $exec_mgmtclient -e show
  222. }
  223. stop_default_ndbcluster() {
  224. # Start management client
  225. exec_mgmtclient="$exec_mgmtclient --try-reconnect=1"
  226. $exec_mgmtclient -e shutdown 2>&1 | cat > /dev/null
  227. if [ -f "$fs_ndb/$pidfile" ] ; then
  228.   kill_pids=`cat "$fs_ndb/$pidfile"`
  229.   attempt=0
  230.   while [ $attempt -lt 10 ] ; do
  231.     new_kill_pid=""
  232.     kill_pids2=""
  233.     for p in $kill_pids ; do
  234.       kill -0 $p 2> /dev/null
  235.       if [ $? -eq 0 ] ; then
  236.         new_kill_pid="$p $new_kill_pid"
  237.         kill_pids2="-$p $kill_pids2"
  238.       fi
  239.     done
  240.     kill_pids=$new_kill_pid
  241.     if [ -z "$kill_pids" ] ; then
  242.       break
  243.     fi
  244.     sleep 1
  245.     attempt=`expr $attempt + 1`
  246.   done
  247.   if [ "$kill_pids2" != "" ] ; then
  248.     echo "Failed to shutdown ndbcluster, executing kill "$kill_pids2
  249.     kill          -9 -- $kill_pids2 2> /dev/null
  250.     /bin/kill     -9 -- $kill_pids2 2> /dev/null
  251.     /usr/bin/kill -9 -- $kill_pids2 2> /dev/null
  252.     kill          -9    $kill_pids2 2> /dev/null
  253.     /bin/kill     -9    $kill_pids2 2> /dev/null
  254.     /usr/bin/kill -9    $kill_pids2 2> /dev/null
  255.   fi
  256.   rm "$fs_ndb/$pidfile"
  257. fi
  258. }
  259. initialize_ndb_test ()
  260. {
  261.   fs_result=$fs_ndb/r
  262.   rm -rf $fs_result
  263.   mkdir $fs_result
  264.   echo ------------------
  265.   echo starting ndb tests
  266.   echo ------------------
  267. }
  268. do_ndb_test ()
  269. {
  270.   test_name=$1
  271.   clusterlog=$fs_ndb/ndb_3_cluster.log
  272.   test_log_result=$fs_result/${test_name}_log.result
  273.   test_log_reject=$fs_result/${test_name}_log.reject
  274.   test_result=$fs_result/${test_name}.result
  275.   test_reject=$fs_result/${test_name}.reject
  276.   clean_log='s/.*[MgmSrvr]//'
  277.   cat $clusterlog ndb/${test_name}_log.result | sed -e $clean_log > $test_log_result
  278.   cp ndb/${test_name}.result $test_result
  279.   cat ndb/${test_name}.test | $exec_mgmtclient > $test_reject
  280.   cat $clusterlog | sed -e $clean_log > $test_log_reject
  281.   t="pass"
  282.   diff -C 5 $test_result $test_reject || t="fail"
  283.   printf "ndb_mgm output    %20s [%s]n" $test_name $t
  284.   t="pass"
  285.   diff -C 5 $test_log_result $test_log_reject || t="fail"
  286.   printf "clusterlog output %20s [%s]n" $test_name $t
  287. }
  288. if [ $status_ndb ] ; then
  289.   status_ndbcluster
  290.   exit 0
  291. fi
  292. if [ $stop_ndb ] ; then
  293.   stop_default_ndbcluster
  294. else
  295.   start_default_ndbcluster
  296. fi
  297. if [ $test_ndb ] ; then
  298.   initialize_ndb_test
  299.   all_tests=`ls ndb/*.test | sed "s#ndb/##" | sed "s#.test##"`  
  300.   for a in $all_tests ; do
  301.     do_ndb_test $a
  302.   done
  303.   echo ------------------
  304.   echo shutting down cluster
  305.   stop_default_ndbcluster
  306. fi
  307. exit 0