[pve-devel] [PATCH V3 qemu-server 4/6] add ignore-storage-errors for removing VM with missing storage
Stefan Hrdlicka
s.hrdlicka at proxmox.com
Tue Nov 15 15:22:36 CET 2022
On 11/15/22 13:17, Fiona Ebner wrote:
> Am 15.11.22 um 11:55 schrieb Stefan Hrdlicka:
>> @@ -2341,10 +2346,10 @@ sub destroy_vm {
>>
>> my $volid = $drive->{file};
>> return if !$volid || $volid =~ m|^/|;
>> -
>> - die "base volume '$volid' is still in use by linked cloned\n"
>> - if PVE::Storage::volume_is_base_and_used($storecfg, $volid);
>> -
>> + my $result;
>> + eval { $result = PVE::Storage::volume_is_base_and_used($storecfg, $volid) };
>> + die "Couldn't remove one or more disks: $@\n" if $@ && !$ignore_storage_errors;
>
> This error message is wrong. The check failed, not the removal. The
> check should be repeated in vdisk_free anyways and you should get the
> appropriate error then below :)
yes :).
>
> AFAIU base volumes should still survive if they are still referenced by
> linked clones, even when ignore-storage-errors is used (IMHO good). Is
> that correct?
Yes this is correct, the volumes still exist.
>
> Nothing new and not directly related:
> I noticed that for containers, we don't have this heads-up check. Maybe
> worth adding there too? Arguably minor issue is that I can have a
> container template with a disk on lvm-thin and a second disk on
> non-lvm-thin. Even if there is a linked clone, removing the template
> might remove the lvm-thin disk, and then fail, because the second disk
> is referenced.
maybe a good idea, I will look into that
>
>> + die "base volume '$volid' is still in use by linked cloned\n" if $result;
>> });
>> }
>>
>> @@ -2370,7 +2375,8 @@ sub destroy_vm {
>> include_unused => 1,
>> extra_keys => ['vmstate'],
>> };
>> - PVE::QemuConfig->foreach_volume_full($conf, $include_opts, $remove_owned_drive);
>> + eval { PVE::QemuConfig->foreach_volume_full($conf, $include_opts, $remove_owned_drive); };
>> + die "Couldn't remove one or more disks: $@\n" if $@ && !$ignore_storage_errors;
>
> So, $removed_owned_drive already ignores all storage errors beside if
> PVE::Storage::path() fails right? Can't we just add an eval around that
> and be done? No need for a new ignore-storage-errors parameter. Most
> storage errors are already ignored even without that parameter right
> now! I don't think it's a big issue to start ignoring the few missing
> ones as well?
Well I wasn't sure. Safe option was to tell the user that there is a
problem and then the user decides if something should be forced deleted.
But if you think this is fine without user input lets pretend this never
existed :).
>
>>
>> for my $snap (values %{$conf->{snapshots}}) {
>> next if !defined($snap->{vmstate});
More information about the pve-devel
mailing list