[pve-devel] [PATCH v2 qemu-server] fix #2173: use file_size_info to check existence

Mira Limbeck m.limbeck at proxmox.com
Thu May 2 10:22:05 CEST 2019


On 4/30/19 3:14 PM, Dietmar Maurer wrote:
> maybe it is worth to introduce a volume_exists() helper?
Might be worth implementing if there are more places where we check for 
existence of an image or want different implementations for certain 
storage plugins.
>
>> On 30 April 2019 at 14:20 Mira Limbeck <m.limbeck at proxmox.com> wrote:
>>
>>
>> use file_size_info to check for existence of cloudinit disk instead of
>> '-e'. this should solve the problem with rbd where the path returned by
>> PVE::Storage::path is not checkable with '-e'. Any size > 0 is
>> interpreted as the image existing.
>>
>> Signed-off-by: Mira Limbeck <m.limbeck at proxmox.com>
>> ---
>> v2:
>>   - switched to file_size_info from list_images as it is by far less
>>     heavy on large storages. this was recommended by @Dominik instead of
>>     the 'map_volume' solution discussed previously as we don't have to
>>     map/unmap manually as qemu-img can work with 'rbd:...' paths.
>>
>> The code still matches on (qcow2|raw) even though it was fixed in
>> PVE/API2/Qemu.pm create_disks (bug 1829). Will fix that together with
>> the restore fix.
>>
>>   PVE/QemuServer/Cloudinit.pm | 7 ++++---
>>   1 file changed, 4 insertions(+), 3 deletions(-)
>>
>> diff --git a/PVE/QemuServer/Cloudinit.pm b/PVE/QemuServer/Cloudinit.pm
>> index 445c777..bda48f1 100644
>> --- a/PVE/QemuServer/Cloudinit.pm
>> +++ b/PVE/QemuServer/Cloudinit.pm
>> @@ -31,17 +31,18 @@ sub commit_cloudinit_disk {
>>       my $iso_path = PVE::Storage::path($storecfg, $drive->{file});
>>       my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
>>       my $format = PVE::QemuServer::qemu_img_format($scfg, $volname);
>> -    if (! -e $iso_path) {
>> +
>> +    my $size = eval { PVE::Storage::file_size_info($iso_path) };
>> +    if (!$size) {
>>   	$volname =~ m/(vm-$vmid-cloudinit(.(qcow2|raw))?)/;
>>   	my $name = $1;
>>   	my $d = PVE::Storage::vdisk_alloc($storecfg, $storeid, $vmid, $format, $name, 4 * 1024);
>> +	$size = PVE::Storage::file_size_info($iso_path);
>>       }
>>   
>>       my $plugin = PVE::Storage::Plugin->lookup($scfg->{type});
>>       $plugin->activate_volume($storeid, $scfg, $volname);
>>   
>> -    my $size = PVE::Storage::file_size_info($iso_path);
>> -
>>       eval {
>>   	run_command([['genisoimage', '-R', '-V', $label, $path],
>>   		     ['qemu-img', 'dd', '-n', '-f', 'raw', '-O', $format,
>> -- 
>> 2.11.0
>>
>>
>> _______________________________________________
>> pve-devel mailing list
>> pve-devel at pve.proxmox.com
>> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel




More information about the pve-devel mailing list