summaryrefslogtreecommitdiff
path: root/storage/ndb/test/ndbapi
diff options
context:
space:
mode:
authorunknown <lzhou/zhl@dev3-63.(none)>2007-11-12 14:53:25 +0000
committerunknown <lzhou/zhl@dev3-63.(none)>2007-11-12 14:53:25 +0000
commitdc7ee1f3cb213c9169e0fd7939d01b8e3fccf095 (patch)
treec11a2b4ad87578e8fb482886eb61aea815fb4b65 /storage/ndb/test/ndbapi
parent6bead54df87aeab2fac233cb928e4029f93f0c58 (diff)
downloadmariadb-git-dc7ee1f3cb213c9169e0fd7939d01b8e3fccf095.tar.gz
BUG#29186 Return error to client in the following condition:
1: Create a log file which is larger than 4G in 32-bit host. 2: Create a data file (tablespace) which is larger than 4G in 32-bit host. storage/ndb/include/kernel/signaldata/CreateFilegroupImpl.hpp: Add error code for log file too large storage/ndb/src/kernel/blocks/ERROR_codes.txt: Add error insert code in lgman and tsman storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: Add error code definination of lgman and tsman storage/ndb/src/kernel/blocks/lgman.cpp: Return REF when log file more than 4G in 32-bits host storage/ndb/src/kernel/blocks/tsman.cpp: return FER when data file larger than 4G in 32-bits host storage/ndb/src/ndbapi/ndberror.c: Add describe of new errorCode storage/ndb/test/ndbapi/testDict.cpp: Add test case for bug29186
Diffstat (limited to 'storage/ndb/test/ndbapi')
-rw-r--r--storage/ndb/test/ndbapi/testDict.cpp166
1 files changed, 166 insertions, 0 deletions
diff --git a/storage/ndb/test/ndbapi/testDict.cpp b/storage/ndb/test/ndbapi/testDict.cpp
index 13c071f968e..22b795a8dba 100644
--- a/storage/ndb/test/ndbapi/testDict.cpp
+++ b/storage/ndb/test/ndbapi/testDict.cpp
@@ -2357,6 +2357,168 @@ runBug24631(NDBT_Context* ctx, NDBT_Step* step)
return NDBT_OK;
}
+int
+runBug29186(NDBT_Context* ctx, NDBT_Step* step)
+{
+ int lgError = 15000;
+ int tsError = 16000;
+ int res;
+ char lgname[256];
+ char ufname[256];
+ char tsname[256];
+ char dfname[256];
+
+ NdbRestarter restarter;
+
+ if (restarter.getNumDbNodes() < 2){
+ ctx->stopTest();
+ return NDBT_OK;
+ }
+
+ Ndb* pNdb = GETNDB(step);
+ NdbDictionary::Dictionary* pDict = pNdb->getDictionary();
+ NdbDictionary::Dictionary::List list;
+
+ if (pDict->listObjects(list) == -1)
+ return NDBT_FAILED;
+
+ // 1.create logfile group
+ const char * lgfound = 0;
+
+ for (Uint32 i = 0; i<list.count; i++)
+ {
+ switch(list.elements[i].type){
+ case NdbDictionary::Object::LogfileGroup:
+ lgfound = list.elements[i].name;
+ break;
+ default:
+ break;
+ }
+ if (lgfound)
+ break;
+ }
+
+ if (lgfound == 0)
+ {
+ BaseString::snprintf(lgname, sizeof(lgname), "LG-%u", rand());
+ NdbDictionary::LogfileGroup lg;
+
+ lg.setName(lgname);
+ lg.setUndoBufferSize(8*1024*1024);
+ if(pDict->createLogfileGroup(lg) != 0)
+ {
+ g_err << "Failed to create logfilegroup:"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+ }
+ else
+ {
+ BaseString::snprintf(lgname, sizeof(lgname), "%s", lgfound);
+ }
+
+ if(restarter.waitClusterStarted(60)){
+ g_err << "waitClusterStarted failed"<< endl;
+ return NDBT_FAILED;
+ }
+
+ if(restarter.insertErrorInAllNodes(lgError) != 0){
+ g_err << "failed to set error insert"<< endl;
+ return NDBT_FAILED;
+ }
+
+ g_info << "error inserted" << endl;
+ g_info << "waiting some before add log file" << endl;
+ g_info << "starting create log file group" << endl;
+
+ NdbDictionary::Undofile uf;
+ BaseString::snprintf(ufname, sizeof(ufname), "%s-%u", lgname, rand());
+ uf.setPath(ufname);
+ uf.setSize(2*1024*1024);
+ uf.setLogfileGroup(lgname);
+
+ if(pDict->createUndofile(uf) == 0)
+ {
+ g_err << "Create log file group should fail on error_insertion " << lgError << endl;
+ return NDBT_FAILED;
+ }
+
+ //clear lg error
+ if(restarter.insertErrorInAllNodes(15099) != 0){
+ g_err << "failed to set error insert"<< endl;
+ return NDBT_FAILED;
+ }
+ NdbSleep_SecSleep(5);
+
+ //lg error has been cleared, so we can add undo file
+ if(pDict->createUndofile(uf) != 0)
+ {
+ g_err << "Failed to create undofile:"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ if(restarter.waitClusterStarted(60)){
+ g_err << "waitClusterStarted failed"<< endl;
+ return NDBT_FAILED;
+ }
+
+ if(restarter.insertErrorInAllNodes(tsError) != 0){
+ g_err << "failed to set error insert"<< endl;
+ return NDBT_FAILED;
+ }
+ g_info << "error inserted" << endl;
+ g_info << "waiting some before create table space" << endl;
+ g_info << "starting create table space" << endl;
+
+ //r = runCreateTablespace(ctx, step);
+ BaseString::snprintf(tsname, sizeof(tsname), "TS-%u", rand());
+ BaseString::snprintf(dfname, sizeof(dfname), "%s-%u-1.dat", tsname, rand());
+
+ NdbDictionary::Tablespace ts;
+ ts.setName(tsname);
+ ts.setExtentSize(1024*1024);
+ ts.setDefaultLogfileGroup(lgname);
+
+ if(pDict->createTablespace(ts) != 0)
+ {
+ g_err << "Failed to create tablespace:"
+ << endl << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ NdbDictionary::Datafile df;
+ df.setPath(dfname);
+ df.setSize(1*1024*1024);
+ df.setTablespace(tsname);
+
+ if(pDict->createDatafile(df) == 0)
+ {
+ g_err << "Create table space should fail on error_insertion " << tsError << endl;
+ return NDBT_FAILED;
+ }
+ //Clear the inserted error
+ if(restarter.insertErrorInAllNodes(16099) != 0){
+ g_err << "failed to set error insert"<< endl;
+ return NDBT_FAILED;
+ }
+ NdbSleep_SecSleep(5);
+
+ if (pDict->dropTablespace(pDict->getTablespace(tsname)) != 0)
+ {
+ g_err << "Failed to drop tablespace: " << pDict->getNdbError() << endl;
+ return NDBT_FAILED;
+ }
+
+ if (lgfound == 0)
+ {
+ if (pDict->dropLogfileGroup(pDict->getLogfileGroup(lgname)) != 0)
+ return NDBT_FAILED;
+ }
+
+ return NDBT_OK;
+}
+
struct RandSchemaOp
{
struct Obj
@@ -2864,6 +3026,10 @@ TESTCASE("Bug24631",
""){
INITIALIZER(runBug24631);
}
+TESTCASE("Bug29186",
+ ""){
+ INITIALIZER(runBug29186);
+}
NDBT_TESTSUITE_END(testDict);
int main(int argc, const char** argv){