#At file:///home/jonas/src/telco-6.4/ based on revid:jonas@stripped
3033 Jonas Oreland 2009-09-23
ndb - bug#47542 - convert ALTER_TABLE_COMMITTED from 6.3 to SF_IN_USE in 7.0
during online upgrade, or else object will not be recreated,
causing mysteriuous subsequent failures
modified:
storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp
storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp
=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2009-09-21 08:42:40 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp 2009-09-23 12:01:24 +0000
@@ -1674,6 +1674,17 @@ void Dbdict::readSchemaConf(Signal* sign
return;
}
+ if (sf0->NdbVersion < NDB_MAKE_VERSION(6,4,0) &&
+ ! convertSchemaFileTo_6_4(xsf))
+ {
+ jam();
+ ndbrequire(! crashInd);
+ ndbrequire(fsPtr.p->fsState == FsConnectRecord::READ_SCHEMA1);
+ readSchemaRef(signal, fsPtr);
+ return;
+ }
+
+
for (Uint32 n = 0; n < xsf->noOfPages; n++) {
SchemaFile * sf = &xsf->schemaPage[n];
bool ok = false;
@@ -1814,6 +1825,48 @@ Dbdict::convertSchemaFileTo_5_0_6(XSchem
return true;
}
+bool
+Dbdict::convertSchemaFileTo_6_4(XSchemaFile * xsf)
+{
+ for (Uint32 i = 0; i < xsf->noOfPages; i++)
+ {
+ for (Uint32 j = 0; j < NDB_SF_PAGE_ENTRIES; j++)
+ {
+ Uint32 n = i * NDB_SF_PAGE_ENTRIES + j;
+ SchemaFile::TableEntry * transEntry = getTableEntry(xsf, n);
+
+ switch(SchemaFile::Old::TableState(transEntry->m_tableState)) {
+ case SchemaFile::Old::INIT:
+ transEntry->m_tableState = SchemaFile::SF_UNUSED;
+ break;
+ case SchemaFile::Old::ADD_STARTED:
+ transEntry->m_tableState = SchemaFile::SF_UNUSED;
+ break;
+ case SchemaFile::Old::TABLE_ADD_COMMITTED:
+ transEntry->m_tableState = SchemaFile::SF_IN_USE;
+ break;
+ case SchemaFile::Old::DROP_TABLE_STARTED:
+ transEntry->m_tableState = SchemaFile::SF_UNUSED;
+ break;
+ case SchemaFile::Old::DROP_TABLE_COMMITTED:
+ transEntry->m_tableState = SchemaFile::SF_UNUSED;
+ break;
+ case SchemaFile::Old::ALTER_TABLE_COMMITTED:
+ transEntry->m_tableState = SchemaFile::SF_IN_USE;
+ break;
+ case SchemaFile::Old::TEMPORARY_TABLE_COMMITTED:
+ transEntry->m_tableState = SchemaFile::SF_IN_USE;
+ break;
+ default:
+ transEntry->m_tableState = SchemaFile::SF_UNUSED;
+ break;
+ }
+ }
+ computeChecksum(xsf, i);
+ }
+ return true;
+}
+
/* **************************************************************** */
/* ---------------------------------------------------------------- */
/* MODULE: INITIALISATION MODULE ------------------------- */
@@ -3323,6 +3376,13 @@ void Dbdict::execSCHEMA_INFO(Signal* sig
ndbrequire(ok);
}
+ if (sf0->NdbVersion < NDB_MAKE_VERSION(6,4,0))
+ {
+ jam();
+ bool ok = convertSchemaFileTo_6_4(xsf);
+ ndbrequire(ok);
+ }
+
validateChecksum(xsf);
XSchemaFile * ownxsf = &c_schemaFile[SchemaRecord::NEW_SCHEMA_FILE];
@@ -3520,7 +3580,7 @@ void Dbdict::checkSchemaStatus(Signal* s
#ifdef PRINT_SCHEMA_RESTART
printf("checkSchemaStatus: pass: %d table: %d",
c_restartRecord.m_pass, tableId);
- ndbout << "old: " << *ownEntry << " new: " << *masterEntry;
+ ndbout << "old: " << *ownEntry << " new: " << *masterEntry << endl;
#endif
if (c_restartRecord.m_pass <= CREATE_OLD_PASS)
@@ -3932,6 +3992,11 @@ Dbdict::restartCreateObj(Signal* signal,
bool file){
jam();
+
+#ifdef PRINT_SCHEMA_RESTART
+ ndbout_c("restartCreateObj table: %u file: %u", tableId, Uint32(file));
+#endif
+
c_restartRecord.m_entry = *new_entry;
if(file)
{
=== modified file 'storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp'
--- a/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp 2009-09-19 06:30:50 +0000
+++ b/storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp 2009-09-23 12:01:24 +0000
@@ -3540,6 +3540,7 @@ private:
void closeReadSchemaConf(Signal* signal,
FsConnectRecordPtr fsPtr);
bool convertSchemaFileTo_5_0_6(XSchemaFile*);
+ bool convertSchemaFileTo_6_4(XSchemaFile*);
/* ------------------------------------------------------------ */
// Get table definitions
Attachment: [text/bzr-bundle] bzr/jonas@mysql.com-20090923120124-77yqh89segwchgy6.bundle
| Thread |
|---|
| • bzr commit into mysql-5.1-telco-7.0 branch (jonas:3033) Bug#47542 | Jonas Oreland | 23 Sep |