> Alexandre Derumier via pve-devel <pve-devel@lists.proxmox.com> hat am > 11.03.2025 11:28 CET geschrieben: > > > _______________________________________________ > pve-devel mailing list > pve-devel@lists.proxmox.com > https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel > Signed-off-by: Alexandre Derumier <alexandre.derum...@groupe-cyllene.com> > --- > src/PVE/Storage.pm | 18 +++++++++++++++++- > src/test/run_test_zfspoolplugin.pl | 18 ++++++++++++++++++ > 2 files changed, 35 insertions(+), 1 deletion(-) > > diff --git a/src/PVE/Storage.pm b/src/PVE/Storage.pm > index 79e5c3a..4012905 100755 > --- a/src/PVE/Storage.pm > +++ b/src/PVE/Storage.pm > @@ -1052,7 +1052,23 @@ sub vdisk_free { > > my (undef, undef, undef, undef, undef, $isBase, $format) = > $plugin->parse_volname($volname); > - $cleanup_worker = $plugin->free_image($storeid, $scfg, $volname, > $isBase, $format); > + > + $cleanup_worker = sub { > + #remove external snapshots > + activate_volumes($cfg, [ $volid ]); > + my $snapshots = PVE::Storage::volume_snapshot_info($cfg, $volid); > + for my $snapid (sort { $snapshots->{$b}->{order} <=> > $snapshots->{$a}->{order} } keys %$snapshots) { > + my $snap = $snapshots->{$snapid}; > + next if $snapid eq 'current'; > + next if !$snap->{volid}; > + next if !$snap->{ext}; > + my ($snap_storeid, $snap_volname) = > parse_volume_id($snap->{volid}); > + my (undef, undef, undef, undef, undef, $snap_isBase, > $snap_format) = > + $plugin->parse_volname($volname); > + $plugin->free_image($snap_storeid, $scfg, $snap_volname, > $snap_isBase, $snap_format); > + } > + $plugin->free_image($storeid, $scfg, $volname, $isBase, $format);
this is the wrong place to do this, you need to handle this in the cleanup worker returned by the plugin and still execute it here.. also you need to honor saferemove when cleaning up the snapshots > + }; > }); > > return if !$cleanup_worker; > diff --git a/src/test/run_test_zfspoolplugin.pl > b/src/test/run_test_zfspoolplugin.pl > index 095ccb3..4ff9f22 100755 > --- a/src/test/run_test_zfspoolplugin.pl > +++ b/src/test/run_test_zfspoolplugin.pl > @@ -6,12 +6,30 @@ use strict; > use warnings; > > use Data::Dumper qw(Dumper); > +use Test::MockModule; > + > use PVE::Storage; > use PVE::Cluster; > use PVE::Tools qw(run_command); > +use PVE::RPCEnvironment; > use Cwd; > $Data::Dumper::Sortkeys = 1; > > +my $rpcenv_module; > +$rpcenv_module = Test::MockModule->new('PVE::RPCEnvironment'); > +$rpcenv_module->mock( > + get_user => sub { > + return 'root@pam'; > + }, > + fork_worker => sub { > + my ($self, $dtype, $id, $user, $function, $background) = @_; > + $function->(123456); > + return '123456'; > + } > +); > + > +my $rpcenv = PVE::RPCEnvironment->init('pub'); > + what? why? no explanation? > my $verbose = undef; > > my $storagename = "zfstank99"; > -- > 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel