public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Filip Schauer <f.schauer@proxmox.com>
To: Thomas Ellmenreich <t.ellmenreich@proxmox.com>,
	pve-devel@lists.proxmox.com
Subject: Re: [RFC pve-container 1/1] mountpoint backup: allow changing backup flag at runtime
Date: Mon, 31 Aug 2026 12:36:12 +0200	[thread overview]
Message-ID: <26b4609b-3645-4087-bb98-4eda32a7d177@proxmox.com> (raw)
In-Reply-To: <20260827122655.158754-1-t.ellmenreich@proxmox.com>

On 27/08/2026 14:27, Thomas Ellmenreich wrote:
> Previously, setting the backup flag of a running container would first
> place it into a pending state, before applying it at a later time. However,
> since the flag does not affect the actual mount point, it is now applied
> directly.
> 
> In situations where multiple settings are changed at once and backup
> happens to be one of them, the flag is not applied directly, but instead
> marked as pending alongside the other changes.
> 
> Suggested-by: Filip Schauer <f.schauer@proxmox.com>
> Signed-off-by: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
> ---
> Ticking the backup flag on a running mountpoint can be directly applied,
> even if the container is running, as it has no effect on the mountpoint
> itself.
> 
> This functionality is already present for VMs, but not for containers.
> 
> As also mentioned in the commit message, a change to the backup flag is
> only directly applied if it is the only change. In cases where other
> configuration changes are also made, all of them are set to pending as
> a single unit.
> 
> Open Questions
> --------------
> 
> - As far as I understand, qemu-server currently decides whether to change a
>    configuration at runtime based on a set of 'fast_plug_option's as well as a
>    set of 'non-hotpluggable options'. For the sake of simplicity, I have
>    decided to stick with a list of 'fast plug options'. Is this the right
>    approach? I considered creating an inverse list, but that would have
>    involved more work. Having 'pending' as the default is the correct approach,
>    in my opinion.

Sounds reasonable to me.

> 
> - Are there any other properties that could mabye be made fast-pluggable?

The `replicate` ("Skip Replication") property comes to mind.

> 
> - Instead of moving the skip and apply control flow into the
>    `apply_pending_mountpoint` subroutine, I considered leaving it where
>    it was and taking the config parsing to the caller. However, I decided
>    against this option, as delegating the config parsing to the caller
>    seemed like the wrong decision.
> 
> Testing
> -------
> 
> - Only changing the `backup` setting does precisely that, skipping the
>    pending state.
> 
> - When combining `backup` with changing a different setting, they are both
>    marked as pending.
> 
>   src/PVE/LXC/Config.pm | 29 +++++++++++++++++++++++++----
>   1 file changed, 25 insertions(+), 4 deletions(-)
> 
> diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
> index 7c81834..c28fb04 100644
> --- a/src/PVE/LXC/Config.pm
> +++ b/src/PVE/LXC/Config.pm
> @@ -3,6 +3,7 @@ package PVE::LXC::Config;
>   use strict;
>   use warnings;
>   
> +use List::Util qw(uniq first);
>   use Fcntl qw(O_RDONLY);
>   
>   use PVE::AbstractConfig;
> @@ -1741,10 +1742,6 @@ sub vmconfig_hotplug_pending {
>                       $hotplug_memory->($conf->{pending}->{memory}, $conf->{pending}->{swap});
>                   }
>               } elsif ($opt =~ m/^mp(\d+)$/) {
> -                if (exists($conf->{$opt})) {
> -                    die "skip\n"; # don't try to hotplug over existing mp
> -                }
> -
>                   $class->apply_pending_mountpoint($vmid, $conf, $opt, $storecfg, 1);
>                   # apply_pending_mountpoint modifies the value if it creates a new disk
>                   $value = $conf->{pending}->{$opt};
> @@ -1888,11 +1885,35 @@ my $rescan_volume = sub {
>       warn "Could not rescan volume size - $@\n" if $@;
>   };
>   
> +# Checks whether the changed properties can be applied at runtime. It only
> +# returns true if all changes can be applied in this way. If even one
> +# property cannot be applied, returns false to ensure changes are applied
> +# as a unit.
> +my $mountpoint_config_fast_plug_safe = sub {
> +    my ($new, $old) = @_;
> +    my @fast_plug_safe_keys = ("backup");
> +
> +    for my $key (uniq(keys %$new, keys %$old)) {
> +        next if first { $_ eq $key } @fast_plug_safe_keys;
> +        return 0 if ($new->{$key} // '') ne ($old->{$key} // '');

 From testing I noticed that when toggling `backup` on a mount point
specifying a custom `idmap`, the `backup` property is still marked as
pending.
The reason seems to be that this is comparing array references. Even if
the arrays both hold the same data, the references still differ.

> +    }
> +
> +    1;
> +};
> +
>   sub apply_pending_mountpoint {
>       my ($class, $vmid, $conf, $opt, $storecfg, $running) = @_;
>   
>       my $mp = $class->parse_volume($opt, $conf->{pending}->{$opt});
>       my $old = $conf->{$opt};
> +
> +    if (exists($conf->{$opt}) && $running) {
> +        if ($mountpoint_config_fast_plug_safe->($mp, $class->parse_volume($opt, $old))) {
> +            return;
> +        }
> +        die "skip\n"; # don't try to hotplug over existing mp

Doesn't this make the later `die "skip\n" if $running && defined($old);`
unreachable?

> +    }
> +
>       if ($mp->{type} eq 'volume' && $mp->{volume} =~ $PVE::LXC::NEW_DISK_RE) {
>           my $original_value = $conf->{pending}->{$opt};
>           my $vollist = PVE::LXC::create_disks(





      reply	other threads:[~2026-08-31 10:36 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-27 12:26 [RFC pve-container 1/1] mountpoint backup: allow changing backup flag at runtime Thomas Ellmenreich
2026-08-31 10:36 ` Filip Schauer [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=26b4609b-3645-4087-bb98-4eda32a7d177@proxmox.com \
    --to=f.schauer@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=t.ellmenreich@proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal