public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Wolfgang Bumiller <w.bumiller@proxmox.com>
To: Thomas Ellmenreich <t.ellmenreich@proxmox.com>
Cc: pve-devel@lists.proxmox.com
Subject: Re: [RFC pve-container 1/1] mountpoint backup: allow changing backup flag at runtime
Date: Thu, 17 Sep 2026 12:05:16 +0200	[thread overview]
Message-ID: <2utjzzswvd7qte6xpafhknjo3ssfllikhxh7vg63qc6lcubdsl@epsuqq2o27h7> (raw)
In-Reply-To: <DL6G8ZLSYZOV.KY6LJB3ZIHLP@proxmox.com>

On Fri, Sep 04, 2026 at 12:11:19PM +0200, Thomas Ellmenreich wrote:
> On Mon Aug 31, 2026 at 12:36 PM CEST, Filip Schauer wrote:
> 
> [snip]
> 
> >> +# 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 {

Newer code can use `my sub` instead of variables.

> >> +    my ($new, $old) = @_;
> >> +    my @fast_plug_safe_keys = ("backup");

↑ It's more convenient to have this as a hash, and quicker if it's
outside the sub.

my %FAST_PLUG_MP_OPTIONS = (backup => 1, replicate => 1);

> >> +
> >> +    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.
> 
> Ack, thanks for this, stupid mistake.

Not really. And in perl quite annoying.

It should not be too difficult to implement a comparison, but on the
other hand, we *could* look at it this way:
- We have a fixed set of keys which can be changed.
- We do not care which value they get.
- But other keys need to remain the same.
So we could just *delete* those keys from both parsed mount point hashes
and then then call `print_volume` and string-compare the result.
It utilizes `print_property_string` which should be sorting the values
and thus produce a consistent result.

> 
> >
> >> +    }
> >> +
> >> +    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?
> 
> Good catch, yes. I think it will be unreachable, although I'm not sure what to
> do with the open #TODO, especially since I don't quite understand what the
> exact meaning of "changing" is in this context.

Yeah we can then drop that line.

The case above it is more obvious, the one below less so: they allow
allocating or adding-in a *new* disk. Anything else is a "change" to
something already mounted. But changes to mount points are tricky. If we
only want to change flags, like "read-only", it technically requires
making sure it gets applied to all mount *points* (from a VFS point of
view), unless we can apply the change to the superblock instead.
Changing file systems or replacing a disk is even worse, as then there
are open file handles as well.

> 
> ```perl
> if ($mp->{type} eq 'volume' && $mp->{volume} =~ $PVE::LXC::NEW_DISK_RE) {
>     # more code
> } else {
>     die "skip\n" if $running && defined($old); # TODO: "changing" mount points?
>     # more code
> }
> ```
> 
> [snip]
> 
> 
> 
> 
> 

-- 




      reply	other threads:[~2026-09-17 10:05 UTC|newest]

Thread overview: 4+ 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
2026-09-04 10:11   ` Thomas Ellmenreich
2026-09-17 10:05     ` Wolfgang Bumiller [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=2utjzzswvd7qte6xpafhknjo3ssfllikhxh7vg63qc6lcubdsl@epsuqq2o27h7 \
    --to=w.bumiller@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