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]
>
>
>
>
>
--
prev parent 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