Below is the list of changes that have just been committed into a local
5.1 repository of root. When root does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet@stripped, 2007-01-26 11:04:40+08:00, gni@stripped +4 -0
BUG#24363 If the table structure has been changed, the restoring will fail.
storage/ndb/tools/restore/consumer.hpp@stripped, 2007-01-26 11:04:37+08:00,
gni@stripped +1 -0
The method is used to judge whether the table structure has been changed when
restoring the data.
storage/ndb/tools/restore/consumer_restore.cpp@stripped, 2007-01-26 11:04:37+08:00,
gni@stripped +51 -0
The method is used to judge whether the table structure has been changed when
restoring the data.
storage/ndb/tools/restore/consumer_restore.hpp@stripped, 2007-01-26 11:04:38+08:00,
gni@stripped +1 -0
The method is used to judge whether the table structure has been changed when
restoring the data.
storage/ndb/tools/restore/restore_main.cpp@stripped, 2007-01-26 11:04:38+08:00,
gni@stripped +12 -0
Before restoring the data, judge whether the table structure has been changes. If it
has been changed, restoring will fail.
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: gni
# Host: dev3-221.dev.cn.tlan
# Root: /home/ngb/mysql/mysql-5.1/mysql-5.1-bug24363
--- 1.50/storage/ndb/tools/restore/restore_main.cpp 2007-01-26 11:04:46 +08:00
+++ 1.51/storage/ndb/tools/restore/restore_main.cpp 2007-01-26 11:04:46 +08:00
@@ -590,6 +590,18 @@
{
if(_restore_data || _print_data)
{
+ for(i=0; i < metaData.getNoOfTables(); i++){
+ if (checkSysTable(metaData, i))
+ {
+ for(Uint32 j= 0; j < g_consumers.size(); j++)
+ if (!g_consumers[j]->table_equal(* metaData[i]))
+ {
+ err << "Restore: Failed to restore data, ";
+ err << metaData[i]->getTableName() << " table structure
doesn't match backup ... Exiting " << endl;
+ exitHandler(NDBT_FAILED);
+ }
+ }
+ }
RestoreDataIterator dataIter(metaData, &free_data_callback);
// Read data file header
--- 1.12/storage/ndb/tools/restore/consumer.hpp 2007-01-26 11:04:46 +08:00
+++ 1.13/storage/ndb/tools/restore/consumer.hpp 2007-01-26 11:04:46 +08:00
@@ -41,6 +41,7 @@
NODE_GROUP_MAP *m_nodegroup_map;
uint m_nodegroup_map_len;
virtual bool has_temp_error() {return false;}
+ virtual bool table_equal(const TableS &) {return true;}
};
#endif
--- 1.38/storage/ndb/tools/restore/consumer_restore.cpp 2007-01-26 11:04:46 +08:00
+++ 1.39/storage/ndb/tools/restore/consumer_restore.cpp 2007-01-26 11:04:46 +08:00
@@ -667,6 +667,57 @@
}
bool
+BackupRestore::table_equal(const TableS &tableS){
+ const char *tablename = tableS.getTableName();
+
+ if(tableS.m_dictTable == NULL){
+ ndbout<<"Table %s has no m_dictTable " << tablename << endl;
+ return true;
+ }
+ /**
+ * Ignore blob tables
+ */
+ if(match_blob(tablename) >= 0)
+ return true;
+
+ BaseString tmp(tablename);
+ Vector<BaseString> split;
+ if(tmp.split(split, "/") != 3){
+ err << "Invalid table name format " << tablename << endl;
+ return false;
+ }
+
+ m_ndb->setDatabaseName(split[0].c_str());
+ m_ndb->setSchemaName(split[1].c_str());
+
+ NdbDictionary::Dictionary* dict = m_ndb->getDictionary();
+ const NdbDictionary::Table* tab = dict->getTable(split[2].c_str());
+ if(tab == 0){
+ err << "Unable to find table: " << split[2].c_str() << endl;
+ return true;
+ }
+
+ if(tab->getNoOfColumns() != tableS.m_dictTable->getNoOfColumns())
+ {
+ ndbout_c("m_columns.size %d != %d",tab->getNoOfColumns(),
+ tableS.m_dictTable->getNoOfColumns());
+ return false;
+ }
+
+ for(int i = 0; i<tab->getNoOfColumns(); i++)
+ {
+ if(!tab->getColumn(i)->equal(*(tableS.m_dictTable->getColumn(i))))
+ {
+ ndbout_c("m_columns %s != %s",tab->getColumn(i)->getName(),
+ tableS.m_dictTable->getColumn(i)->getName());
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool
BackupRestore::createSystable(const TableS & tables){
const char *tablename = tables.getTableName();
--- 1.15/storage/ndb/tools/restore/consumer_restore.hpp 2007-01-26 11:04:46 +08:00
+++ 1.16/storage/ndb/tools/restore/consumer_restore.hpp 2007-01-26 11:04:46 +08:00
@@ -74,6 +74,7 @@
virtual bool finalize_table(const TableS &);
virtual bool has_temp_error();
virtual bool createSystable(const TableS & table);
+ virtual bool table_equal(const TableS & table);
virtual bool update_apply_status(const RestoreMetaData &metaData);
void connectToMysql();
bool map_in_frm(char *new_data, const char *data,
| Thread |
|---|
| • bk commit into 5.1 tree (gni:1.2343) BUG#24363 | gni | 26 Jan |