bool BackupRestore::object(Uint32 type, const void * ptr) { if (!m_restore_meta) return true; NdbDictionary::Dictionary* dict = m_ndb->getDictionary(); switch(type){ case DictTabInfo::Tablespace: { NdbDictionary::Tablespace old(*(NdbDictionary::Tablespace*)ptr); Uint32 id = old.getObjectId(); if (!m_no_restore_disk) { NdbDictionary::LogfileGroup * lg = m_logfilegroups[old.getDefaultLogfileGroupId()]; old.setDefaultLogfileGroup(* lg); info << "Creating tablespace: " << old.getName() << "..." << flush; int ret = dict->createTablespace(old); if (ret) { NdbError errobj= dict->getNdbError(); info << "FAILED" << endl; err << "Create tablespace failed: " << old.getName() << ": " << errobj << endl; return false; } info << "done" << endl; } NdbDictionary::Tablespace curr = dict->getTablespace(old.getName()); NdbError errobj = dict->getNdbError(); if ((int) errobj.classification == (int) ndberror_cl_none) { NdbDictionary::Tablespace* currptr = new NdbDictionary::Tablespace(curr); NdbDictionary::Tablespace * null = 0; m_tablespaces.set(currptr, id, null); debug << "Retreived tablespace: " << currptr->getName() << " oldid: " << id << " newid: " << currptr->getObjectId() << " " << (void*)currptr << endl; return true; } err << "Failed to retrieve tablespace \"" << old.getName() << "\": " << errobj << endl; return false; break; } case DictTabInfo::LogfileGroup: { NdbDictionary::LogfileGroup old(*(NdbDictionary::LogfileGroup*)ptr); Uint32 id = old.getObjectId(); if (!m_no_restore_disk) { info << "Creating logfile group: " << old.getName() << "..." << flush; int ret = dict->createLogfileGroup(old); if (ret) { NdbError errobj= dict->getNdbError(); info << "FAILED" << endl; err << "Create logfile group failed: " << old.getName() << ": " << errobj << endl; return false; } info << "done" << endl; } NdbDictionary::LogfileGroup curr = dict->getLogfileGroup(old.getName()); NdbError errobj = dict->getNdbError(); if ((int) errobj.classification == (int) ndberror_cl_none) { NdbDictionary::LogfileGroup* currptr = new NdbDictionary::LogfileGroup(curr); NdbDictionary::LogfileGroup * null = 0; m_logfilegroups.set(currptr, id, null); debug << "Retreived logfile group: " << currptr->getName() << " oldid: " << id << " newid: " << currptr->getObjectId() << " " << (void*)currptr << endl; return true; } err << "Failed to retrieve logfile group \"" << old.getName() << "\": " << errobj << endl; return false; break; } case DictTabInfo::Datafile: { if (!m_no_restore_disk) { NdbDictionary::Datafile old(*(NdbDictionary::Datafile*)ptr); NdbDictionary::ObjectId objid; old.getTablespaceId(&objid); NdbDictionary::Tablespace * ts = m_tablespaces[objid.getObjectId()]; debug << "Connecting datafile " << old.getPath() << " to tablespace: oldid: " << objid.getObjectId() << " newid: " << ts->getObjectId() << endl; old.setTablespace(* ts); info << "Creating datafile \"" << old.getPath() << "\"..." << flush; if (dict->createDatafile(old)) { NdbError errobj= dict->getNdbError(); info << "FAILED" << endl; err << "Create datafile failed: " << old.getPath() << ": " << errobj << endl; return false; } info << "done" << endl; } return true; break; } case DictTabInfo::Undofile: { if (!m_no_restore_disk) { NdbDictionary::Undofile old(*(NdbDictionary::Undofile*)ptr); NdbDictionary::ObjectId objid; old.getLogfileGroupId(&objid); NdbDictionary::LogfileGroup * lg = m_logfilegroups[objid.getObjectId()]; debug << "Connecting undofile " << old.getPath() << " to logfile group: oldid: " << objid.getObjectId() << " newid: " << lg->getObjectId() << " " << (void*)lg << endl; old.setLogfileGroup(* lg); info << "Creating undofile \"" << old.getPath() << "\"..." << flush; if (dict->createUndofile(old)) { NdbError errobj= dict->getNdbError(); info << "FAILED" << endl; err << "Create undofile failed: " << old.getPath() << ": " << errobj << endl; return false; } info << "done" << endl; } return true; break; } } return true; }
int NDBT_Tables::create_default_tablespace(Ndb* pNdb) { NdbDictionary::Dictionary* pDict = pNdb->getDictionary(); int res; NdbDictionary::LogfileGroup lg = pDict->getLogfileGroup("DEFAULT-LG"); if (strcmp(lg.getName(), "DEFAULT-LG") != 0) { lg.setName("DEFAULT-LG"); lg.setUndoBufferSize(8*1024*1024); res = pDict->createLogfileGroup(lg); if(res != 0){ g_err << "Failed to create logfilegroup:" << endl << pDict->getNdbError() << endl; return NDBT_FAILED; } } { NdbDictionary::Undofile uf = pDict->getUndofile(0, "undofile01.dat"); if (strcmp(uf.getPath(), "undofile01.dat") != 0) { uf.setPath("undofile01.dat"); uf.setSize(32*1024*1024); uf.setLogfileGroup("DEFAULT-LG"); res = pDict->createUndofile(uf, true); if(res != 0){ g_err << "Failed to create undofile:" << endl << pDict->getNdbError() << endl; return NDBT_FAILED; } } } { NdbDictionary::Undofile uf = pDict->getUndofile(0, "undofile02.dat"); if (strcmp(uf.getPath(), "undofile02.dat") != 0) { uf.setPath("undofile02.dat"); uf.setSize(32*1024*1024); uf.setLogfileGroup("DEFAULT-LG"); res = pDict->createUndofile(uf, true); if(res != 0){ g_err << "Failed to create undofile:" << endl << pDict->getNdbError() << endl; return NDBT_FAILED; } } } NdbDictionary::Tablespace ts = pDict->getTablespace("DEFAULT-TS"); if (strcmp(ts.getName(), "DEFAULT-TS") != 0) { ts.setName("DEFAULT-TS"); ts.setExtentSize(1024*1024); ts.setDefaultLogfileGroup("DEFAULT-LG"); res = pDict->createTablespace(ts); if(res != 0){ g_err << "Failed to create tablespace:" << endl << pDict->getNdbError() << endl; return NDBT_FAILED; } } { NdbDictionary::Datafile df = pDict->getDatafile(0, "datafile01.dat"); if (strcmp(df.getPath(), "datafile01.dat") != 0) { df.setPath("datafile01.dat"); df.setSize(64*1024*1024); df.setTablespace("DEFAULT-TS"); res = pDict->createDatafile(df, true); if(res != 0){ g_err << "Failed to create datafile:" << endl << pDict->getNdbError() << endl; return NDBT_FAILED; } } } { NdbDictionary::Datafile df = pDict->getDatafile(0, "datafile02.dat"); if (strcmp(df.getPath(), "datafile02.dat") != 0) { df.setPath("datafile02.dat"); df.setSize(64*1024*1024); df.setTablespace("DEFAULT-TS"); res = pDict->createDatafile(df, true); if(res != 0){ g_err << "Failed to create datafile:" << endl << pDict->getNdbError() << endl; return NDBT_FAILED; } } } return NDBT_OK; }