From 828a7021e782d83d0d96b215b0cd6b2e4e9718b4 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 22 Jul 2005 16:39:05 -0400 Subject: [PATCH] Bug #12114 patch mysql-test/r/ndb_partition_error.result: New test program mysql-test/t/ndb_partition_error.test: New test program storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp: Fixed error handling after CREATE_FRAGMENTATION_REF --- mysql-test/r/ndb_partition_error.result | 26 +++++++++++ mysql-test/t/ndb_partition_error.test | 45 +++++++++++++++++++ .../ndb/src/kernel/blocks/dbdict/Dbdict.cpp | 13 +++--- 3 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 mysql-test/r/ndb_partition_error.result create mode 100644 mysql-test/t/ndb_partition_error.test diff --git a/mysql-test/r/ndb_partition_error.result b/mysql-test/r/ndb_partition_error.result new file mode 100644 index 00000000000..bcb4d2260c2 --- /dev/null +++ b/mysql-test/r/ndb_partition_error.result @@ -0,0 +1,26 @@ +drop table if exists t1; +CREATE TABLE t1 ( +a int not null, +b int not null, +c int not null, +primary key(a,b), +index (a)) +engine = ndb +partition by range (a) +partitions 3 +(partition x1 values less than (5) nodegroup 12, +partition x2 values less than (10) nodegroup 13, +partition x3 values less than (20) nodegroup 14); +ERROR HY000: Can't create table './test/t1.frm' (errno: 1305) +CREATE TABLE t1 ( +a int not null, +b int not null, +c int not null, +primary key(a)) +engine = ndb +partition by range (a) +partitions 3 +(partition x1 values less than (5), +partition x2 values less than (10), +partition x3 values less than (20)); +drop table t1; diff --git a/mysql-test/t/ndb_partition_error.test b/mysql-test/t/ndb_partition_error.test new file mode 100644 index 00000000000..23fb11d7e63 --- /dev/null +++ b/mysql-test/t/ndb_partition_error.test @@ -0,0 +1,45 @@ +-- source include/have_ndb.inc +#--disable_abort_on_error +# +# Simple test for the partition storage engine +# Focuses on range partitioning tests +# +#-- source include/have_partition.inc + +--disable_warnings +drop table if exists t1; +--enable_warnings + +# +# Partition by range, generate node group error +# +--error 1005 +CREATE TABLE t1 ( +a int not null, +b int not null, +c int not null, +primary key(a,b), +index (a)) +engine = ndb +partition by range (a) +partitions 3 +(partition x1 values less than (5) nodegroup 12, + partition x2 values less than (10) nodegroup 13, + partition x3 values less than (20) nodegroup 14); + +# +# Partition by range, create normal valid table +# +CREATE TABLE t1 ( +a int not null, +b int not null, +c int not null, +primary key(a)) +engine = ndb +partition by range (a) +partitions 3 +(partition x1 values less than (5), + partition x2 values less than (10), + partition x3 values less than (20)); + +drop table t1; diff --git a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp index 328bc07cae4..3b1fddef00e 100644 --- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp +++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp @@ -2912,8 +2912,6 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ break; } - createTabPtr.p->key = ++c_opRecordSequence; - c_opCreateTable.add(createTabPtr); createTabPtr.p->m_errorCode = 0; createTabPtr.p->m_senderRef = senderRef; createTabPtr.p->m_senderData = senderData; @@ -2922,11 +2920,12 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ createTabPtr.p->m_fragmentsPtrI = RNIL; createTabPtr.p->m_dihAddFragPtr = RNIL; + Uint32 key = c_opRecordSequence + 1; Uint32 *theData = signal->getDataPtrSend(), i; Uint16 *node_group= (Uint16*)&signal->theData[25]; CreateFragmentationReq * const req = (CreateFragmentationReq*)theData; req->senderRef = reference(); - req->senderData = createTabPtr.p->key; + req->senderData = key; req->primaryTableId = parseRecord.tablePtr.p->primaryTableId; req->noOfFragments = parseRecord.tablePtr.p->ngLen >> 1; req->fragmentationType = parseRecord.tablePtr.p->fragmentType; @@ -2966,9 +2965,13 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ { jam(); parseRecord.errorCode= signal->theData[0]; + c_opCreateTable.release(createTabPtr); + releaseTableObject(parseRecord.tablePtr.i, true); break; } - + createTabPtr.p->key = key; + c_opRecordSequence++; + c_opCreateTable.add(createTabPtr); c_blockState = BS_CREATE_TAB; return; } while(0); @@ -2976,8 +2979,8 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ /** * Something went wrong */ - releaseSections(signal); + releaseSections(signal); CreateTableRef * ref = (CreateTableRef*)signal->getDataPtrSend(); ref->senderData = senderData; ref->senderRef = reference();