#At file:///home/jonas/src/telco-6.4/
2995 Jonas Oreland 2008-10-10
ndb - 6.4 - testDict -n Bug24631 T1
Make sure that CREATE_OLD_PASS and DROP_OLD_PASS does not overwrite
master state
(and fix bugs found while testing it)
modified:
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
storage/ndb/src/kernel/vm/VMSignal.hpp
=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2008-10-10 11:20:33 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2008-10-10 11:39:51 +0000
@@ -3199,11 +3199,22 @@ void Dbdict::execSCHEMA_INFO(Signal* sig
CRASH_INSERTION(6001);
}
+ {
+ /**
+ * Copy "own" into new
+ */
+ XSchemaFile * oldxsf = &c_schemaFile[SchemaRecord::OLD_SCHEMA_FILE];
+ XSchemaFile * newxsf = &c_schemaFile[SchemaRecord::NEW_SCHEMA_FILE];
+ memcpy(&newxsf->schemaPage[0],
+ &oldxsf->schemaPage[0],
+ oldxsf->schemaPage[0].FileSize);
+ }
+
SectionHandle handle(this, signal);
SegmentedSectionPtr schemaDataPtr;
handle.getSection(schemaDataPtr, 0);
- XSchemaFile * xsf = &c_schemaFile[SchemaRecord::NEW_SCHEMA_FILE];
+ XSchemaFile * xsf = &c_schemaFile[SchemaRecord::OLD_SCHEMA_FILE];
ndbrequire(schemaDataPtr.sz % NDB_SF_PAGE_SIZE_IN_WORDS == 0);
xsf->noOfPages = schemaDataPtr.sz / NDB_SF_PAGE_SIZE_IN_WORDS;
copy((Uint32*)&xsf->schemaPage[0], schemaDataPtr);
@@ -3217,9 +3228,9 @@ void Dbdict::execSCHEMA_INFO(Signal* sig
validateChecksum(xsf);
- XSchemaFile * oldxsf = &c_schemaFile[SchemaRecord::OLD_SCHEMA_FILE];
- checkPendingSchemaTrans(oldxsf);
- resizeSchemaFile(xsf, oldxsf->noOfPages);
+ XSchemaFile * ownxsf = &c_schemaFile[SchemaRecord::NEW_SCHEMA_FILE];
+ checkPendingSchemaTrans(ownxsf);
+ resizeSchemaFile(xsf, ownxsf->noOfPages);
ndbrequire(signal->getSendersBlockRef() != reference());
@@ -3378,8 +3389,8 @@ void Dbdict::checkSchemaStatus(Signal* s
{
// masterxsf == schema file of master (i.e what's currently in cluster)
// ownxsf = schema file read from disk
- XSchemaFile * masterxsf = &c_schemaFile[SchemaRecord::NEW_SCHEMA_FILE];
- XSchemaFile * ownxsf = &c_schemaFile[SchemaRecord::OLD_SCHEMA_FILE];
+ XSchemaFile * masterxsf = &c_schemaFile[SchemaRecord::OLD_SCHEMA_FILE];
+ XSchemaFile * ownxsf = &c_schemaFile[SchemaRecord::NEW_SCHEMA_FILE];
ndbrequire(masterxsf->noOfPages == ownxsf->noOfPages);
const Uint32 noOfEntries = masterxsf->noOfPages * NDB_SF_PAGE_ENTRIES;
@@ -3953,12 +3964,15 @@ Dbdict::restartDropObj(Signal* signal,
case DictTabInfo::OrderedIndex:
Ptr<DropTableRec> opRecPtr;
seizeSchemaOp(op_ptr, opRecPtr);
+ ndbrequire(false);
break;
case DictTabInfo::Undofile:
case DictTabInfo::Datafile:
{
Ptr<DropFileRec> opRecPtr;
seizeSchemaOp(op_ptr, opRecPtr);
+ opRecPtr.p->m_request.file_id = tableId;
+ opRecPtr.p->m_request.file_version = entry->m_tableVersion;
break;
}
case DictTabInfo::Tablespace:
@@ -3966,6 +3980,8 @@ Dbdict::restartDropObj(Signal* signal,
{
Ptr<DropFilegroupRec> opRecPtr;
seizeSchemaOp(op_ptr, opRecPtr);
+ opRecPtr.p->m_request.filegroup_id = tableId;
+ opRecPtr.p->m_request.filegroup_version = entry->m_tableVersion;
break;
}
}
=== modified file 'storage/ndb/src/kernel/vm/VMSignal.hpp'
--- a/storage/ndb/src/kernel/vm/VMSignal.hpp 2007-12-23 12:52:25 +0000
+++ b/storage/ndb/src/kernel/vm/VMSignal.hpp 2008-10-10 11:39:51 +0000
@@ -213,7 +213,8 @@ NodeReceiverGroup::operator=(BlockRefere
inline
SectionHandle::SectionHandle(SimulatedBlock* b)
- : m_block(b)
+ : m_cnt(0),
+ m_block(b)
{
}
| Thread |
|---|
| • bzr commit into mysql-5.1 branch (jonas:2995) Bug#24631 | Jonas Oreland | 10 Oct |