From c7616abcb278e2b888febc082b557f60676fc376 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Wed, 31 Aug 2016 10:29:08 +0200 Subject: [PATCH] path based storages: improve the mkdir option So far this only prevented the creation of the toplevel directory. This does not cover all problem cases, particularly when said directory is supposed to be a mount point, including NFS and glusterfs beside ZFS. The directory based storages we have already use mkpath whenever they need to create files, and for actions on files which are supposed to exist it's fine if it errors out. So it should also be safe to skip the creation of standard subdirectories in activate_storage(). Additionally NFS and glusterfs storages should also accept the mkdir option as they otherwise may exhibit similar issues, eg. when an NFS storage is mounted onto a directory inside a ZFS subvolume. --- PVE/Storage/GlusterfsPlugin.pm | 3 ++- PVE/Storage/NFSPlugin.pm | 3 ++- PVE/Storage/Plugin.pm | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/PVE/Storage/GlusterfsPlugin.pm b/PVE/Storage/GlusterfsPlugin.pm index 951db50..1e63e24 100644 --- a/PVE/Storage/GlusterfsPlugin.pm +++ b/PVE/Storage/GlusterfsPlugin.pm @@ -135,6 +135,7 @@ sub options { maxfiles => { optional => 1 }, content => { optional => 1 }, format => { optional => 1 }, + mkdir => { optional => 1 }, }; } @@ -272,7 +273,7 @@ sub activate_storage { if (!glusterfs_is_mounted($volume, $path, $cache->{mountdata})) { - mkpath $path; + mkpath $path if !(defined($scfg->{mkdir}) && !$scfg->{mkdir}); die "unable to activate storage '$storeid' - " . "directory '$path' does not exist\n" if ! -d $path; diff --git a/PVE/Storage/NFSPlugin.pm b/PVE/Storage/NFSPlugin.pm index df00f37..2f75eee 100644 --- a/PVE/Storage/NFSPlugin.pm +++ b/PVE/Storage/NFSPlugin.pm @@ -85,6 +85,7 @@ sub options { options => { optional => 1 }, content => { optional => 1 }, format => { optional => 1 }, + mkdir => { optional => 1 }, }; } @@ -129,7 +130,7 @@ sub activate_storage { # NOTE: only call mkpath when not mounted (avoid hang # when NFS server is offline - mkpath $path; + mkpath $path if !(defined($scfg->{mkdir}) && !$scfg->{mkdir}); die "unable to activate storage '$storeid' - " . "directory '$path' does not exist\n" if ! -d $path; diff --git a/PVE/Storage/Plugin.pm b/PVE/Storage/Plugin.pm index cdc89ba..6e73547 100644 --- a/PVE/Storage/Plugin.pm +++ b/PVE/Storage/Plugin.pm @@ -834,6 +834,8 @@ sub activate_storage { die "unable to activate storage '$storeid' - " . "directory '$path' does not exist\n" if ! -d $path; + return if defined($scfg->{mkdir}) && !$scfg->{mkdir}; + if (defined($scfg->{content})) { foreach my $vtype (keys %$vtype_subdirs) { # OpenVZMigrate uses backup (dump) dir -- 2.39.5