summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/ndb_bitfield.result6
-rw-r--r--mysql-test/t/ndb_bitfield.test9
-rw-r--r--storage/ndb/include/util/Bitmask.hpp4
-rw-r--r--storage/ndb/src/mgmsrv/MgmtSrvr.cpp10
-rw-r--r--storage/ndb/test/ndbapi/testDataBuffers.cpp26
5 files changed, 46 insertions, 9 deletions
diff --git a/mysql-test/r/ndb_bitfield.result b/mysql-test/r/ndb_bitfield.result
index 77473c41ecd..0b7d09dd9b9 100644
--- a/mysql-test/r/ndb_bitfield.result
+++ b/mysql-test/r/ndb_bitfield.result
@@ -216,3 +216,9 @@ show warnings;
Level Code Message
Error 1296 Got error 743 'Unsupported character set in table or index' from NDB
Error 1005 Can't create table 'test.t1' (errno: 140)
+create table t1 (
+pk1 int primary key,
+b bit(32) not null
+) engine=ndbcluster;
+insert into t1 values (1,1);
+drop table t1;
diff --git a/mysql-test/t/ndb_bitfield.test b/mysql-test/t/ndb_bitfield.test
index 05ebeaaa720..de0ae23bfe6 100644
--- a/mysql-test/t/ndb_bitfield.test
+++ b/mysql-test/t/ndb_bitfield.test
@@ -113,3 +113,12 @@ create table t1 (
key(b)
) engine=ndbcluster;
show warnings;
+
+# bug#16125
+create table t1 (
+ pk1 int primary key,
+ b bit(32) not null
+) engine=ndbcluster;
+
+insert into t1 values (1,1);
+drop table t1;
diff --git a/storage/ndb/include/util/Bitmask.hpp b/storage/ndb/include/util/Bitmask.hpp
index b586c95935e..96430b64901 100644
--- a/storage/ndb/include/util/Bitmask.hpp
+++ b/storage/ndb/include/util/Bitmask.hpp
@@ -918,7 +918,7 @@ inline void
BitmaskImpl::getField(unsigned size, const Uint32 src[],
unsigned pos, unsigned len, Uint32 dst[])
{
- assert(pos + len < (size << 5));
+ assert(pos + len <= (size << 5));
src += (pos >> 5);
Uint32 offset = pos & 31;
@@ -937,7 +937,7 @@ inline void
BitmaskImpl::setField(unsigned size, Uint32 dst[],
unsigned pos, unsigned len, const Uint32 src[])
{
- assert(pos + len < (size << 5));
+ assert(pos + len <= (size << 5));
dst += (pos >> 5);
Uint32 offset = pos & 31;
diff --git a/storage/ndb/src/mgmsrv/MgmtSrvr.cpp b/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
index 546110cc738..b3a25eaa0da 100644
--- a/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
+++ b/storage/ndb/src/mgmsrv/MgmtSrvr.cpp
@@ -1859,6 +1859,16 @@ MgmtSrvr::alloc_node_id(NodeId * nodeId,
m_connect_address[id_found].s_addr= 0;
}
m_reserved_nodes.set(id_found);
+ if (theFacade && id_found != theFacade->ownId())
+ {
+ /**
+ * Make sure we're ready to accept connections from this node
+ */
+ theFacade->lock_mutex();
+ theFacade->doConnect(id_found);
+ theFacade->unlock_mutex();
+ }
+
char tmp_str[128];
m_reserved_nodes.getText(tmp_str);
g_eventLogger.info("Mgmt server state: nodeid %d reserved for ip %s, m_reserved_nodes %s.",
diff --git a/storage/ndb/test/ndbapi/testDataBuffers.cpp b/storage/ndb/test/ndbapi/testDataBuffers.cpp
index aaecb6ee61e..83a063d60d3 100644
--- a/storage/ndb/test/ndbapi/testDataBuffers.cpp
+++ b/storage/ndb/test/ndbapi/testDataBuffers.cpp
@@ -254,12 +254,6 @@ testcase(Ndb_cluster_connection&cc, int flag)
ndbout << "tab=" << tab << " cols=" << attrcnt
<< " size max=" << smax << " tot=" << stot << endl;
- ndb = new Ndb(&cc, "TEST_DB");
- if (ndb->init() != 0)
- return ndberror("init");
- if (ndb->waitUntilReady(30) < 0)
- return ndberror("waitUntilReady");
-
if ((tcon = NdbSchemaCon::startSchemaTrans(ndb)) == 0)
return ndberror("startSchemaTransaction");
if ((top = tcon->getNdbSchemaOp()) == 0)
@@ -541,7 +535,6 @@ testcase(Ndb_cluster_connection&cc, int flag)
return ndberror("key %d not found", k);
ndbout << "scanned " << key << endl;
- ndb = 0;
ndbout << "done" << endl;
return 0;
}
@@ -605,6 +598,7 @@ NDB_COMMAND(testDataBuffers, "testDataBuffers", "testDataBuffers", "testDataBuff
return NDBT_ProgramExit(NDBT_WRONGARGS);
}
}
+
unsigned ok = true;
Ndb_cluster_connection con;
@@ -613,6 +607,20 @@ NDB_COMMAND(testDataBuffers, "testDataBuffers", "testDataBuffers", "testDataBuff
return NDBT_ProgramExit(NDBT_FAILED);
}
+ ndb = new Ndb(&con, "TEST_DB");
+ if (ndb->init() != 0)
+ {
+ ndberror("init");
+ ok = false;
+ goto out;
+ }
+ if (ndb->waitUntilReady(30) < 0)
+ {
+ ndberror("waitUntilReady");
+ ok = false;
+ goto out;
+ }
+
for (i = 1; 0 == loopcnt || i <= loopcnt; i++) {
ndbout << "=== loop " << i << " ===" << endl;
for (int flag = 0; flag < (1<<testbits); flag++) {
@@ -621,9 +629,13 @@ NDB_COMMAND(testDataBuffers, "testDataBuffers", "testDataBuffers", "testDataBuff
if (! kontinue)
goto out;
}
+ NdbDictionary::Dictionary * dict = ndb->getDictionary();
+ dict->dropTable(tab);
}
}
+
out:
+ delete ndb;
return NDBT_ProgramExit(ok ? NDBT_OK : NDBT_FAILED);
}