From c9eeac0131f3b4c09edd37146776633aa2c347df Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Wed, 18 Jul 2012 13:35:00 +0200 Subject: [PATCH] add check_connection in storage_check_enabled. Currently, if a storage have an infinite timeout (nfs hard option or iscsi with high timeout for failover), and if the storage is down or is doing ha failover with dual controller - pvestatd hang on storage_info. (So pve-manager see the host as down, and hang on differents parts, gui,rrds display) - pvedaemon hang on differents place (storage disk list,vm_status, hardware info,...) - I also see a lot of qemu-img info process hanging in uninterruptible sleep state with iscsi storage. This patch add a check to see if the storage is accessible. For nfs and iscsi : ping with a timeout of 2 second. (Maybe this can be polish with some kind of filesystem/storage read test with timeout...) Default for other storage plugins is to check nothing. (not a problem with sheepdog,ceph,libiscsi... as commands have timeout) Signed-off-by: Alexandre Derumier --- PVE/Storage.pm | 6 ++++++ PVE/Storage/Plugin.pm | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/PVE/Storage.pm b/PVE/Storage.pm index c86ce0c..4b0805c 100755 --- a/PVE/Storage.pm +++ b/PVE/Storage.pm @@ -93,6 +93,12 @@ sub storage_check_enabled { return undef; } + my $plugin = PVE::Storage::Plugin->lookup($scfg->{type}); + if (!$plugin->check_connection($storeid, $scfg)) { + die "storage '$storeid' is not available\n" if !$noerr; + return undef; + } + return storage_check_node($cfg, $storeid, $node, $noerr); } diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index 7c0e3e9..27f004c 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -579,4 +579,10 @@ sub deactivate_volume { # do nothing by default } +sub check_connection { + my ($class, $storeid, $scfg) = @_; + # do nothing by default + return 1; +} + 1;