Skip to content

Commit

Permalink
Verify QCOW2 features on direct download of template
Browse files Browse the repository at this point in the history
  • Loading branch information
GutoVeronezi committed Nov 5, 2024
1 parent 18fe422 commit 256e77a
Showing 1 changed file with 18 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
import org.apache.cloudstack.storage.command.SnapshotAndCopyAnswer;
import org.apache.cloudstack.storage.command.SnapshotAndCopyCommand;
import org.apache.cloudstack.storage.command.SyncVolumePathCommand;
import org.apache.cloudstack.storage.formatinspector.Qcow2Inspector;
import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
import org.apache.cloudstack.storage.to.SnapshotObjectTO;
import org.apache.cloudstack.storage.to.TemplateObjectTO;
Expand Down Expand Up @@ -119,6 +120,7 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
Expand Down Expand Up @@ -2440,6 +2442,22 @@ public Answer handleDownloadTemplateToPrimaryStorage(DirectDownloadCommand cmd)

template = storagePoolMgr.createPhysicalDiskFromDirectDownloadTemplate(tempFilePath, destTemplatePath, destPool, cmd.getFormat(), cmd.getWaitInMillSeconds());

String templatePath = template.getPath();
if (templatePath != null) {
try {
Qcow2Inspector.validateQcow2File(templatePath);
} catch (RuntimeException e) {
try {
Files.deleteIfExists(Path.of(templatePath));
} catch (IOException ioException) {
s_logger.warn(String.format("Unable to remove file [%s]; consider removing it manually.", templatePath), ioException);
}

s_logger.error(String.format("The downloaded file [%s] is not a valid QCOW2.", templatePath), e);
return new DirectDownloadAnswer(false, "The downloaded file is not a valid QCOW2. Ask the administrator to check the logs for more details.", true);
}
}

if (!storagePoolMgr.disconnectPhysicalDisk(pool.getPoolType(), pool.getUuid(), destTemplatePath)) {
s_logger.warn("Unable to disconnect physical disk at path: " + destTemplatePath + ", in storage pool id: " + pool.getUuid());
}
Expand Down

0 comments on commit 256e77a

Please sign in to comment.