now zfs will wait 5 sec if error msg is "dataset is busy"

Signed-off-by: Wolfgang Link <w.l...@proxmox.com>
---
 PVE/Storage/ZFSPoolPlugin.pm |   27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm
index 5cbd1b2..9609dd1 100644
--- a/PVE/Storage/ZFSPoolPlugin.pm
+++ b/PVE/Storage/ZFSPoolPlugin.pm
@@ -291,7 +291,32 @@ sub zfs_create_zvol {
 sub zfs_delete_zvol {
     my ($class, $scfg, $zvol) = @_;
 
-    $class->zfs_request($scfg, undef, 'destroy', '-r', "$scfg->{pool}/$zvol");
+    open(STDERR, ">/tmp/zfslog.txt");
+    eval {  $class->zfs_request($scfg, undef, 'destroy', '-r', 
"$scfg->{pool}/$zvol")};
+    close STDERR;
+    if ($@) {
+       my $error = $@;
+       open(my $fh,"<" ,"/tmp/zfslog.txt");
+
+       $/ = undef;
+       my $msg = <$fh>;
+       close $fh; 
+
+       unlink "/tmp/zfslog.txt";
+
+       if ($msg =~ m/dataset is busy/) {
+
+           for(my $i = 0; $error && $i < 5; $i++){
+               sleep(1);
+               eval {  $class->zfs_request($scfg, undef, 'destroy', '-r', 
"$scfg->{pool}/$zvol")};
+               $error = $@;
+           }
+           die print $msg.$error if $error;
+       } else {
+           die $msg.$error;
+       }
+    }
+    unlink "/tmp/zfslog.txt";
 }
 
 sub zfs_list_zvol {
-- 
1.7.10.4


_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to