@@ -270,6 +270,7 @@ protected CopyCmdAnswer postProcessing(File destFile, String downloadPath, Strin
270270 newTemplTO .setPath (finalDownloadPath );
271271 newTemplTO .setName (finalFileName );
272272 newTemplTO .setSize (size );
273+ newTemplTO .setPhysicalSize (size );
273274 newDestTO = newTemplTO ;
274275 } else {
275276 VolumeObjectTO newVolTO = new VolumeObjectTO ();
@@ -505,6 +506,7 @@ protected Answer createTemplateFromSnapshot(CopyCommand cmd) {
505506 TemplateObjectTO template = new TemplateObjectTO ();
506507 template .setPath (swiftPath );
507508 template .setSize (templateFile .length ());
509+ template .setPhysicalSize (template .getSize ());
508510 SnapshotObjectTO snapshot = (SnapshotObjectTO )srcData ;
509511 template .setFormat (snapshot .getVolume ().getFormat ());
510512 return new CopyCmdAnswer (template );
@@ -718,6 +720,31 @@ private ImageFormat getTemplateFormat(String filePath) {
718720
719721 }
720722
723+ protected Long getVirtualSize (File file , ImageFormat format ) {
724+ Processor processor = null ;
725+ try {
726+ if (format == null ) {
727+ return file .length ();
728+ } else if (format == ImageFormat .QCOW2 ) {
729+ processor = new QCOW2Processor ();
730+ } else if (format == ImageFormat .OVA ) {
731+ processor = new VmdkProcessor ();
732+ } else if (format == ImageFormat .VHD ) {
733+ processor = new VhdProcessor ();
734+ }
735+
736+ if (processor == null ) {
737+ return file .length ();
738+ }
739+
740+ processor .configure ("template processor" , new HashMap <String , Object >());
741+ return processor .getVirtualSize (file );
742+ } catch (Exception e ) {
743+ s_logger .debug ("Failed to get virtual size:" ,e );
744+ }
745+ return file .length ();
746+ }
747+
721748 protected Answer copyFromNfsToS3 (CopyCommand cmd ) {
722749 final DataTO srcData = cmd .getSrcTO ();
723750 final DataTO destData = cmd .getDestTO ();
@@ -759,7 +786,8 @@ protected Answer copyFromNfsToS3(CopyCommand cmd) {
759786 if (destData .getObjectType () == DataObjectType .TEMPLATE ) {
760787 TemplateObjectTO newTemplate = new TemplateObjectTO ();
761788 newTemplate .setPath (key );
762- newTemplate .setSize (srcFile .length ());
789+ newTemplate .setSize (getVirtualSize (srcFile , format ));
790+ newTemplate .setPhysicalSize (srcFile .length ());
763791 newTemplate .setFormat (format );
764792 retObj = newTemplate ;
765793 } else if (destData .getObjectType () == DataObjectType .VOLUME ) {
0 commit comments