mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03: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:
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;
|
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){
|
|||||||
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){
|
|||||||
{
|
{
|
||||||
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){
|
|||||||
/**
|
/**
|
||||||
* 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();
|
||||||
|
Reference in New Issue
Block a user