List:Commits« Previous MessageNext Message »
From:Jonas Oreland Date:September 23 2009 12:01pm
Subject:bzr commit into mysql-5.1-telco-7.0 branch (jonas:3033) Bug#47542
View as plain text  
#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#47542Jonas Oreland23 Sep