Commit 828a7021 authored by unknown's avatar unknown

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
parent 451cffcf
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;
-- 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;
...@@ -2912,8 +2912,6 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ ...@@ -2912,8 +2912,6 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){
break; break;
} }
createTabPtr.p->key = ++c_opRecordSequence;
c_opCreateTable.add(createTabPtr);
createTabPtr.p->m_errorCode = 0; createTabPtr.p->m_errorCode = 0;
createTabPtr.p->m_senderRef = senderRef; createTabPtr.p->m_senderRef = senderRef;
createTabPtr.p->m_senderData = senderData; createTabPtr.p->m_senderData = senderData;
...@@ -2922,11 +2920,12 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ ...@@ -2922,11 +2920,12 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){
createTabPtr.p->m_fragmentsPtrI = RNIL; createTabPtr.p->m_fragmentsPtrI = RNIL;
createTabPtr.p->m_dihAddFragPtr = RNIL; createTabPtr.p->m_dihAddFragPtr = RNIL;
Uint32 key = c_opRecordSequence + 1;
Uint32 *theData = signal->getDataPtrSend(), i; Uint32 *theData = signal->getDataPtrSend(), i;
Uint16 *node_group= (Uint16*)&signal->theData[25]; Uint16 *node_group= (Uint16*)&signal->theData[25];
CreateFragmentationReq * const req = (CreateFragmentationReq*)theData; CreateFragmentationReq * const req = (CreateFragmentationReq*)theData;
req->senderRef = reference(); req->senderRef = reference();
req->senderData = createTabPtr.p->key; req->senderData = key;
req->primaryTableId = parseRecord.tablePtr.p->primaryTableId; req->primaryTableId = parseRecord.tablePtr.p->primaryTableId;
req->noOfFragments = parseRecord.tablePtr.p->ngLen >> 1; req->noOfFragments = parseRecord.tablePtr.p->ngLen >> 1;
req->fragmentationType = parseRecord.tablePtr.p->fragmentType; req->fragmentationType = parseRecord.tablePtr.p->fragmentType;
...@@ -2966,9 +2965,13 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ ...@@ -2966,9 +2965,13 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){
{ {
jam(); jam();
parseRecord.errorCode= signal->theData[0]; parseRecord.errorCode= signal->theData[0];
c_opCreateTable.release(createTabPtr);
releaseTableObject(parseRecord.tablePtr.i, true);
break; break;
} }
createTabPtr.p->key = key;
c_opRecordSequence++;
c_opCreateTable.add(createTabPtr);
c_blockState = BS_CREATE_TAB; c_blockState = BS_CREATE_TAB;
return; return;
} while(0); } while(0);
...@@ -2976,8 +2979,8 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){ ...@@ -2976,8 +2979,8 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){
/** /**
* Something went wrong * Something went wrong
*/ */
releaseSections(signal);
releaseSections(signal);
CreateTableRef * ref = (CreateTableRef*)signal->getDataPtrSend(); CreateTableRef * ref = (CreateTableRef*)signal->getDataPtrSend();
ref->senderData = senderData; ref->senderData = senderData;
ref->senderRef = reference(); ref->senderRef = reference();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment