#!/bin/sh # NAME # run-test.sh - Run a test program # # SYNOPSIS # setup-test.sh [ -n ] [ -r ] # # DESCRIPTION # run a test # # OPTIONS # # EXAMPLES # # ENVIRONMENT # NDB_PROJ_HOME Home dir for ndb # # FILES # $NDB_PROJ_HOME/lib/funcs.sh shell script functions # # DIAGNOSTICTS # # VERSION # 1.01 # # AUTHOR # Jonas Oreland # # progname=`basename $0` synopsis="setup-test.sh [-x xterm] [ -n ] [ -r ]" : ${NDB_PROJ_HOME:?} # If undefined, exit with error message : ${RUN_NDB_NODE_OPTIONS:=--} # If undef, set to --. Keeps getopts happy. # You may have to experiment a bit # to get quoting right (if you need it). . $NDB_PROJ_HOME/lib/funcs.sh # Load some good stuff # defaults for options related variables # verbose=yes options="" ndb_dir=$NDB_TOP if [ -z "$ndb_dir" ] then ndb_dir=`pwd` fi local_dir=`pwd` own_host=`hostname` uniq_id=$$.$$ _xterm=$XTERM _rlogin="ssh -X" # used if error when parsing the options environment variable # env_opterr="options environment variable: <<$options>>" # Option parsing, for the options variable as well as the command line. # # We want to be able to set options in an environment variable, # as well as on the command line. In order not to have to repeat # the same getopts information twice, we loop two times over the # getopts while loop. The first time, we process options from # the options environment variable, the second time we process # options from the command line. # # The things to change are the actual options and what they do. # # for optstring in "$options" "" # 1. options variable 2. cmd line do while getopts n:r:x: i $optstring # optstring empty => no arg => cmd line do case $i in n) ndb_dir=$OPTARG;; # Ndb dir r) run_dir=$OPTARG;; # Run dir x) _xterm=$OPTARG;; \?) syndie $env_opterr;; # print synopsis and exit esac done [ -n "$optstring" ] && OPTIND=1 # Reset for round 2, cmdline options env_opterr= # Round 2 should not use the value done shift `expr $OPTIND - 1` # --- option parsing done --- ndb_dir=`abspath $ndb_dir` run_dir=`abspath $run_dir` trace "Verifying arguments" if [ ! -d $ndb_dir/bin ] || [ ! -d $ndb_dir/lib ] then msg "Ndb home path seems incorrect either $ndb_dir/bin or $ndb_dir/lib not found" exit 1004 fi ndb_bin=$ndb_dir/bin/ndb mgm_bin=$ndb_dir/bin/mgmtsrvr api_lib=$ndb_dir/lib/libNDB_API.so if [ ! -x $ndb_bin ] then msg "Ndb path seems incorrect ndb binary not found: $ndb_bin" exit 1004 fi if [ ! -x $mgm_bin ] then msg "Ndb path seems incorrect management server binary not found: $mgm_bin" exit 1004 fi init_config=$run_dir/mgm.1/initconfig.txt local_config=$run_dir/mgm.1/localcfg.txt if [ ! -r $init_config ] || [ ! -r $local_config ] then msg "Run path seems incorrect $init_config or $local_config not found" exit 1004 fi trace "Parsing $init_config" awk -f $NDB_PROJ_HOME/bin/parseConfigFile.awk $init_config > /tmp/run-test.$uniq_id . /tmp/run-test.$uniq_id cat /tmp/run-test.$uniq_id rm -f /tmp/run-test.$uniq_id trace "Parsing $local_config" MgmPort=`grep -v "OwnProcessId" $local_config | cut -d " " -f 2` trace "Verifying that mgm port is empty" telnet $mgm_1 $MgmPort > /tmp/mgm_port.$uniq_id 2>&1 <> $HOME/.profile do_xterm "Mmg on $mgm_1" ${_rlogin} $mgm_1 & wait_restore_profile } start_ndb_node(){ node_id=$1 dir=$run_dir/ndb.$1 ndb_host=`eval echo "\$"ndb_$node_id` ndb_host=`fixhost $ndb_host` ndb_fs=`eval echo "\$"ndbfs_$node_id` trace "Starting Ndb node $node_id on $ndb_host" save_profile ( echo "PATH=$ndb_dir/bin:\$PATH" echo "LD_LIBRARY_PATH=$ndb_dir/lib:\$LD_LIBRARY_PATH" echo "mkdir -p $ndb_fs" echo "export PATH LD_LIBRARY_PATH" echo "cd $dir" echo "ulimit -Sc unlimited" echo "mv /tmp/.profile.$uniq_id $HOME/.profile" ) >> $HOME/.profile do_xterm "Ndb: $node_id on $ndb_host" ${_rlogin} $ndb_host & wait_restore_profile } start_api_node(){ node_id=$1 dir=$run_dir/api.$1 api_host=`eval echo "\$"api_$node_id` api_host=`fixhost $api_host` trace "Starting api node $node_id on $api_host" save_profile ( echo "PATH=$ndb_dir/bin:\$PATH" echo "LD_LIBRARY_PATH=$ndb_dir/lib:\$LD_LIBRARY_PATH" echo "export PATH LD_LIBRARY_PATH NDB_PROJ_HOME" echo "cd $dir" echo "ulimit -Sc unlimited" echo "mv /tmp/.profile.$uniq_id $HOME/.profile" ) >> $HOME/.profile do_xterm "API: $node_id on $api_host" ${_rlogin} $api_host & wait_restore_profile } for_each_ndb_node(){ i=1 j=`expr $mgm_nodes + 1` while [ $i -le $ndb_nodes ] do $* $j j=`expr $j + 1` i=`expr $i + 1` done } for_each_api_node(){ i=1 j=`expr $mgm_nodes + $ndb_nodes + 1` while [ $i -le $api_nodes ] do $* $j j=`expr $j + 1` i=`expr $i + 1` done } start_mgm for_each_ndb_node start_ndb_node for_each_api_node start_api_node exit 0