Commit 828a7021 authored by unknown's avatar unknown
Browse files

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
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
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 −0
Original line number Diff line number Diff line
-- 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;
+8 −5
Original line number Diff line number Diff line
@@ -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();