On May 5, 2025 4:24 pm, Fiona Ebner wrote: > Am 23.04.25 um 15:59 schrieb Fabian Grünbichler: >> this is a bit repetitive otherwise, no functional changes intended. >> >> Signed-off-by: Fabian Grünbichler <f.gruenbich...@proxmox.com> >> --- >> src/PVE/Storage/RBDPlugin.pm | 55 ++++++++++++++++++------------------ >> 1 file changed, 27 insertions(+), 28 deletions(-) >> >> diff --git a/src/PVE/Storage/RBDPlugin.pm b/src/PVE/Storage/RBDPlugin.pm >> index 3bb5807..6604bc3 100644 >> --- a/src/PVE/Storage/RBDPlugin.pm >> +++ b/src/PVE/Storage/RBDPlugin.pm >> @@ -96,7 +96,7 @@ my $rbd_cmd = sub { >> my $pool = $scfg->{pool} ? $scfg->{pool} : 'rbd'; >> push $cmd->@*, '-p', $pool; >> if (defined($scfg->{namespace})) { >> - push @$cmd, '--namespace', $cfg->{namespace}; >> + push @$cmd, '--namespace', $scfg->{namespace}; >> } >> } >> > > Should be squashed into previous commit.
ack > >> @@ -262,6 +262,25 @@ sub rbd_ls_snap { >> return $res; >> } >> >> +my sub rbd_protect_snap { >> + my ($scfg, $storeid, $image, $snap) = @_; >> + my (undef, undef, undef, $protected) = rbd_volume_info($scfg, $storeid, >> $image, $snap); >> + >> + if (!$protected){ > > Style nit: missing space between '){' ack > >> + my $snap_spec = get_rbd_path($scfg, $image, $snap); >> + my $cmd = $rbd_cmd->($scfg, $storeid, 'snap', 'protect', $snap_spec); >> + run_rbd_command($cmd, errmsg => "rbd protect '$snap_spec' error"); >> + } >> +} >> + > > >> @@ -580,15 +593,7 @@ sub clone_image { >> >> warn "clone $volname: $basename snapname $snap to $name\n"; >> >> - if (length($snapname)) { >> - my (undef, undef, undef, $protected) = rbd_volume_info($scfg, $storeid, >> $volname, $snapname); >> - >> - if (!$protected) { >> - my $snap_spec = get_rbd_path($scfg, $volname, $snapname); >> - my $cmd = $rbd_cmd->($scfg, $storeid, 'snap', 'protect', >> $snap_spec); >> - run_rbd_command($cmd, errmsg => "rbd protect '$snap_spec' error"); >> - } >> - } >> + rbd_protect_snap($scfg, $storeid, $volname, $snap) if length($snapname); > > Last argument should be $snapname not really - this is saying "protect the snapshot $snap if it is not the (already protected) '__base__' snapshot". probably the whole logic should be adapted to make this explicit though, e.g., something like: diff --git a/src/PVE/Storage/RBDPlugin.pm b/src/PVE/Storage/RBDPlugin.pm index 6604bc3..5c1a8e2 100644 --- a/src/PVE/Storage/RBDPlugin.pm +++ b/src/PVE/Storage/RBDPlugin.pm @@ -580,23 +580,26 @@ sub create_base { sub clone_image { my ($class, $scfg, $storeid, $volname, $vmid, $snapname) = @_; - my $snap = '__base__'; - $snap = $snapname if length $snapname; - my ($vtype, $basename, $basevmid, undef, undef, $isBase) = $class->parse_volname($volname); - die "$volname is not a base image and snapname is not provided\n" - if !$isBase && !length($snapname); + my $snap; + + if ($snapname) { + $snap = $snapname; + } elsif ($isBase) { + $snap = '__base__'; + } else { + die "$volname is not a base image and snapname is not provided\n"; + } my $name = $class->find_free_diskname($storeid, $scfg, $vmid); warn "clone $volname: $basename snapname $snap to $name\n"; - rbd_protect_snap($scfg, $storeid, $volname, $snap) if length($snapname); + rbd_protect_snap($scfg, $storeid, $volname, $snap) if $snap ne '__base__'; - my $newvol = "$basename/$name"; - $newvol = $name if length($snapname); + my $newvol = $snapname ? $name : "$basename/$name"; my @options = ( get_rbd_path($scfg, $basename, $snap), _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel