Changeset 71581 in vbox
- Timestamp:
- Mar 30, 2018 10:38:27 AM (6 years ago)
- Location:
- trunk/src/VBox/Main
- Files:
-
- 2 edited
-
include/MachineImplMoveVM.h (modified) (5 diffs)
-
src-server/MachineImplMoveVM.cpp (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/include/MachineImplMoveVM.h
r71053 r71581 37 37 typedef struct 38 38 { 39 bool fSnapshot; 39 40 Utf8Str strBaseName; 40 41 ComPtr<IMedium> pMedium; 41 42 uint32_t uIdx; 42 43 ULONG uWeight; 43 bool fSnapshot; 44 } MEDIUMTASK; 44 } MEDIUMTASKMOVE; 45 45 46 46 typedef struct 47 47 { 48 RTCList<MEDIUMTASK > chain;48 RTCList<MEDIUMTASKMOVE> chain; 49 49 DeviceType_T devType; 50 50 bool fCreateDiffs; 51 51 bool fAttachLinked; 52 } MEDIUMTASKCHAIN ;52 } MEDIUMTASKCHAINMOVE; 53 53 54 54 typedef struct … … 57 57 Utf8Str strSaveStateFile; 58 58 ULONG uWeight; 59 } SAVESTATETASK ;59 } SAVESTATETASKMOVE; 60 60 61 61 struct fileList_t; … … 87 87 static void i_MoveVMThreadTask(MachineMoveVM* task); 88 88 89 RTCList<MEDIUMTASKCHAIN > llMedias;90 RTCList<SAVESTATETASK > llSaveStateFiles;91 std::map<Utf8Str, MEDIUMTASK > finalMediumsMap;92 std::map<Utf8Str, SAVESTATETASK > finalSaveStateFilesMap;89 RTCList<MEDIUMTASKCHAINMOVE> llMedias; 90 RTCList<SAVESTATETASKMOVE> llSaveStateFiles; 91 std::map<Utf8Str, MEDIUMTASKMOVE> finalMediumsMap; 92 std::map<Utf8Str, SAVESTATETASKMOVE> finalSaveStateFilesMap; 93 93 std::map<VBoxFolder_t, Utf8Str> vmFolders; 94 94 … … 111 111 inline HRESULT queryBaseName(const ComPtr<IMedium> &pMedium, Utf8Str &strBaseName) const; 112 112 HRESULT queryMediasForAllStates(const std::vector<ComObjPtr<Machine> > &aMachineList); 113 void updateProgressStats(MEDIUMTASKCHAIN &mtc, ULONG &uCount, ULONG &uTotalWeight) const;113 void updateProgressStats(MEDIUMTASKCHAINMOVE &mtc, ULONG &uCount, ULONG &uTotalWeight) const; 114 114 HRESULT addSaveState(const ComObjPtr<Machine> &machine); 115 115 void printStateFile(settings::SnapshotsList &snl); … … 117 117 HRESULT getFolderSize(const Utf8Str& strRootFolder, uint64_t& size); 118 118 HRESULT deleteFiles(const RTCList<Utf8Str>& listOfFiles); 119 HRESULT updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASK >& listOfFiles,119 HRESULT updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASKMOVE>& listOfFiles, 120 120 const Utf8Str& sourcePath, const Utf8Str& targetPath); 121 HRESULT moveAllDisks(const std::map<Utf8Str, MEDIUMTASK >& listOfDisks, const Utf8Str* strTargetFolder = NULL);122 HRESULT restoreAllDisks(const std::map<Utf8Str, MEDIUMTASK >& listOfDisks);121 HRESULT moveAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks, const Utf8Str* strTargetFolder = NULL); 122 HRESULT restoreAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks); 123 123 bool isMediumTypeSupportedForMoving(const ComPtr<IMedium> &pMedium); 124 124 }; -
trunk/src/VBox/Main/src-server/MachineImplMoveVM.cpp
r71376 r71581 290 290 { 291 291 LONG64 cbSize = 0; 292 MEDIUMTASKCHAIN &mtc = llMedias.at(i);292 MEDIUMTASKCHAINMOVE &mtc = llMedias.at(i); 293 293 for (size_t a = mtc.chain.size(); a > 0; --a) 294 294 { … … 307 307 if (FAILED(rc)) throw rc; 308 308 309 std::pair<std::map<Utf8Str, MEDIUMTASK >::iterator,bool> ret;309 std::pair<std::map<Utf8Str, MEDIUMTASKMOVE>::iterator,bool> ret; 310 310 ret = finalMediumsMap.insert(std::make_pair(name, mtc.chain[a - 1])); 311 311 if (ret.second == true) … … 332 332 { 333 333 uint64_t cbFile = 0; 334 SAVESTATETASK &sst = llSaveStateFiles.at(i);334 SAVESTATETASKMOVE &sst = llSaveStateFiles.at(i); 335 335 336 336 Utf8Str name = sst.strSaveStateFile; … … 341 341 if (RT_SUCCESS(vrc)) 342 342 { 343 std::pair<std::map<Utf8Str, SAVESTATETASK >::iterator,bool> ret;343 std::pair<std::map<Utf8Str, SAVESTATETASKMOVE>::iterator,bool> ret; 344 344 ret = finalSaveStateFilesMap.insert(std::make_pair(name, sst)); 345 345 if (ret.second == true) … … 608 608 } 609 609 610 std::map<Utf8Str, SAVESTATETASK >::iterator itState = taskMoveVM->finalSaveStateFilesMap.begin();610 std::map<Utf8Str, SAVESTATETASKMOVE>::iterator itState = taskMoveVM->finalSaveStateFilesMap.begin(); 611 611 while (itState != taskMoveVM->finalSaveStateFilesMap.end()) 612 612 { 613 const SAVESTATETASK &sst = itState->second;613 const SAVESTATETASKMOVE &sst = itState->second; 614 614 const Utf8Str &strTrgSaveState = Utf8StrFmt("%s%c%s", strTrgSnapshotFolder.c_str(), RTPATH_DELIMITER, 615 615 RTPathFilename(sst.strSaveStateFile.c_str())); … … 940 940 } 941 941 942 HRESULT MachineMoveVM::moveAllDisks(const std::map<Utf8Str, MEDIUMTASK >& listOfDisks,942 HRESULT MachineMoveVM::moveAllDisks(const std::map<Utf8Str, MEDIUMTASKMOVE>& listOfDisks, 943 943 const Utf8Str* strTargetFolder) 944 944 { … … 950 950 951 951 try{ 952 std::map<Utf8Str, MEDIUMTASK >::const_iterator itMedium = listOfDisks.begin();952 std::map<Utf8Str, MEDIUMTASKMOVE>::const_iterator itMedium = listOfDisks.begin(); 953 953 while(itMedium != listOfDisks.end()) 954 954 { 955 const MEDIUMTASK &mt = itMedium->second;955 const MEDIUMTASKMOVE &mt = itMedium->second; 956 956 ComPtr<IMedium> pMedium = mt.pMedium; 957 957 Utf8Str strTargetImageName; … … 1014 1014 rc = pMedium->SetLocation(bstrLocation.raw(), moveDiskProgress.asOutParam()); 1015 1015 /* Wait until the async process has finished. */ 1016 1017 1016 rc = m_pProgress->WaitForAsyncProgressCompletion(moveDiskProgress); 1018 1017 1018 /*acquire the lock back*/ 1019 1019 machineLock.acquire(); 1020 1020 1021 if (FAILED(rc)) throw rc; 1021 1022 … … 1052 1053 } 1053 1054 1054 HRESULT MachineMoveVM::updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASK >& listOfFiles,1055 HRESULT MachineMoveVM::updatePathsToStateFiles(const std::map<Utf8Str, SAVESTATETASKMOVE>& listOfFiles, 1055 1056 const Utf8Str& sourcePath, const Utf8Str& targetPath) 1056 1057 { 1057 1058 HRESULT rc = S_OK; 1058 1059 1059 std::map<Utf8Str, SAVESTATETASK >::const_iterator itState = listOfFiles.begin();1060 std::map<Utf8Str, SAVESTATETASKMOVE>::const_iterator itState = listOfFiles.begin(); 1060 1061 while (itState != listOfFiles.end()) 1061 1062 { 1062 const SAVESTATETASK &sst = itState->second;1063 const SAVESTATETASKMOVE &sst = itState->second; 1063 1064 1064 1065 if (sst.snapshotUuid != Guid::Empty) … … 1292 1293 } 1293 1294 1294 MEDIUMTASKCHAIN mtc;1295 MEDIUMTASKCHAINMOVE mtc; 1295 1296 mtc.devType = deviceType; 1296 1297 … … 1313 1314 if (FAILED(rc)) throw rc; 1314 1315 1315 MEDIUMTASK mt;1316 MEDIUMTASKMOVE mt;// = {false, "basename", NULL, 0, 0}; 1316 1317 mt.strBaseName = bstrLocation; 1317 1318 Utf8Str strFolder = vmFolders[VBox_SnapshotFolder]; … … 1346 1347 { 1347 1348 uint32_t uIdx = 0; 1348 MEDIUMTASKCHAIN &mtc = llMedias.at(i);1349 MEDIUMTASKCHAINMOVE &mtc = llMedias.at(i); 1349 1350 for (size_t a = mtc.chain.size(); a > 0; --a) 1350 1351 mtc.chain[a - 1].uIdx = uIdx++; … … 1361 1362 if (!bstrSrcSaveStatePath.isEmpty()) 1362 1363 { 1363 SAVESTATETASK sst;1364 SAVESTATETASKMOVE sst; 1364 1365 1365 1366 sst.snapshotUuid = machine->i_getSnapshotId(); … … 1379 1380 } 1380 1381 1381 void MachineMoveVM::updateProgressStats(MEDIUMTASKCHAIN &mtc, ULONG &uCount, ULONG &uTotalWeight) const1382 void MachineMoveVM::updateProgressStats(MEDIUMTASKCHAINMOVE &mtc, ULONG &uCount, ULONG &uTotalWeight) const 1382 1383 { 1383 1384 … … 1391 1392 for (size_t e = mtc.chain.size(); e > 0; --e) 1392 1393 { 1393 MEDIUMTASK &mt = mtc.chain.at(e - 1);1394 MEDIUMTASKMOVE &mt = mtc.chain.at(e - 1); 1394 1395 mt.uWeight += uMaxWeight; 1395 1396
Note:
See TracChangeset
for help on using the changeset viewer.

