mirror of
https://github.com/xcp-ng/xenadmin.git
synced 2024-11-25 06:16:37 +01:00
CP-38526/XSI-1055: Improved import performance for OVF/OVA packages with .vhd disks.
Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
This commit is contained in:
parent
df6f1ba65b
commit
493ed4cabe
@ -311,13 +311,23 @@ namespace XenAdmin.Actions.OvfActions
|
|||||||
|
|
||||||
#region OPEN DISK
|
#region OPEN DISK
|
||||||
|
|
||||||
long dataCapacity;
|
long dataLength;
|
||||||
|
long virtualSize;
|
||||||
|
string format = string.Empty;
|
||||||
|
|
||||||
if (VirtualDisk.SupportedDiskFormats.Any(f => ext.ToLower().EndsWith(f.ToLower())))
|
if (ext.ToLower().EndsWith(".vhd"))
|
||||||
|
{
|
||||||
|
vhdDisk = VirtualDisk.OpenDisk(sourcefile, FileAccess.Read);
|
||||||
|
virtualSize = vhdDisk.Capacity;
|
||||||
|
dataStream = File.OpenRead(filePath);
|
||||||
|
dataLength = dataStream.Length;
|
||||||
|
format = "vhd";
|
||||||
|
}
|
||||||
|
else if (VirtualDisk.SupportedDiskFormats.Any(f => ext.ToLower().EndsWith(f.ToLower())))
|
||||||
{
|
{
|
||||||
vhdDisk = VirtualDisk.OpenDisk(sourcefile, FileAccess.Read);
|
vhdDisk = VirtualDisk.OpenDisk(sourcefile, FileAccess.Read);
|
||||||
dataStream = vhdDisk.Content;
|
dataStream = vhdDisk.Content;
|
||||||
dataCapacity = vhdDisk.Capacity;
|
dataLength = virtualSize = vhdDisk.Capacity;
|
||||||
}
|
}
|
||||||
else if (ext.ToLower().EndsWith("iso"))
|
else if (ext.ToLower().EndsWith("iso"))
|
||||||
{
|
{
|
||||||
@ -328,7 +338,7 @@ namespace XenAdmin.Actions.OvfActions
|
|||||||
}
|
}
|
||||||
|
|
||||||
dataStream = File.OpenRead(filePath);
|
dataStream = File.OpenRead(filePath);
|
||||||
dataCapacity = dataStream.Length;
|
dataLength = virtualSize = dataStream.Length;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -351,17 +361,16 @@ namespace XenAdmin.Actions.OvfActions
|
|||||||
if (sr != null)
|
if (sr != null)
|
||||||
freespace = sr.physical_size - sr.physical_utilisation;
|
freespace = sr.physical_size - sr.physical_utilisation;
|
||||||
|
|
||||||
if (freespace < dataCapacity)
|
if (freespace < virtualSize)
|
||||||
throw new IOException(string.Format(Messages.SR_NOT_ENOUGH_SPACE,
|
throw new IOException(string.Format(Messages.SR_NOT_ENOUGH_SPACE,
|
||||||
sruuid, Util.DiskSizeString(dataCapacity), filename));
|
sruuid, Util.DiskSizeString(virtualSize), filename));
|
||||||
|
|
||||||
VDI newVdi = new VDI
|
VDI newVdi = new VDI
|
||||||
{
|
{
|
||||||
name_label = diskName,
|
name_label = diskName,
|
||||||
name_description = description,
|
name_description = description,
|
||||||
SR = new XenRef<SR>(sr == null ? Helper.NullOpaqueRef : sr.opaque_ref),//sr==null is unlikely
|
SR = new XenRef<SR>(sr == null ? Helper.NullOpaqueRef : sr.opaque_ref),//sr==null is unlikely
|
||||||
virtual_size = dataCapacity,
|
virtual_size = virtualSize,
|
||||||
physical_utilisation = dataCapacity,
|
|
||||||
type = vdi_type.user,
|
type = vdi_type.user,
|
||||||
sharable = false,
|
sharable = false,
|
||||||
read_only = false,
|
read_only = false,
|
||||||
@ -387,9 +396,9 @@ namespace XenAdmin.Actions.OvfActions
|
|||||||
vdiRef = new XenRef<VDI>(vdi.opaque_ref);
|
vdiRef = new XenRef<VDI>(vdi.opaque_ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (freespace < dataCapacity)
|
if (freespace < virtualSize)
|
||||||
throw new IOException(string.Format(Messages.VDI_NOT_ENOUGH_SPACE,
|
throw new IOException(string.Format(Messages.VDI_NOT_ENOUGH_SPACE,
|
||||||
vdiuuid, Util.DiskSizeString(dataCapacity), filename));
|
vdiuuid, Util.DiskSizeString(virtualSize), filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -405,8 +414,8 @@ namespace XenAdmin.Actions.OvfActions
|
|||||||
Host = Connection.Hostname,
|
Host = Connection.Hostname,
|
||||||
Port = Connection.Port,
|
Port = Connection.Port,
|
||||||
Path = "/import_raw_vdi",
|
Path = "/import_raw_vdi",
|
||||||
Query = string.Format("session_id={0}&task_id={1}&vdi={2}",
|
Query = string.Format("session_id={0}&task_id={1}&vdi={2}&format={3}",
|
||||||
Connection.Session.opaque_ref, taskRef.opaque_ref, vdiuuid)
|
Connection.Session.opaque_ref, taskRef.opaque_ref, vdiuuid, format)
|
||||||
};
|
};
|
||||||
|
|
||||||
using (Stream outStream = HTTPHelper.PUT(uriBuilder.Uri, dataStream.Length, true))
|
using (Stream outStream = HTTPHelper.PUT(uriBuilder.Uri, dataStream.Length, true))
|
||||||
@ -414,9 +423,9 @@ namespace XenAdmin.Actions.OvfActions
|
|||||||
b =>
|
b =>
|
||||||
{
|
{
|
||||||
Description = string.Format(Messages.IMPORT_VDI, filename,
|
Description = string.Format(Messages.IMPORT_VDI, filename,
|
||||||
Util.DiskSizeString(b, 2, "F2"), Util.DiskSizeString(dataCapacity));
|
Util.DiskSizeString(b, 2, "F2"), Util.DiskSizeString(dataLength));
|
||||||
|
|
||||||
updatePercentage((float)b / dataCapacity);
|
updatePercentage((float)b / dataLength);
|
||||||
},
|
},
|
||||||
() => Cancelling);
|
() => Cancelling);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user