summaryrefslogtreecommitdiff
path: root/storage/ndb/test
diff options
context:
space:
mode:
Diffstat (limited to 'storage/ndb/test')
-rw-r--r--storage/ndb/test/ndbapi/testDict.cpp10
-rw-r--r--storage/ndb/test/ndbapi/testNodeRestart.cpp48
-rw-r--r--storage/ndb/test/ndbapi/testSystemRestart.cpp41
-rw-r--r--storage/ndb/test/run-test/daily-basic-tests.txt7
-rw-r--r--storage/ndb/test/tools/Makefile.am3
-rw-r--r--storage/ndb/test/tools/connect.cpp152
6 files changed, 255 insertions, 6 deletions
diff --git a/storage/ndb/test/ndbapi/testDict.cpp b/storage/ndb/test/ndbapi/testDict.cpp
index 16b6e129605..e1b8f2b3c7f 100644
--- a/storage/ndb/test/ndbapi/testDict.cpp
+++ b/storage/ndb/test/ndbapi/testDict.cpp
@@ -2776,9 +2776,13 @@ runDropDDObjects(NDBT_Context* ctx, NDBT_Step* step){
case NdbDictionary::Object::UserTable:
tableFound = list.elements[i].name;
if(tableFound != 0){
- if(pDict->dropTable(tableFound) != 0){
- g_err << "Failed to drop table: " << pDict->getNdbError() << endl;
- return NDBT_FAILED;
+ if(strcmp(tableFound, "ndb_apply_status") != 0 &&
+ strcmp(tableFound, "NDB$BLOB_2_3") != 0 &&
+ strcmp(tableFound, "ndb_schema") != 0){
+ if(pDict->dropTable(tableFound) != 0){
+ g_err << "Failed to drop table: " << tableFound << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
}
}
tableFound = 0;
diff --git a/storage/ndb/test/ndbapi/testNodeRestart.cpp b/storage/ndb/test/ndbapi/testNodeRestart.cpp
index 419196e00eb..2a5febb7ae9 100644
--- a/storage/ndb/test/ndbapi/testNodeRestart.cpp
+++ b/storage/ndb/test/ndbapi/testNodeRestart.cpp
@@ -1832,6 +1832,51 @@ runBug31525(NDBT_Context* ctx, NDBT_Step* step)
if (res.waitClusterStarted())
return NDBT_FAILED;
+
+ return NDBT_OK;
+}
+
+int
+runBug32160(NDBT_Context* ctx, NDBT_Step* step)
+{
+ int result = NDBT_OK;
+ int loops = ctx->getNumLoops();
+ int records = ctx->getNumRecords();
+ Ndb* pNdb = GETNDB(step);
+ NdbRestarter res;
+
+ if (res.getNumDbNodes() < 2)
+ {
+ return NDBT_OK;
+ }
+
+ int master = res.getMasterNodeId();
+ int next = res.getNextMasterNodeId(master);
+
+ if (res.insertErrorInNode(next, 7194))
+ {
+ return NDBT_FAILED;
+ }
+
+ int val2[] = { DumpStateOrd::CmvmiSetRestartOnErrorInsert, 1 };
+ if (res.dumpStateOneNode(master, val2, 2))
+ return NDBT_FAILED;
+
+ if (res.insertErrorInNode(master, 7193))
+ return NDBT_FAILED;
+
+ int val3[] = { 7099 };
+ if (res.dumpStateOneNode(master, val3, 1))
+ return NDBT_FAILED;
+
+ if (res.waitNodesNoStart(&master, 1))
+ return NDBT_FAILED;
+
+ if (res.startNodes(&master, 1))
+ return NDBT_FAILED;
+
+ if (res.waitClusterStarted())
+ return NDBT_FAILED;
return NDBT_OK;
}
@@ -2205,6 +2250,9 @@ TESTCASE("Bug28717", ""){
TESTCASE("Bug29364", ""){
INITIALIZER(runBug29364);
}
+TESTCASE("Bug32160", ""){
+ INITIALIZER(runBug32160);
+}
NDBT_TESTSUITE_END(testNodeRestart);
int main(int argc, const char** argv){
diff --git a/storage/ndb/test/ndbapi/testSystemRestart.cpp b/storage/ndb/test/ndbapi/testSystemRestart.cpp
index 89580c0cef8..0f9100f67fa 100644
--- a/storage/ndb/test/ndbapi/testSystemRestart.cpp
+++ b/storage/ndb/test/ndbapi/testSystemRestart.cpp
@@ -1501,6 +1501,38 @@ int runSR_DD_2(NDBT_Context* ctx, NDBT_Step* step)
return result;
}
+int runBug22696(NDBT_Context* ctx, NDBT_Step* step)
+{
+ Ndb* pNdb = GETNDB(step);
+ int result = NDBT_OK;
+ Uint32 loops = ctx->getNumLoops();
+ Uint32 rows = ctx->getNumRecords();
+ NdbRestarter restarter;
+ HugoTransactions hugoTrans(*ctx->getTab());
+
+ Uint32 i = 0;
+ while(i<=loops && result != NDBT_FAILED)
+ {
+ for (Uint32 j = 0; j<10 && result != NDBT_FAILED; j++)
+ CHECK(hugoTrans.scanUpdateRecords(pNdb, rows) == 0);
+
+ CHECK(restarter.restartAll(false, true, i > 0 ? true : false) == 0);
+ CHECK(restarter.waitClusterNoStart() == 0);
+ CHECK(restarter.insertErrorInAllNodes(7072) == 0);
+ CHECK(restarter.startAll() == 0);
+ CHECK(restarter.waitClusterStarted() == 0);
+
+ i++;
+ if (i < loops)
+ {
+ NdbSleep_SecSleep(5); // Wait for a few gcp
+ }
+ }
+
+ ctx->stopTest();
+ return result;
+}
+
int
runBug27434(NDBT_Context* ctx, NDBT_Step* step)
{
@@ -1813,8 +1845,13 @@ TESTCASE("Bug28770",
STEP(runBug28770);
FINALIZER(runClearTable);
}
-
-
+TESTCASE("Bug22696", "")
+{
+ INITIALIZER(runWaitStarted);
+ INITIALIZER(runLoadTable);
+ INITIALIZER(runBug22696);
+ FINALIZER(runClearTable);
+}
NDBT_TESTSUITE_END(testSystemRestart);
int main(int argc, const char** argv){
diff --git a/storage/ndb/test/run-test/daily-basic-tests.txt b/storage/ndb/test/run-test/daily-basic-tests.txt
index 103675d8e35..37db5e01dd6 100644
--- a/storage/ndb/test/run-test/daily-basic-tests.txt
+++ b/storage/ndb/test/run-test/daily-basic-tests.txt
@@ -581,6 +581,10 @@ max-time: 1000
cmd: testNodeRestart
args: -n Bug29364 T1
+max-time: 300
+cmd: testNodeRestart
+args: -n Bug32160 T1
+
#
# DICT TESTS
max-time: 500
@@ -1038,4 +1042,7 @@ max-time: 300
cmd: test_event
args: -n Bug31701 T1
+max-time: 300
+cmd: testSystemRestart
+args: -n Bug22696 T1
diff --git a/storage/ndb/test/tools/Makefile.am b/storage/ndb/test/tools/Makefile.am
index 1683d4d84ae..da715caa1cb 100644
--- a/storage/ndb/test/tools/Makefile.am
+++ b/storage/ndb/test/tools/Makefile.am
@@ -13,7 +13,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-ndbtest_PROGRAMS = hugoLoad hugoFill hugoLockRecords hugoPkDelete hugoPkRead hugoPkReadRecord hugoPkUpdate hugoScanRead hugoScanUpdate restart verify_index copy_tab create_index ndb_cpcc listen_event eventlog rep_latency
+ndbtest_PROGRAMS = hugoLoad hugoFill hugoLockRecords hugoPkDelete hugoPkRead hugoPkReadRecord hugoPkUpdate hugoScanRead hugoScanUpdate restart verify_index copy_tab create_index ndb_cpcc listen_event eventlog rep_latency ndb_connect
# transproxy
@@ -35,6 +35,7 @@ ndb_cpcc_SOURCES = cpcc.cpp
listen_event_SOURCES = listen.cpp
eventlog_SOURCES = log_listner.cpp
rep_latency_SOURCES = rep_latency.cpp
+ndb_connect_SOURCES = connect.cpp
include $(top_srcdir)/storage/ndb/config/common.mk.am
include $(top_srcdir)/storage/ndb/config/type_ndbapitest.mk.am
diff --git a/storage/ndb/test/tools/connect.cpp b/storage/ndb/test/tools/connect.cpp
new file mode 100644
index 00000000000..2d3ac34d3e8
--- /dev/null
+++ b/storage/ndb/test/tools/connect.cpp
@@ -0,0 +1,152 @@
+/* Copyright (C) 2003 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <ndb_global.h>
+#include <ndb_opts.h>
+#include <NDBT.hpp>
+#include <NdbApi.hpp>
+#include <NdbSleep.h>
+
+NDB_STD_OPTS_VARS;
+
+static int _loop = 25;
+static int _sleep = 25;
+static int _drop = 1;
+
+typedef uchar* gptr;
+
+static struct my_option my_long_options[] =
+{
+ NDB_STD_OPTS("ndb_desc"),
+ { "loop", 'l', "loops",
+ (gptr*) &_loop, (gptr*) &_loop, 0,
+ GET_INT, REQUIRED_ARG, _loop, 0, 0, 0, 0, 0 },
+ { "sleep", 's', "Sleep (ms) between connection attempt",
+ (gptr*) &_sleep, (gptr*) &_sleep, 0,
+ GET_INT, REQUIRED_ARG, _sleep, 0, 0, 0, 0, 0 },
+ { "drop", 'd',
+ "Drop event operations before disconnect (0 = no, 1 = yes, else rand",
+ (gptr*) &_drop, (gptr*) &_drop, 0,
+ GET_INT, REQUIRED_ARG, _drop, 0, 0, 0, 0, 0 },
+ { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
+};
+
+static void usage()
+{
+ char desc[] = "This program connects to ndbd, and then disconnects\n";
+ ndb_std_print_version();
+ my_print_help(my_long_options);
+ my_print_variables(my_long_options);
+}
+
+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;
+#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);
+
+ for (int i = 0; i<_loop; i++)
+ {
+ Ndb_cluster_connection con(opt_connect_str);
+ if(con.connect(12, 5, 1) != 0)
+ {
+ ndbout << "Unable to connect to management server." << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+ if (con.wait_until_ready(30,30) != 0)
+ {
+ ndbout << "Cluster nodes not ready in 30 seconds." << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+
+ Ndb MyNdb(&con, "TEST_DB");
+ if(MyNdb.init() != 0){
+ ERR(MyNdb.getNdbError());
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+
+ Vector<NdbEventOperation*> ops;
+ const NdbDictionary::Dictionary * dict= MyNdb.getDictionary();
+ for (int j = 0; j < argc; j++)
+ {
+ const NdbDictionary::Table * pTab = dict->getTable(argv[j]);
+ if (pTab == 0)
+ {
+ ndbout_c("Failed to retreive table: \"%s\"", argv[j]);
+ }
+
+ BaseString tmp;
+ tmp.appfmt("EV-%s", argv[j]);
+ NdbEventOperation* pOp = MyNdb.createEventOperation(tmp.c_str());
+ if ( pOp == NULL )
+ {
+ ndbout << "Event operation creation failed: " <<
+ MyNdb.getNdbError() << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+
+ for (int a = 0; a < pTab->getNoOfColumns(); a++)
+ {
+ pOp->getValue(pTab->getColumn(a)->getName());
+ pOp->getPreValue(pTab->getColumn(a)->getName());
+ }
+
+ if (pOp->execute())
+ {
+ ndbout << "operation execution failed: " << pOp->getNdbError()
+ << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+ ops.push_back(pOp);
+ }
+
+ if (_sleep)
+ {
+ NdbSleep_MilliSleep(10 + rand() % _sleep);
+ }
+
+ for (Uint32 i = 0; i<ops.size(); i++)
+ {
+ switch(_drop){
+ case 0:
+ break;
+ do_drop:
+ case 1:
+ if (MyNdb.dropEventOperation(ops[i]))
+ {
+ ndbout << "drop event operation failed "
+ << MyNdb.getNdbError() << endl;
+ return NDBT_ProgramExit(NDBT_FAILED);
+ }
+ break;
+ default:
+ if ((rand() % 100) > 50)
+ goto do_drop;
+ }
+ }
+ }
+
+ return NDBT_ProgramExit(NDBT_OK);
+}
+
+template class Vector<NdbEventOperation*>;