mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
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
This commit is contained in:
parent
451cffcf47
commit
828a7021e7
3 changed files with 79 additions and 5 deletions
26
mysql-test/r/ndb_partition_error.result
Normal file
26
mysql-test/r/ndb_partition_error.result
Normal file
|
@ -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;
|
45
mysql-test/t/ndb_partition_error.test
Normal file
45
mysql-test/t/ndb_partition_error.test
Normal file
|
@ -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;
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue