--- Begin Message ---
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);
+       };
     });
 
     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');
+
 my $verbose = undef;
 
 my $storagename = "zfstank99";
-- 
2.39.5



--- End Message ---
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to