[pve-devel] [PATCH qemu-server] fix #2367: disallow 'PENDING' as snapshot name
Dominik Csapak
d.csapak at proxmox.com
Wed Sep 11 14:25:05 CEST 2019
On 9/11/19 1:26 PM, Thomas Lamprecht wrote:
> On 11.09.19 12:14, Dominik Csapak wrote:
>> this conflicts with our syntax of pending changes, so we have to forbid it
>> the check must be case-insensitive since we parse it that way from the config
>>
>> this may be reverted again sometime with 7.0 if we decide to change the
>> name of the pending section
>
> That cannot really happen, or? I mean I can have now a VM with pending changes
> and live migrate it just fine to a next PVE version, still having the changes
> pending?
>
> If, one would need to rewrite pending to something else, which cannot possibly
> be a snapshot name, 100% safe that could be done at a 7.0 transition (e.h., vm
> start incoming) and then allow it again in 8.0, when we can be safe that no such
> old pending section can exist?
>
> But IMO: 1. PITA, 2. it'd be easier to keep this dissalowed and add a new
> optional snapshot prefix for snapshot sections, which allows it, looking like:
> [snap:<snap-name>]
>
> or the-like..
yeah it was just a suggestion which would have been better in the
comment instead of the commit message
i just meant we could allow it again after dealing with the
pending/snapname syntax issue
>
>>
>> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
>> ---
>> PVE/API2/Qemu.pm | 3 +++
>> PVE/QemuServer.pm | 2 +-
>> 2 files changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
>> index 9db8967..9a73d04 100644
>> --- a/PVE/API2/Qemu.pm
>> +++ b/PVE/API2/Qemu.pm
>> @@ -3683,6 +3683,9 @@ __PACKAGE__->register_method({
>> die "unable to use snapshot name 'current' (reserved name)\n"
>> if $snapname eq 'current';
>>
>> + die "unable to use snapshot name '$snapname' (reserved name)\n"
>> + if $snapname =~ m/^pending$/i;
>
> FYI, we sometimes use lc for such checks, e.g.:
>
> if lc($snapname) eq 'pending';
>
> not sure what's faster, personally I prefer lc over regex+/i but that's
> probably just pure personal-taste.
i have no strong feeling for one or the other but according to
Benchmarks 'cmpthese', a comparison with lc($foo) == 'foo' vs $foo =~
m/^foo$/i shows
that lc is about 2 to 3 times faster
>
> Anyway look OK from a quick look. But could we not do that in AbstractConfig
> somewhere, to have it for container too (which will have pending sections soon)
i am not sure where exactly, i am not so versed in that code, but maybe
oguz can do that after his pending changes patches are applied?
(or maybe as part of it? @oguz)
>
>> +
>> my $realcmd = sub {
>> PVE::Cluster::log_msg('info', $authuser, "snapshot VM $vmid: $snapname");
>> PVE::QemuConfig->snapshot_create($vmid, $snapname, $param->{vmstate},
>> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
>> index 7128723..5295c22 100644
>> --- a/PVE/QemuServer.pm
>> +++ b/PVE/QemuServer.pm
>> @@ -2834,7 +2834,7 @@ sub write_vm_config {
>> &$cleanup_config($conf->{pending}, 1);
>>
>> foreach my $snapname (keys %{$conf->{snapshots}}) {
>> - die "internal error" if $snapname eq 'pending';
>> + die "internal error" if $snapname =~ m/^pending$/i;
>> &$cleanup_config($conf->{snapshots}->{$snapname}, undef, $snapname);
>> }
>>
>>
>
More information about the pve-devel
mailing list