ndbcluster.sh 7.44 KB
Newer Older
unknown's avatar
unknown committed
1 2 3 4 5 6 7
#!/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
8 9
port=@ndb_port@
port_base=@ndb_port_base@
unknown's avatar
unknown committed
10 11 12
fsdir=`pwd`
# end configurable parameters

13 14 15 16 17
#BASEDIR is always one above mysql-test directory
CWD=`pwd`
cd ..
BASEDIR=`pwd`
cd $CWD
18

19
# Are we using a source or a binary distribution?
20 21
if [ -d ../sql ] ; then
   SOURCE_DIST=1
22
   ndbtop=$BASEDIR/ndb
unknown's avatar
unknown committed
23
   exec_ndb=$ndbtop/src/kernel/ndbd
24
   exec_mgmtsrvr=$ndbtop/src/mgmsrv/ndb_mgmd
unknown's avatar
unknown committed
25
   exec_waiter=$ndbtop/tools/ndb_waiter
unknown's avatar
unknown committed
26
   exec_test=$ndbtop/tools/ndb_test_platform
unknown's avatar
unknown committed
27
   exec_mgmtclient=$ndbtop/src/mgmclient/ndb_mgm
28 29
else
   BINARY_DIST=1
30
   if test -x "$BASEDIR/libexec/ndbd"
31
   then
32 33
     exec_ndb=$BASEDIR/libexec/ndbd
     exec_mgmtsrvr=$BASEDIR/libexec/ndb_mgmd
34
   else
35 36
     exec_ndb=$BASEDIR/bin/ndbd
     exec_mgmtsrvr=$BASEDIR/bin/ndb_mgmd
37 38
   fi
   exec_waiter=$BASEDIR/bin/ndb_waiter
unknown's avatar
unknown committed
39
   exec_test=$BASEDIR/bin/ndb_test_platform
unknown's avatar
unknown committed
40
   exec_mgmtclient=$BASEDIR/bin/ndb_mgm
41
fi
unknown's avatar
unknown committed
42

unknown's avatar
unknown committed
43 44 45 46 47
if $exec_test ; then :; else
  echo "ndb not correctly compiled to support this platform"
  exit 1
fi

unknown's avatar
unknown committed
48
pidfile=ndbcluster.pid
49
cfgfile=Ndb.cfg
unknown's avatar
unknown committed
50
test_ndb=
51 52
stop_ndb=
initial_ndb=
53
status_ndb=
unknown's avatar
unknown committed
54
ndb_diskless=0
55

56
ndb_no_ord=512
57
ndb_con_op=105000
58 59
ndb_dmem=80M
ndb_imem=24M
unknown's avatar
unknown committed
60 61 62

while test $# -gt 0; do
  case "$1" in
unknown's avatar
unknown committed
63 64 65
    --test)
     test_ndb=1
     ;;
66 67 68
    --stop)
     stop_ndb=1
     ;;
unknown's avatar
unknown committed
69
    --initial)
unknown's avatar
unknown committed
70
     flags_ndb="$flags_ndb --initial"
unknown's avatar
unknown committed
71 72
     initial_ndb=1
     ;;
unknown's avatar
unknown committed
73
    --debug*)
unknown's avatar
unknown committed
74
     flags_ndb="$flags_ndb $1"
unknown's avatar
unknown committed
75
     ;;
76 77 78 79
    --status)
     status_ndb=1
     ;;
    --small)
80
     ndb_no_ord=128
81 82 83 84
     ndb_con_op=10000
     ndb_dmem=40M
     ndb_imem=12M
     ;;
unknown's avatar
unknown committed
85 86
    --diskless)
     ndb_diskless=1
87
     ;;
unknown's avatar
unknown committed
88 89 90
    --data-dir=*)
     fsdir=`echo "$1" | sed -e "s;--data-dir=;;"`
     ;;
91 92 93
    --port=*)
     port=`echo "$1" | sed -e "s;--port=;;"`
     ;;
