summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authorunknown <mskold@mysql.com>2005-02-23 15:54:22 +0100
committerunknown <mskold@mysql.com>2005-02-23 15:54:22 +0100
commit5a442d6af601492ef26c3dcab03ef46e553ac540 (patch)
tree5c4c73b1e94ee56066c2db7e9cca505a609afabd /ndb
parent9968b41dbfe260fc6890956c233fdf4e5888361a (diff)
parent26c93519a9ab646142ea2eb912ea5c6b45cca057 (diff)
downloadmariadb-git-5a442d6af601492ef26c3dcab03ef46e553ac540.tar.gz
Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.0-ndb
into mysql.com:/usr/local/home/marty/MySQL/test/mysql-5.0-ndb sql/ha_ndbcluster.cc: Auto merged sql/handler.h: Auto merged sql/item.h: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/mysqld.cc: Auto merged sql/set_var.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_select.cc: Auto merged
Diffstat (limited to 'ndb')
-rw-r--r--ndb/include/util/ndb_opts.h21
-rw-r--r--ndb/src/common/logger/LogHandler.cpp4
-rw-r--r--ndb/src/kernel/blocks/dbdict/Dbdict.cpp4
-rw-r--r--ndb/src/kernel/blocks/suma/Suma.cpp40
-rw-r--r--ndb/src/kernel/main.cpp11
-rw-r--r--ndb/src/kernel/vm/Configuration.cpp13
-rw-r--r--ndb/src/kernel/vm/Emulator.cpp18
-rw-r--r--ndb/src/kernel/vm/Emulator.hpp3
-rw-r--r--ndb/src/mgmclient/main.cpp13
-rw-r--r--ndb/src/mgmsrv/main.cpp14
-rw-r--r--ndb/test/ndbapi/testBitfield.cpp30
-rw-r--r--ndb/test/run-test/daily-basic-tests.txt29
-rw-r--r--ndb/test/run-test/daily-devel-tests.txt29
-rw-r--r--ndb/test/run-test/example.conf10
-rwxr-xr-xndb/test/run-test/ndb-autotest.sh228
-rw-r--r--ndb/tools/delete_all.cpp13
-rw-r--r--ndb/tools/desc.cpp13
-rw-r--r--ndb/tools/drop_index.cpp13
-rw-r--r--ndb/tools/drop_tab.cpp13
-rw-r--r--ndb/tools/listTables.cpp13
-rw-r--r--ndb/tools/restore/restore_main.cpp6
-rw-r--r--ndb/tools/select_all.cpp13
-rw-r--r--ndb/tools/select_count.cpp13
-rw-r--r--ndb/tools/waiter.cpp15
24 files changed, 401 insertions, 178 deletions
diff --git a/ndb/include/util/ndb_opts.h b/ndb/include/util/ndb_opts.h
index f2e2566857b..72abd6d5d7a 100644
--- a/ndb/include/util/ndb_opts.h
+++ b/ndb/include/util/ndb_opts.h
@@ -33,7 +33,11 @@ const char *opt_ndb_connectstring= 0;
const char *opt_connect_str= 0;
const char *opt_ndb_mgmd= 0;
char opt_ndb_constrbuf[1024];
-unsigned opt_ndb_constrbuf_len;
+unsigned opt_ndb_constrbuf_len= 0;
+
+#ifndef DBUG_OFF
+const char *opt_debug= 0;
+#endif
#define OPT_NDB_CONNECTSTRING 'c'
@@ -75,7 +79,8 @@ unsigned opt_ndb_constrbuf_len;
#ifndef DBUG_OFF
#define NDB_STD_OPTS(prog_name) \
{ "debug", '#', "Output debug log. Often this is 'd:t:o,filename'.", \
- 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0 }, \
+ (gptr*) &opt_debug, (gptr*) &opt_debug, \
+ 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0 }, \
NDB_STD_OPTS_COMMON
#else
#define NDB_STD_OPTS(prog_name) NDB_STD_OPTS_COMMON
@@ -101,15 +106,21 @@ enum ndb_std_options {
static my_bool
ndb_std_get_one_option(int optid,
const struct my_option *opt __attribute__((unused)),
- const char *argument)
+ char *argument)
{
switch (optid) {
+#ifndef DBUG_OFF
case '#':
- if (argument)
+ if (opt_debug)
{
- DBUG_PUSH(argument);
+ DBUG_PUSH(opt_debug);
+ }
+ else
+ {
+ DBUG_PUSH("d:t");
}
break;
+#endif
case 'V':
ndb_std_print_version();
exit(0);
diff --git a/ndb/src/common/logger/LogHandler.cpp b/ndb/src/common/logger/LogHandler.cpp
index e038b05401e..ec4137297f1 100644
--- a/ndb/src/common/logger/LogHandler.cpp
+++ b/ndb/src/common/logger/LogHandler.cpp
@@ -76,15 +76,15 @@ LogHandler::append_impl(const char* pCategory, Logger::LoggerLevel level,
const char* pMsg)
{
writeHeader(pCategory, level);
- if (m_count_repeated_messages == 0)
+ if (m_count_repeated_messages <= 1)
writeMessage(pMsg);
else
{
BaseString str(pMsg);
str.appfmt(" - Repeated %d times", m_count_repeated_messages);
writeMessage(str.c_str());
- m_count_repeated_messages= 0;
}
+ m_count_repeated_messages= 0;
writeFooter();
}
diff --git a/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
index 6301c95d1e4..5da8a0066f3 100644
--- a/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
+++ b/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
@@ -2245,9 +2245,9 @@ void Dbdict::checkSchemaStatus(Signal* signal)
restartCreateTab(signal, tableId, oldEntry, false);
return;
}//if
- ndbrequire(ok);
- break;
}
+ ndbrequire(ok);
+ break;
}
case SchemaFile::DROP_TABLE_STARTED:
jam();
diff --git a/ndb/src/kernel/blocks/suma/Suma.cpp b/ndb/src/kernel/blocks/suma/Suma.cpp
index 6c7ff89abe2..d982c2b96f8 100644
--- a/ndb/src/kernel/blocks/suma/Suma.cpp
+++ b/ndb/src/kernel/blocks/suma/Suma.cpp
@@ -338,6 +338,7 @@ SumaParticipant::execCONTINUEB(Signal* signal)
void Suma::execAPI_FAILREQ(Signal* signal)
{
jamEntry();
+ DBUG_ENTER("Suma::execAPI_FAILREQ");
Uint32 failedApiNode = signal->theData[0];
//BlockReference retRef = signal->theData[1];
@@ -348,11 +349,13 @@ void Suma::execAPI_FAILREQ(Signal* signal)
jam();
c_failedApiNodes.clear(failedApiNode);
}
+ DBUG_VOID_RETURN;
}//execAPI_FAILREQ()
bool
SumaParticipant::removeSubscribersOnNode(Signal *signal, Uint32 nodeId)
{
+ DBUG_ENTER("SumaParticipant::removeSubscribersOnNode");
bool found = false;
SubscriberPtr i_subbPtr;
@@ -372,20 +375,15 @@ SumaParticipant::removeSubscribersOnNode(Signal *signal, Uint32 nodeId)
jam();
sendSubStopReq(signal);
}
- return found;
+ DBUG_RETURN(found);
}
void
SumaParticipant::sendSubStopReq(Signal *signal){
+ DBUG_ENTER("SumaParticipant::sendSubStopReq");
static bool remove_lock = false;
jam();
- if(remove_lock) {
- jam();
- return;
- }
- remove_lock = true;
-
SubscriberPtr subbPtr;
c_removeDataSubscribers.first(subbPtr);
if (subbPtr.isNull()){
@@ -398,9 +396,15 @@ SumaParticipant::sendSubStopReq(Signal *signal){
c_failedApiNodes.clear();
remove_lock = false;
- return;
+ DBUG_VOID_RETURN;
}
+ if(remove_lock) {
+ jam();
+ DBUG_VOID_RETURN;
+ }
+ remove_lock = true;
+
SubscriptionPtr subPtr;
c_subscriptions.getPtr(subPtr, subbPtr.p->m_subPtrI);
@@ -414,6 +418,7 @@ SumaParticipant::sendSubStopReq(Signal *signal){
req->part = SubscriptionData::TableData;
sendSignal(SUMA_REF, GSN_SUB_STOP_REQ, signal, SubStopReq::SignalLength, JBB);
+ DBUG_VOID_RETURN;
}
void
@@ -452,6 +457,8 @@ SumaParticipant::execSUB_STOP_REF(Signal* signal){
jamEntry();
SubStopRef * const ref = (SubStopRef*)signal->getDataPtr();
+ DBUG_ENTER("SumaParticipant::execSUB_STOP_REF");
+
Uint32 subscriptionId = ref->subscriptionId;
Uint32 subscriptionKey = ref->subscriptionKey;
Uint32 part = ref->part;
@@ -471,11 +478,14 @@ SumaParticipant::execSUB_STOP_REF(Signal* signal){
req->part = part;
sendSignal(SUMA_REF, GSN_SUB_STOP_REQ, signal, SubStopReq::SignalLength, JBB);
+
+ DBUG_VOID_RETURN;
}
void
Suma::execNODE_FAILREP(Signal* signal){
jamEntry();
+ DBUG_ENTER("Suma::execNODE_FAILREP");
NodeFailRep * const rep = (NodeFailRep*)signal->getDataPtr();
@@ -541,6 +551,7 @@ Suma::execNODE_FAILREP(Signal* signal){
c_aliveNodes.clear(nodePtr.p->nodeId); // this has to be done after the loop above
}
}
+ DBUG_VOID_RETURN;
}
void
@@ -1451,7 +1462,7 @@ SumaParticipant::execDIGETPRIMCONF(Signal* signal){
void
SumaParticipant::execCREATE_TRIG_CONF(Signal* signal){
jamEntry();
-
+ DBUG_ENTER("SumaParticipant::execCREATE_TRIG_CONF");
CRASH_INSERTION(13009);
CreateTrigConf * const conf = (CreateTrigConf*)signal->getDataPtr();
@@ -1464,6 +1475,7 @@ SumaParticipant::execCREATE_TRIG_CONF(Signal* signal){
* dodido
* @todo: I (Johan) dont know what to do here. Jonas, what do you mean?
*/
+ DBUG_VOID_RETURN;
}
void
@@ -1475,7 +1487,7 @@ SumaParticipant::execCREATE_TRIG_REF(Signal* signal){
void
SumaParticipant::execDROP_TRIG_CONF(Signal* signal){
jamEntry();
-
+ DBUG_ENTER("SumaParticipant::execDROP_TRIG_CONF");
CRASH_INSERTION(13010);
DropTrigConf * const conf = (DropTrigConf*)signal->getDataPtr();
@@ -1483,17 +1495,19 @@ SumaParticipant::execDROP_TRIG_CONF(Signal* signal){
const Uint32 senderData = conf->getConnectionPtr();
SyncRecord* tmp = c_syncPool.getPtr(senderData);
tmp->runDROP_TRIG_CONF(signal);
+ DBUG_VOID_RETURN;
}
void
SumaParticipant::execDROP_TRIG_REF(Signal* signal){
jamEntry();
-
+ DBUG_ENTER("SumaParticipant::execDROP_TRIG_CONF");
DropTrigRef * const ref = (DropTrigRef*)signal->getDataPtr();
const Uint32 senderData = ref->getConnectionPtr();
SyncRecord* tmp = c_syncPool.getPtr(senderData);
tmp->runDROP_TRIG_CONF(signal);
+ DBUG_VOID_RETURN;
}
/*************************************************************************
@@ -2821,7 +2835,7 @@ SumaParticipant::decideWhoToSend(Uint32 nBucket, Uint32 gci){
void
SumaParticipant::execFIRE_TRIG_ORD(Signal* signal){
jamEntry();
-
+ DBUG_ENTER("SumaParticipant::execFIRE_TRIG_ORD");
CRASH_INSERTION(13016);
FireTrigOrd* const trg = (FireTrigOrd*)signal->getDataPtr();
const Uint32 trigId = trg->getTriggerId();
@@ -2982,6 +2996,8 @@ SumaParticipant::execFIRE_TRIG_ORD(Signal* signal){
*/
f_bufferLock = 0;
b_bufferLock = 0;
+
+ DBUG_VOID_RETURN;
}
void
diff --git a/ndb/src/kernel/main.cpp b/ndb/src/kernel/main.cpp
index 4bc99c61f69..c156a26500c 100644
--- a/ndb/src/kernel/main.cpp
+++ b/ndb/src/kernel/main.cpp
@@ -183,11 +183,9 @@ int main(int argc, char** argv)
assert("Illegal state globalData.theRestartFlag" == 0);
}
- SocketServer socket_server;
-
globalTransporterRegistry.startSending();
globalTransporterRegistry.startReceiving();
- if (!globalTransporterRegistry.start_service(socket_server)){
+ if (!globalTransporterRegistry.start_service(*globalEmulatorData.m_socket_server)){
ndbout_c("globalTransporterRegistry.start_service() failed");
exit(-1);
}
@@ -199,7 +197,7 @@ int main(int argc, char** argv)
globalEmulatorData.theWatchDog->doStart();
- socket_server.startServer();
+ globalEmulatorData.m_socket_server->startServer();
// theConfig->closeConfiguration();
@@ -207,11 +205,6 @@ int main(int argc, char** argv)
NdbShutdown(NST_Normal);
- socket_server.stopServer();
- socket_server.stopSessions();
-
- globalTransporterRegistry.stop_clients();
-
return NRT_Default;
}
diff --git a/ndb/src/kernel/vm/Configuration.cpp b/ndb/src/kernel/vm/Configuration.cpp
index a8b9f64cc7b..3170939f8d8 100644
--- a/ndb/src/kernel/vm/Configuration.cpp
+++ b/ndb/src/kernel/vm/Configuration.cpp
@@ -88,13 +88,6 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt,
- argument ? argument : "d:t:O,/tmp/ndbd.trace");
-}
bool
Configuration::init(int argc, char** argv)
@@ -103,7 +96,11 @@ Configuration::init(int argc, char** argv)
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndbd.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
exit(ho_error);
if (_no_daemon) {
diff --git a/ndb/src/kernel/vm/Emulator.cpp b/ndb/src/kernel/vm/Emulator.cpp
index 068610b6778..d6ed6c0dafd 100644
--- a/ndb/src/kernel/vm/Emulator.cpp
+++ b/ndb/src/kernel/vm/Emulator.cpp
@@ -68,6 +68,7 @@ EmulatorData::EmulatorData(){
theThreadConfig = 0;
theSimBlockList = 0;
theShutdownMutex = 0;
+ m_socket_server = 0;
}
void
@@ -83,6 +84,7 @@ EmulatorData::create(){
theWatchDog = new WatchDog();
theThreadConfig = new ThreadConfig();
theSimBlockList = new SimBlockList();
+ m_socket_server = new SocketServer();
theShutdownMutex = NdbMutex_Create();
@@ -99,7 +101,8 @@ EmulatorData::destroy(){
delete theThreadConfig; theThreadConfig = 0;
if(theSimBlockList)
delete theSimBlockList; theSimBlockList = 0;
-
+ if(m_socket_server)
+ delete m_socket_server; m_socket_server = 0;
NdbMem_Destroy();
}
@@ -195,9 +198,22 @@ NdbShutdown(NdbShutdownType type,
fclose(outputStream);
#endif
+ /**
+ * Stop all transporter connection attempts and accepts
+ */
+ globalEmulatorData.m_socket_server->stopServer();
+ globalEmulatorData.m_socket_server->stopSessions();
+ globalTransporterRegistry.stop_clients();
+
+ /**
+ * Stop transporter communication with other nodes
+ */
globalTransporterRegistry.stopSending();
globalTransporterRegistry.stopReceiving();
+ /**
+ * Remove all transporters
+ */
globalTransporterRegistry.removeAll();
#ifdef VM_TRACE
diff --git a/ndb/src/kernel/vm/Emulator.hpp b/ndb/src/kernel/vm/Emulator.hpp
index b3c64830802..dba8cb3ab9b 100644
--- a/ndb/src/kernel/vm/Emulator.hpp
+++ b/ndb/src/kernel/vm/Emulator.hpp
@@ -55,7 +55,8 @@ struct EmulatorData {
class WatchDog * theWatchDog;
class ThreadConfig * theThreadConfig;
class SimBlockList * theSimBlockList;
-
+ class SocketServer * m_socket_server;
+
/**
* Constructor
*
diff --git a/ndb/src/mgmclient/main.cpp b/ndb/src/mgmclient/main.cpp
index 73f0bad86c0..19c84f6ec8d 100644
--- a/ndb/src/mgmclient/main.cpp
+++ b/ndb/src/mgmclient/main.cpp
@@ -87,13 +87,6 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_mgm.trace");
-}
static int
read_and_execute(int _try_reconnect)
@@ -136,7 +129,11 @@ int main(int argc, char** argv){
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_mgm.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
exit(ho_error);
char buf[MAXHOSTNAMELEN+10];
diff --git a/ndb/src/mgmsrv/main.cpp b/ndb/src/mgmsrv/main.cpp
index cf98fa079e9..3335fdc827c 100644
--- a/ndb/src/mgmsrv/main.cpp
+++ b/ndb/src/mgmsrv/main.cpp
@@ -175,14 +175,6 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_mgmd.trace");
- return 0;
-}
/*
* MAIN
@@ -206,7 +198,11 @@ int main(int argc, char** argv)
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_mgmd.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
exit(ho_error);
if (glob.interactive ||
diff --git a/ndb/test/ndbapi/testBitfield.cpp b/ndb/test/ndbapi/testBitfield.cpp
index 3c8f7d8de4b..e26f495f5a4 100644
--- a/ndb/test/ndbapi/testBitfield.cpp
+++ b/ndb/test/ndbapi/testBitfield.cpp
@@ -5,40 +5,22 @@
#include <NdbApi.hpp>
#include <HugoTransactions.hpp>
-static const char* opt_connect_str= 0;
static const char* _dbname = "TEST_DB";
static int g_loops = 7;
-static void print_version()
-{
- printf("MySQL distrib %s, for %s (%s)\n",
- MYSQL_SERVER_VERSION,SYSTEM_TYPE,MACHINE_TYPE);
-}
static void usage()
{
- char desc[] =
- "tabname\n"\
- "This program list all properties of table(s) in NDB Cluster.\n"\
- " ex: desc T1 T2 T4\n";
- print_version();
+ ndb_std_print_version();
}
+#if 0
static my_bool
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
+ const char *argument)
{
- switch (optid) {
- case '#':
- DBUG_PUSH(argument ? argument : "d:t:O,/tmp/ndb_desc.trace");
- break;
- case 'V':
- print_version();
- exit(0);
- case '?':
- usage();
- exit(0);
- }
- return 0;
+ return ndb_std_get_one_option(optid, opt, argument ? argument :
+ "d:t:O,/tmp/testBitfield.trace");
}
+#endif
static const NdbDictionary::Table* create_random_table(Ndb*);
static int transactions(Ndb*, const NdbDictionary::Table* tab);
diff --git a/ndb/test/run-test/daily-basic-tests.txt b/ndb/test/run-test/daily-basic-tests.txt
index 22322a5e768..8528e709eb3 100644
--- a/ndb/test/run-test/daily-basic-tests.txt
+++ b/ndb/test/run-test/daily-basic-tests.txt
@@ -553,3 +553,32 @@ max-time: 500
cmd: flexHammer
args: -r 5 -t 32
+max-time: 300
+cmd: DbCreate
+args:
+
+max-time: 180
+cmd: DbAsyncGenerator
+args: -time 60 -p 1
+type: bench
+
+max-time: 180
+cmd: DbAsyncGenerator
+args: -time 60 -p 25
+type: bench
+
+max-time: 180
+cmd: DbAsyncGenerator
+args: -time 60 -p 100
+type: bench
+
+max-time: 180
+cmd: DbAsyncGenerator
+args: -time 60 -p 200
+type: bench
+
+max-time: 180
+cmd: DbAsyncGenerator
+args: -time 60 -p 1 -proc 25
+type: bench
+
diff --git a/ndb/test/run-test/daily-devel-tests.txt b/ndb/test/run-test/daily-devel-tests.txt
index 2cdd39ffa4c..5c9b36fb836 100644
--- a/ndb/test/run-test/daily-devel-tests.txt
+++ b/ndb/test/run-test/daily-devel-tests.txt
@@ -204,32 +204,3 @@ max-time: 2500
cmd: test_event
args: -n BasicEventOperation T1 T6
-max-time: 300
-cmd: DbCreate
-args:
-
-max-time: 180
-cmd: DbAsyncGenerator
-args: -time 60 -p 1
-type: bench
-
-max-time: 180
-cmd: DbAsyncGenerator
-args: -time 60 -p 25
-type: bench
-
-max-time: 180
-cmd: DbAsyncGenerator
-args: -time 60 -p 100
-type: bench
-
-max-time: 180
-cmd: DbAsyncGenerator
-args: -time 60 -p 200
-type: bench
-
-max-time: 180
-cmd: DbAsyncGenerator
-args: -time 60 -p 1 -proc 25
-type: bench
-
diff --git a/ndb/test/run-test/example.conf b/ndb/test/run-test/example.conf
new file mode 100644
index 00000000000..1e152da332d
--- /dev/null
+++ b/ndb/test/run-test/example.conf
@@ -0,0 +1,10 @@
+target=pc-linux-i686
+base_dir=/ndb
+src_clone_base=mysqldev@bk-internal.mysql.com:/home/bk/mysql
+run_dir=/space/autotest
+build_dir=/ndb
+hosts="ndb01 ndb02 ndb03 ndb04 ndb05 ndb06 ndb07 ndb08 ndb09 ndb10 ndb11 ndb12"
+result_host="ndb.mysql.com"
+result_path="public_html"
+configure='CC=gcc CXX=gcc CFLAGS="-Wall -pedantic -Wno-long-long" CXXFLAGS="-Wall -pedantic -Wno-long-long" ./configure --with-ndbcluster --with-ndb-test --with-ndbcc-flags="-g -DERROR_INSERT"'
+
diff --git a/ndb/test/run-test/ndb-autotest.sh b/ndb/test/run-test/ndb-autotest.sh
new file mode 100755
index 00000000000..397df97d52f
--- /dev/null
+++ b/ndb/test/run-test/ndb-autotest.sh
@@ -0,0 +1,228 @@
+#!/bin/sh
+
+save_args=$*
+VERSION="ndb-autotest.sh version 1.0"
+
+DATE=`date '+%Y-%m-%d'`
+export DATE
+
+set -e
+ulimit -Sc unlimited
+
+echo "`date` starting: $*"
+
+RSYNC_RSH=ssh
+export RSYNC_RSH
+
+do_clone=yes
+build=yes
+deploy=yes
+
+clone=5.0-ndb
+RUN="daily-basic daily-devel"
+conf=autotest.conf
+
+while [ "$1" ]
+do
+ case "$1" in
+ --no-clone) do_clone="";;
+ --no-build) build="";;
+ --no-deploy) deploy="";;
+ --clone=*) clone=`echo $1 | sed s/--clone=//`;;
+ --conf=*) conf=`echo $1 | sed s/--conf=//`;;
+ --version) echo $VERSION; exit;;
+ *) RUN=$*;;
+ esac
+ shift
+done
+
+if [ -f $conf ]
+then
+ . $conf
+else
+ echo "Can't find config file: $conf"
+ exit
+fi
+
+env
+
+LOCK=$HOME/.autotest-lock
+src_clone=$src_clone_base-$clone
+
+if [ -f $LOCK ]
+then
+ echo "Lock file exists: $LOCK"
+ exit 1
+fi
+
+echo "$DATE $RUN" > $LOCK
+trap "rm -f $LOCK" ERR
+
+dst_place=${build_dir}/clone-mysql-$clone-$DATE
+
+if [ "$do_clone" ]
+then
+ rm -rf $dst_place
+ bk clone $src_clone $dst_place
+fi
+
+if [ "$build" ]
+then
+ cd $dst_place
+ rm -rf $run_dir/*
+ aclocal; autoheader; autoconf; automake
+ (cd innobase; aclocal; autoheader; autoconf; automake)
+ (cd bdb/dist; sh s_all)
+ eval $configure --prefix=$run_dir
+ make
+ make install
+fi
+
+###
+# check script version
+#
+script=$run_dir/mysql-test/ndb/ndb-autotest.sh
+if [ -x $script ]
+then
+ $script --version > /tmp/version.$$
+else
+ echo $VERSION > /tmp/version.$$
+fi
+match=`grep -c "$VERSION" /tmp/version.$$`
+rm -f /tmp/version.$$
+if [ $match -eq 0 ]
+then
+ echo "Incorrect script version...restarting"
+ cp $run_dir/mysql-test/ndb/ndb-autotest.sh /tmp/at.$$.sh
+ rm -rf $run_dir $dst_place
+ sh /tmp/at.$$.sh $save_args
+ exit
+fi
+
+# Check that all interesting files are present
+test_dir=$run_dir/mysql-test/ndb
+atrt=$test_dir/atrt
+html=$test_dir/make-html-reports.sh
+PATH=$test_dir:$PATH
+export PATH
+
+filter(){
+ neg=$1
+ shift
+ while [ $# -gt 0 ]
+ do
+ if [ `grep -c $1 $neg` -eq 0 ] ; then echo $1; fi
+ shift
+ done
+}
+
+###
+# check ndb_cpcc fail hosts
+#
+ndb_cpcc $hosts | awk '{ if($1=="Failed"){ print;}}' > /tmp/failed.$DATE
+filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
+hosts=`cat /tmp/hosts.$DATE`
+
+if [ "$deploy" ]
+then
+ (cd / && tar cfz /tmp/build.$DATE.tgz $run_dir )
+ for i in $hosts
+ do
+ ok=0
+ scp /tmp/build.$DATE.tgz $i:/tmp/build.$DATE.$$.tgz && \
+ ssh $i "rm -rf /space/autotest/*" && \
+ ssh $i "cd / && tar xfz /tmp/build.$DATE.$$.tgz" && \
+ ssh $i "rm /tmp/build.$DATE.$$.tgz" && ok=1
+ if [ $ok -eq 0 ]
+ then
+ echo "$i failed during scp/ssh, excluding"
+ echo $i >> /tmp/failed.$DATE
+ fi
+ done
+fi
+rm -f /tmp/build.$DATE.tgz
+
+###
+# handle scp failed hosts
+#
+filter /tmp/failed.$DATE $hosts > /tmp/hosts.$DATE
+hosts=`cat /tmp/hosts.$DATE`
+cat /tmp/failed.$DATE > /tmp/filter_hosts.$$
+
+###
+# functions for running atrt
+#
+choose(){
+ SRC=$1
+ TMP1=/tmp/choose.$$
+ TMP2=/tmp/choose.$$.$$
+ shift
+
+ cp $SRC $TMP1
+ i=1
+ while [ $# -gt 0 ]
+ do
+ sed -e s,"CHOOSE_host$i",$1,g < $TMP1 > $TMP2
+ mv $TMP2 $TMP1
+ shift
+ i=`expr $i + 1`
+ done
+ cat $TMP1
+ rm -f $TMP1
+}
+start(){
+ rm -rf report.txt result* log.txt
+ $atrt -v -v -r -R --log-file=log.txt --testcase-file=$test_dir/$2-tests.txt &
+ pid=$!
+ echo $pid > run.pid
+ wait $pid
+ rm run.pid
+ [ -f log.txt ] && mv log.txt $3
+ [ -f report.txt ] && mv report.txt $3
+ [ "`find . -name 'result*'`" ] && mv result* $3
+ cd $3
+ sh $html . $1 $DATE
+ cd ..
+ p2=`pwd`
+ cd ..
+ tar cfz /tmp/res.$$.tgz `basename $p2`/$DATE
+ scp /tmp/res.$$.tgz $result_host:$result_path
+ ssh $result_host "cd $result_path && tar xfz res.$$.tgz && rm -f res.$$.tgz"
+ rm -f /tmp/res.$$.tgz
+}
+
+p=`pwd`
+for dir in $RUN
+do
+ echo "Fixing hosts for $dir"
+
+ run_dir=$base_dir/run-$dir-mysql-$clone-$target
+ res_dir=$base_dir/result-$dir-mysql-$clone-$target/$DATE
+
+ mkdir -p $res_dir
+ rm -rf $res_dir/*
+
+ count=`grep -c "COMPUTER" $run_dir/1.ndb_mgmd/initconfig.template`
+ avail_hosts=`filter /tmp/filter_hosts.$$ $hosts`
+ avail=`echo $avail_hosts | wc -w`
+ if [ $count -gt $avail ]
+ then
+ echo "Not enough hosts"
+ echo "Needs: $count available: $avail ($avail_hosts)"
+ break;
+ fi
+
+ run_hosts=`echo $avail_hosts| awk '{for(i=1;i<='$count';i++)print $i;}'`
+ choose $run_dir/d.template $run_hosts > $run_dir/d.txt
+ choose $run_dir/1.ndb_mgmd/initconfig.template $run_hosts > $run_dir/1.ndb_mgmd/config.ini
+ echo $run_hosts >> /tmp/filter_hosts.$$
+
+ cd $run_dir
+ start $dir-mysql-$clone-$target $dir $res_dir &
+done
+cd $p
+rm /tmp/filter_hosts.$$
+
+wait
+
+rm -f $LOCK
diff --git a/ndb/tools/delete_all.cpp b/ndb/tools/delete_all.cpp
index 4a153208c65..2c395a67900 100644
--- a/ndb/tools/delete_all.cpp
+++ b/ndb/tools/delete_all.cpp
@@ -44,20 +44,17 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_delete_all.trace");
-}
int main(int argc, char** argv){
NDB_INIT(argv[0]);
const char *load_default_groups[]= { "mysql_cluster",0 };
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_delete_all.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
return NDBT_ProgramExit(NDBT_WRONGARGS);
Ndb_cluster_connection con(opt_connect_str);
diff --git a/ndb/tools/desc.cpp b/ndb/tools/desc.cpp
index 3bfa332ea79..be0f6942db5 100644
--- a/ndb/tools/desc.cpp
+++ b/ndb/tools/desc.cpp
@@ -44,20 +44,17 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_desc.trace");
-}
int main(int argc, char** argv){
NDB_INIT(argv[0]);
const char *load_default_groups[]= { "mysql_cluster",0 };
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_desc.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
return NDBT_ProgramExit(NDBT_WRONGARGS);
Ndb_cluster_connection con(opt_connect_str);
diff --git a/ndb/tools/drop_index.cpp b/ndb/tools/drop_index.cpp
index 90528a2a5a4..4580d44d121 100644
--- a/ndb/tools/drop_index.cpp
+++ b/ndb/tools/drop_index.cpp
@@ -41,20 +41,17 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_drop_index.trace");
-}
int main(int argc, char** argv){
NDB_INIT(argv[0]);
const char *load_default_groups[]= { "mysql_cluster",0 };
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ "d:t:O,/tmp/ndb_drop_index.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
return NDBT_ProgramExit(NDBT_WRONGARGS);
if (argc < 1) {
usage();
diff --git a/ndb/tools/drop_tab.cpp b/ndb/tools/drop_tab.cpp
index a0a5262bace..7ce2b581ff1 100644
--- a/ndb/tools/drop_tab.cpp
+++ b/ndb/tools/drop_tab.cpp
@@ -41,20 +41,17 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_drop_table.trace");
-}
int main(int argc, char** argv){
NDB_INIT(argv[0]);
const char *load_default_groups[]= { "mysql_cluster",0 };
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ "d:t:O,/tmp/ndb_drop_table.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
return NDBT_ProgramExit(NDBT_WRONGARGS);
if (argc < 1) {
usage();
diff --git a/ndb/tools/listTables.cpp b/ndb/tools/listTables.cpp
index a49fbde596e..b4a2235f73b 100644
--- a/ndb/tools/listTables.cpp
+++ b/ndb/tools/listTables.cpp
@@ -196,13 +196,6 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_show_tables.trace");
-}
int main(int argc, char** argv){
NDB_INIT(argv[0]);
@@ -210,7 +203,11 @@ int main(int argc, char** argv){
const char *load_default_groups[]= { "mysql_cluster",0 };
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_show_tables.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
return NDBT_ProgramExit(NDBT_WRONGARGS);
_tabname = argv[0];
diff --git a/ndb/tools/restore/restore_main.cpp b/ndb/tools/restore/restore_main.cpp
index 326020d7118..93c40d31adb 100644
--- a/ndb/tools/restore/restore_main.cpp
+++ b/ndb/tools/restore/restore_main.cpp
@@ -109,8 +109,10 @@ static my_bool
get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
char *argument)
{
- ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_restore.trace");
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_restore.trace";
+#endif
+ ndb_std_get_one_option(optid, opt, argument);
switch (optid) {
case 'n':
if (ga_nodeId == 0)
diff --git a/ndb/tools/select_all.cpp b/ndb/tools/select_all.cpp
index a3d07e3938b..baa18db1ebd 100644
--- a/ndb/tools/select_all.cpp
+++ b/ndb/tools/select_all.cpp
@@ -85,13 +85,6 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_select_all.trace");
-}
int main(int argc, char** argv){
NDB_INIT(argv[0]);
@@ -99,7 +92,11 @@ int main(int argc, char** argv){
load_defaults("my",load_default_groups,&argc,&argv);
const char* _tabname;
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_select_all.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
return NDBT_ProgramExit(NDBT_WRONGARGS);
if ((_tabname = argv[0]) == 0) {
usage();
diff --git a/ndb/tools/select_count.cpp b/ndb/tools/select_count.cpp
index 41e66c8b367..6fa3c77f15a 100644
--- a/ndb/tools/select_count.cpp
+++ b/ndb/tools/select_count.cpp
@@ -60,20 +60,17 @@ static void usage()
my_print_help(my_long_options);
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_select_count.trace");
-}
int main(int argc, char** argv){
NDB_INIT(argv[0]);
const char *load_default_groups[]= { "mysql_cluster",0 };
load_defaults("my",load_default_groups,&argc,&argv);
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_select_count.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
return NDBT_ProgramExit(NDBT_WRONGARGS);
if (argc < 1) {
usage();
diff --git a/ndb/tools/waiter.cpp b/ndb/tools/waiter.cpp
index cc6a21428c8..db90bd8bd90 100644
--- a/ndb/tools/waiter.cpp
+++ b/ndb/tools/waiter.cpp
@@ -60,24 +60,19 @@ static void usage()
my_print_variables(my_long_options);
}
-static my_bool
-get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
- char *argument)
-{
- return ndb_std_get_one_option(optid, opt, argument ? argument :
- "d:t:O,/tmp/ndb_drop_table.trace");
-}
-
int main(int argc, char** argv){
NDB_INIT(argv[0]);
const char *load_default_groups[]= { "mysql_cluster",0 };
load_defaults("my",load_default_groups,&argc,&argv);
const char* _hostName = NULL;
int ho_error;
- if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+#ifndef DBUG_OFF
+ opt_debug= "d:t:O,/tmp/ndb_waiter.trace";
+#endif
+ if ((ho_error=handle_options(&argc, &argv, my_long_options,
+ ndb_std_get_one_option)))
return NDBT_ProgramExit(NDBT_WRONGARGS);
- char buf[255];
_hostName = argv[0];
if (_hostName == 0)