mirror of https://github.com/apache/cloudstack.git
Cleanup copied disks in case of failure copying from temporary storage
This commit is contained in:
parent
31bd9ed45c
commit
07453d0ab1
|
|
@ -156,12 +156,30 @@ public abstract class LibvirtBaseConvertCommandWrapper <T extends Command, A ext
|
|||
|
||||
String destinationName = UUID.randomUUID().toString();
|
||||
|
||||
KVMPhysicalDisk destinationDisk = storagePoolMgr.copyPhysicalDisk(sourceDisk, destinationName, destinationPool, 7200 * 1000);
|
||||
targetDisks.add(destinationDisk);
|
||||
try {
|
||||
KVMPhysicalDisk destinationDisk = storagePoolMgr.copyPhysicalDisk(sourceDisk, destinationName, destinationPool, 7200 * 1000);
|
||||
targetDisks.add(destinationDisk);
|
||||
} catch (Exception e) {
|
||||
String err = String.format("Error copying converted instance disk number %s from the temporary location %s" +
|
||||
" to destination storage pool %s: %s", i, sourceDisk.getPool().getLocalPath(), destinationPool.getUuid(), e.getMessage());
|
||||
logger.error(err, e);
|
||||
cleanupMovedDisksOnDestinationPool(targetDisks);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return targetDisks;
|
||||
}
|
||||
|
||||
private void cleanupMovedDisksOnDestinationPool(List<KVMPhysicalDisk> targetDisks) {
|
||||
if (CollectionUtils.isEmpty(targetDisks)) {
|
||||
return;
|
||||
}
|
||||
for (KVMPhysicalDisk disk : targetDisks) {
|
||||
logger.info(String.format("Cleaning up disk %s from pool %s after conversion", disk.getName(), disk.getPool().getUuid()));
|
||||
disk.getPool().deletePhysicalDisk(disk.getName(), Storage.ImageFormat.QCOW2);
|
||||
}
|
||||
}
|
||||
|
||||
protected UnmanagedInstanceTO getConvertedUnmanagedInstance(String baseName,
|
||||
List<KVMPhysicalDisk> vmDisks,
|
||||
LibvirtDomainXMLParser xmlParser) {
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ import com.cloud.hypervisor.kvm.storage.KVMPhysicalDisk;
|
|||
import com.cloud.hypervisor.kvm.storage.KVMStoragePool;
|
||||
import com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager;
|
||||
import com.cloud.resource.ResourceWrapper;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
|
||||
@ResourceWrapper(handles = ImportConvertedInstanceCommand.class)
|
||||
public class LibvirtImportConvertedInstanceCommandWrapper extends LibvirtBaseConvertCommandWrapper<ImportConvertedInstanceCommand, Answer, LibvirtComputingResource> {
|
||||
|
|
@ -71,6 +72,12 @@ public class LibvirtImportConvertedInstanceCommandWrapper extends LibvirtBaseCon
|
|||
cleanupDisksAndDomainFromTemporaryLocation(temporaryDisks, temporaryStoragePool, temporaryConvertUuid, true);
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(disks)) {
|
||||
String msg = String.format("Unable to import the converted disks for VM %s from destination pools", sourceInstanceName);
|
||||
logger.error(msg);
|
||||
return new ImportConvertedInstanceAnswer(cmd, false, msg);
|
||||
}
|
||||
|
||||
UnmanagedInstanceTO convertedInstanceTO = getConvertedUnmanagedInstance(temporaryConvertUuid,
|
||||
disks, xmlParser);
|
||||
return new ImportConvertedInstanceAnswer(cmd, convertedInstanceTO);
|
||||
|
|
|
|||
Loading…
Reference in New Issue