unknown's avatar
unknown committed
94 95 96 97 98 99 100 101 102 103
    --port-base=*)
     port_base=`echo "$1" | sed -e "s;--port-base=;;"`
     ;;
    -- )  shift; break ;;
    --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
    * ) break ;;
  esac
  shift
done

104
fs_ndb="$fsdir/ndbcluster-$port"
unknown's avatar
unknown committed
105 106

NDB_HOME=
107
if [ ! -x "$fsdir" ]; then
unknown's avatar
unknown committed
108 109 110
  echo "$fsdir missing"
  exit 1
fi
111
if [ ! -x "$exec_ndb" ]; then
unknown's avatar
unknown committed
112 113 114
  echo "$exec_ndb missing"
  exit 1
fi
115
if [ ! -x "$exec_mgmtsrvr" ]; then
unknown's avatar
unknown committed
116 117 118
  echo "$exec_mgmtsrvr missing"
  exit 1
fi
119 120 121 122 123 124 125 126 127
if [ ! -x "$exec_waiter" ]; then
  echo "$exec_waiter missing"
  exit 1
fi

exec_mgmtclient="$exec_mgmtclient --no-defaults"
exec_mgmtsrvr="$exec_mgmtsrvr --no-defaults"
exec_ndb="$exec_ndb --no-defaults"
exec_waiter="$exec_waiter --no-defaults"
unknown's avatar
unknown committed
128

129
ndb_host="localhost"
130
ndb_mgmd_port=$port
unknown's avatar
unknown committed
131 132
NDB_CONNECTSTRING="host=$ndb_host:$ndb_mgmd_port"
export NDB_CONNECTSTRING
133

134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
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;
}

unknown's avatar
unknown committed
156 157 158 159
start_default_ndbcluster() {

# do some checks

160 161
if [ "$initial_ndb" ] ; then
  [ -d "$fs_ndb" ] || mkdir "$fs_ndb"
unknown's avatar
unknown committed
162
fi
163
if [ -d "$fs_ndb" ]; then :; else
unknown's avatar
unknown committed
164 165 166 167 168 169 170 171
  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
172
  rm -f $fs_ndb/ndb_*
unknown's avatar
unknown committed
173
sed \
174
    -e s,"CHOOSE_MaxNoOfOrderedIndexes","$ndb_no_ord",g \
175 176 177 178
    -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 \
unknown's avatar
unknown committed
179
    -e s,"CHOOSE_HOSTNAME_".*,"$ndb_host",g \
180 181
    -e s,"CHOOSE_FILESYSTEM","$fs_ndb",g \
    -e s,"CHOOSE_PORT_MGM","$ndb_mgmd_port",g \
182
    -e s,"CHOOSE_PORT_TRANSPORTER","$port_base",g \
unknown's avatar
unknown committed
183
    < ndb/ndb_config_2_node.ini \
184
    > "$fs_ndb/config.ini"
unknown's avatar
unknown committed
185 186
fi

187 188
rm -f "$cfgfile" 2>&1 | cat > /dev/null
rm -f "$fs_ndb/$cfgfile" 2>&1 | cat > /dev/null
189

190
if ( cd "$fs_ndb" ; $exec_mgmtsrvr -f config.ini ) ; then :; else
unknown's avatar
unknown committed
191 192 193
  echo "Unable to start $exec_mgmtsrvr from `pwd`"
  exit 1
fi
unknown's avatar
unknown committed
194
if sleep_until_file_created $fs_ndb/ndb_3.pid 120
195 196 197
then :; else
  exit 1
fi
198
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
unknown's avatar
unknown committed
199 200 201

# Start database node 

202
echo "Starting ndbd"
unknown's avatar
unknown committed
203
( cd "$fs_ndb" ; $exec_ndb $flags_ndb & )
unknown's avatar
unknown committed
204
if sleep_until_file_created $fs_ndb/ndb_1.pid 120
205 206 207 208
then :; else
  stop_default_ndbcluster
  exit 1
fi
209
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
unknown's avatar
unknown committed
210 211 212

# Start database node 

213
echo "Starting ndbd"
unknown's avatar
unknown committed
214
( cd "$fs_ndb" ; $exec_ndb $flags_ndb & )
unknown's avatar
unknown committed
215
if sleep_until_file_created $fs_ndb/ndb_2.pid 120
216 217 218 219
then :; else
  stop_default_ndbcluster
  exit 1
fi
220
cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile"
unknown's avatar
unknown committed
221 222 223

# test if Ndb Cluster starts properly

224
echo "Waiting for started..."
225
if ( $exec_waiter ) | grep "NDBT_ProgramExit: 0 - OK"; then :; else
unknown's avatar
unknown committed
226
  echo "Ndbcluster startup failed"
227
  stop_default_ndbcluster
unknown's avatar
unknown committed
228 229 230
  exit 1
fi

231
cat `find "$fs_ndb" -name 'ndb_*.pid'` > $fs_ndb/$pidfile
232 233 234 235 236

status_ndbcluster
}

