From: Date: October 10 2008 1:39pm Subject: bzr commit into mysql-5.1 branch (jonas:2995) Bug#24631 List-Archive: http://lists.mysql.com/commits/56020 X-Bug: 24631 Message-Id: <20081010113955.B5CBA91AF2E@perch.localdomain> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit #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 opRecPtr; seizeSchemaOp(op_ptr, opRecPtr); + ndbrequire(false); break; case DictTabInfo::Undofile: case DictTabInfo::Datafile: { Ptr 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 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) { }