[pve-devel] [PATCH] rbd : free_image : retry if rbd has watchers

Alexandre Derumier aderumier at odiso.com
Wed Nov 5 16:09:33 CET 2014


reported in drive-mirror,

if we cancel the job and we try to free the rbd volume,
it seem that rbd storage take 2-3 seconds to release the volume
or it's throwing an "image still has watchers".

This patch try to wait 10s with 10retries before dying

Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 PVE/Storage/RBDPlugin.pm |   15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm
index 1026d81..3bfff4c 100644
--- a/PVE/Storage/RBDPlugin.pm
+++ b/PVE/Storage/RBDPlugin.pm
@@ -409,7 +409,20 @@ sub free_image {
     run_rbd_command($cmd, errmsg => "rbd snap purge '$volname' error");
 
     $cmd = &$rbd_cmd($scfg, $storeid, 'rm', $name);
-    run_rbd_command($cmd, errmsg => "rbd rm '$volname' error");
+
+    my $i = 0;
+    while(1){
+	$i++;
+	eval {
+	    run_rbd_command($cmd, errmsg => "rbd rm '$volname' error");
+	};
+	my $err = $@;
+
+	sleep 1 if ($err && $err =~ m/image still has watchers/);
+
+	die "image still has watchers" if $i > 10;
+	last if !$err;
+    }
 
     return undef;
 }
-- 
1.7.10.4




More information about the pve-devel mailing list