On 07/28/2016 03:32 PM, Fabian Grünbichler wrote:
upon a client crash/kill, there is a 30 second timeout until
the associated watcher is removed. until then, removing the
image is not possible.

krbd does not suffer from this, because "rbd map/unmap"
makes the watcher creation and destruction explicit.
---
Note: the pve-access-control patch series for worker stopping
is not strictly required for this to work, but makes the
user experience a lot better.

  PVE/Storage/RBDPlugin.pm | 13 ++++++++++++-
  1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/PVE/Storage/RBDPlugin.pm b/PVE/Storage/RBDPlugin.pm
index 7a08ff5..96b41e5 100644
--- a/PVE/Storage/RBDPlugin.pm
+++ b/PVE/Storage/RBDPlugin.pm
@@ -458,7 +458,18 @@ 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");
+    eval {
+       run_rbd_command($cmd, errmsg => "rbd rm '$volname' error");
+    };
+    my $err = $@;
+
+    if ($err && !$scfg->{krbd} && $err =~ m/image still has watchers$/) {
+       warn "Waiting 30s for rbd client to timeout before removing\n";
+       sleep 30;


such sleep is not reliable, because it can be interrupted by signal.

_______________________________________________
pve-devel mailing list
[email protected]
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to