mirror of
https://github.com/MariaDB/server.git
synced 2025-08-05 13:16:09 +03:00
bug#6995 - fixed so that ndb_restore 4.1.8 can read files
created by 4.1.7 as bugfix changed binary format ndb/tools/restore/Restore.cpp: Fixed so that version 4.1.8 of restore can read files created by 4.1.7 ndb/tools/restore/Restore.hpp: Fixed so that version 4.1.8 of restore can read files created by 4.1.7 ndb/tools/restore/main.cpp: Fixed so that version 4.1.8 of restore can read files created by 4.1.7
This commit is contained in:
@@ -192,14 +192,15 @@ RestoreMetaData::readGCPEntry() {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
TableS::TableS(NdbTableImpl* tableImpl)
|
TableS::TableS(Uint32 version, NdbTableImpl* tableImpl)
|
||||||
: m_dictTable(tableImpl)
|
: m_dictTable(tableImpl)
|
||||||
{
|
{
|
||||||
m_dictTable = tableImpl;
|
m_dictTable = tableImpl;
|
||||||
m_noOfNullable = m_nullBitmaskSize = 0;
|
m_noOfNullable = m_nullBitmaskSize = 0;
|
||||||
m_auto_val_id= ~(Uint32)0;
|
m_auto_val_id= ~(Uint32)0;
|
||||||
m_max_auto_val= 0;
|
m_max_auto_val= 0;
|
||||||
|
backupVersion = version;
|
||||||
|
|
||||||
for (int i = 0; i < tableImpl->getNoOfColumns(); i++)
|
for (int i = 0; i < tableImpl->getNoOfColumns(); i++)
|
||||||
createAttr(tableImpl->getColumn(i));
|
createAttr(tableImpl->getColumn(i));
|
||||||
}
|
}
|
||||||
@@ -226,11 +227,10 @@ RestoreMetaData::parseTableDescriptor(const Uint32 * data, Uint32 len)
|
|||||||
|
|
||||||
debug << "parseTableInfo " << tableImpl->getName() << " done" << endl;
|
debug << "parseTableInfo " << tableImpl->getName() << " done" << endl;
|
||||||
|
|
||||||
TableS * table = new TableS(tableImpl);
|
TableS * table = new TableS(m_fileHeader.NdbVersion, tableImpl);
|
||||||
if(table == NULL) {
|
if(table == NULL) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
table->setBackupVersion(m_fileHeader.NdbVersion);
|
|
||||||
|
|
||||||
debug << "Parsed table id " << table->getTableId() << endl;
|
debug << "Parsed table id " << table->getTableId() << endl;
|
||||||
debug << "Parsed table #attr " << table->getNoOfAttributes() << endl;
|
debug << "Parsed table #attr " << table->getNoOfAttributes() << endl;
|
||||||
@@ -334,6 +334,27 @@ RestoreDataIterator::getNextTuple(int & res)
|
|||||||
Uint32 *buf_ptr = (Uint32*)_buf_ptr, *ptr = buf_ptr;
|
Uint32 *buf_ptr = (Uint32*)_buf_ptr, *ptr = buf_ptr;
|
||||||
ptr += m_currentTable->m_nullBitmaskSize;
|
ptr += m_currentTable->m_nullBitmaskSize;
|
||||||
Uint32 i;
|
Uint32 i;
|
||||||
|
for(i= 0; i < m_currentTable->m_fixedKeys.size(); i++){
|
||||||
|
assert(ptr < buf_ptr + dataLength);
|
||||||
|
|
||||||
|
const Uint32 attrId = m_currentTable->m_fixedKeys[i]->attrId;
|
||||||
|
|
||||||
|
AttributeData * attr_data = m_tuple.getData(attrId);
|
||||||
|
const AttributeDesc * attr_desc = m_tuple.getDesc(attrId);
|
||||||
|
|
||||||
|
const Uint32 sz = attr_desc->getSizeInWords();
|
||||||
|
|
||||||
|
attr_data->null = false;
|
||||||
|
attr_data->void_value = ptr;
|
||||||
|
|
||||||
|
if(!Twiddle(attr_desc, attr_data))
|
||||||
|
{
|
||||||
|
res = -1;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
ptr += sz;
|
||||||
|
}
|
||||||
|
|
||||||
for(i = 0; i < m_currentTable->m_fixedAttribs.size(); i++){
|
for(i = 0; i < m_currentTable->m_fixedAttribs.size(); i++){
|
||||||
assert(ptr < buf_ptr + dataLength);
|
assert(ptr < buf_ptr + dataLength);
|
||||||
|
|
||||||
@@ -678,6 +699,12 @@ void TableS::createAttr(NdbDictionary::Column *column)
|
|||||||
if (d->m_column->getAutoIncrement())
|
if (d->m_column->getAutoIncrement())
|
||||||
m_auto_val_id= d->attrId;
|
m_auto_val_id= d->attrId;
|
||||||
|
|
||||||
|
if(d->m_column->getPrimaryKey() && backupVersion <= MAKE_VERSION(4,1,7))
|
||||||
|
{
|
||||||
|
m_fixedKeys.push_back(d);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(!d->m_column->getNullable())
|
if(!d->m_column->getNullable())
|
||||||
{
|
{
|
||||||
m_fixedAttribs.push_back(d);
|
m_fixedAttribs.push_back(d);
|
||||||
|
@@ -123,6 +123,8 @@ class TableS {
|
|||||||
Uint32 schemaVersion;
|
Uint32 schemaVersion;
|
||||||
Uint32 backupVersion;
|
Uint32 backupVersion;
|
||||||
Vector<AttributeDesc *> allAttributesDesc;
|
Vector<AttributeDesc *> allAttributesDesc;
|
||||||
|
Vector<AttributeDesc *> m_fixedKeys;
|
||||||
|
//Vector<AttributeDesc *> m_variableKey;
|
||||||
Vector<AttributeDesc *> m_fixedAttribs;
|
Vector<AttributeDesc *> m_fixedAttribs;
|
||||||
Vector<AttributeDesc *> m_variableAttribs;
|
Vector<AttributeDesc *> m_variableAttribs;
|
||||||
|
|
||||||
@@ -138,7 +140,7 @@ class TableS {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
class NdbDictionary::Table* m_dictTable;
|
class NdbDictionary::Table* m_dictTable;
|
||||||
TableS (class NdbTableImpl* dictTable);
|
TableS (Uint32 version, class NdbTableImpl* dictTable);
|
||||||
~TableS();
|
~TableS();
|
||||||
|
|
||||||
Uint32 getTableId() const {
|
Uint32 getTableId() const {
|
||||||
|
@@ -247,11 +247,18 @@ main(int argc, char** argv)
|
|||||||
ndbout << "Failed to read " << metaData.getFilename() << endl << endl;
|
ndbout << "Failed to read " << metaData.getFilename() << endl << endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const BackupFormat::FileHeader & tmp = metaData.getFileHeader();
|
||||||
|
const Uint32 version = tmp.NdbVersion;
|
||||||
|
|
||||||
|
ndbout << "Ndb version in backup files: "
|
||||||
|
<< getVersionString(version, 0) << endl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check wheater we can restore the backup (right version).
|
* check wheater we can restore the backup (right version).
|
||||||
*/
|
*/
|
||||||
int res = metaData.loadContent();
|
int res = metaData.loadContent();
|
||||||
|
|
||||||
if (res == 0)
|
if (res == 0)
|
||||||
{
|
{
|
||||||
ndbout_c("Restore: Failed to load content");
|
ndbout_c("Restore: Failed to load content");
|
||||||
|
Reference in New Issue
Block a user