status_ndbcluster() {
237
  # Start management client
unknown's avatar
unknown committed
238
  $exec_mgmtclient -e show
unknown's avatar
unknown committed
239 240
}

241 242 243 244
stop_default_ndbcluster() {

# Start management client

245
exec_mgmtclient="$exec_mgmtclient --try-reconnect=1"
246

unknown's avatar
unknown committed
247
$exec_mgmtclient -e shutdown 2>&1 | cat > /dev/null
248

249
if [ -f "$fs_ndb/$pidfile" ] ; then
unknown's avatar
unknown committed
250 251 252 253
  kill_pids=`cat "$fs_ndb/$pidfile"`
  attempt=0
  while [ $attempt -lt 10 ] ; do
    new_kill_pid=""
254
    kill_pids2=""
unknown's avatar
unknown committed
255 256 257 258
    for p in $kill_pids ; do
      kill -0 $p 2> /dev/null
      if [ $? -eq 0 ] ; then
        new_kill_pid="$p $new_kill_pid"
259
        kill_pids2="-$p $kill_pids2"
unknown's avatar
unknown committed
260 261 262
      fi
    done
    kill_pids=$new_kill_pid
unknown's avatar
unknown committed
263
    if [ -z "$kill_pids" ] ; then
unknown's avatar
unknown committed
264 265 266 267 268
      break
    fi
    sleep 1
    attempt=`expr $attempt + 1`
  done
269
  if [ "$kill_pids2" != "" ] ; then
270 271 272 273 274 275 276
    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
unknown's avatar
unknown committed
277
  fi
278
  rm "$fs_ndb/$pidfile"
279 280 281
fi
}

unknown's avatar
unknown committed
282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302
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

unknown's avatar
unknown committed
303 304 305
  clean_log='s/.*\[MgmSrvr\]//'

  cat $clusterlog ndb/${test_name}_log.result | sed -e $clean_log > $test_log_result
unknown's avatar
unknown committed
306 307 308 309

  cp ndb/${test_name}.result $test_result

  cat ndb/${test_name}.test | $exec_mgmtclient > $test_reject
unknown's avatar
unknown committed
310 311 312 313
  cat $clusterlog | sed -e $clean_log > $test_log_reject

  t="pass"
  diff -C 5 $test_result $test_reject || t="fail"
unknown's avatar
unknown committed
314
  printf "ndb_mgm output    %20s [%s]\n" $test_name $t
unknown's avatar
unknown committed
315 316
  t="pass"
  diff -C 5 $test_log_result $test_log_reject || t="fail"
unknown's avatar
unknown committed
317 318 319
  printf "clusterlog output %20s [%s]\n" $test_name $t
}

320 321 322 323 324
if [ $status_ndb ] ; then
  status_ndbcluster
  exit 0
fi

325 326 327 328 329
if [ $stop_ndb ] ; then
  stop_default_ndbcluster
else
  start_default_ndbcluster
fi
unknown's avatar
unknown committed
330

unknown's avatar
unknown committed
331 332 333 334 335 336 337 338 339 340 341
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

unknown's avatar
unknown committed
342
exit 0