[pve-devel] applied: [PATCH v4 storage] fix #2085: Handle non-default mount point in path() by introducing new mountpoint property

Thomas Lamprecht t.lamprecht at proxmox.com
Thu Nov 21 12:51:45 CET 2019


On 11/18/19 11:45 AM, Fabian Ebner wrote:
> When adding a zfspool storage with 'pvesm add' the mount point is now added
> automatically to the storage configuration if it can be determined.
> path() does not assume the default mountpoint anymore, fixing 2085.
> 
> Signed-off-by: Fabian Ebner <f.ebner at proxmox.com>
> ---
> 
> Changes from v3:
>     * create a new 'mounpoint' property instead of using 'path', since
>       'path' is used to check whether storage is filesystem based
> 

applied, but removed the useless check_format call, as it was silenced
by the eval anyway.. Lets assume that when the mountpoint property is
invalid, ZFS cannot mount it anyway..

>  PVE/Storage/ZFSPoolPlugin.pm   | 31 +++++++++++++++++++++++++++++--
>  test/run_test_zfspoolplugin.pl | 26 ++++++++++++++------------
>  2 files changed, 43 insertions(+), 14 deletions(-)
> 
> diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm
> index b8adf1c..507795b 100644
> --- a/PVE/Storage/ZFSPoolPlugin.pm
> +++ b/PVE/Storage/ZFSPoolPlugin.pm
> @@ -32,6 +32,10 @@ sub properties {
>  	    description => "use sparse volumes",
>  	    type => 'boolean',
>  	},
> +	mountpoint => {
> +	    description => "mount point",
> +	    type => 'string', format => 'pve-storage-path',
> +	},
>      };
>  }
>  
> @@ -44,6 +48,7 @@ sub options {
>  	disable => { optional => 1 },
>  	content => { optional => 1 },
>  	bwlimit => { optional => 1 },
> +	mountpoint => { optional => 1 },
>      };
>  }
>  
> @@ -142,17 +147,39 @@ sub parse_volname {
>  
>  # virtual zfs methods (subclass can overwrite them)
>  
> +sub on_add_hook {
> +    my ($class, $storeid, $scfg, %param) = @_;
> +
> +    my $cfg_mountpoint = $scfg->{mountpoint};
> +    my $mountpoint;
> +
> +    # ignore failure, pool might currently not be imported
> +    eval {
> +	$mountpoint = $class->zfs_get_properties($scfg, 'mountpoint', $scfg->{pool}, 1);
> +	PVE::JSONSchema::check_format(properties()->{mountpoint}->{format}, $mountpoint);

.. ^^^^ was removed

> +    };
> +
> +    if (defined($cfg_mountpoint)) {
> +	if (defined($mountpoint) && !($cfg_mountpoint =~ m|^\Q$mountpoint\E/?$|)) {
> +	    warn "warning for $storeid - mountpoint: $cfg_mountpoint " .
> +		 "does not match current mount point: $mountpoint\n";
> +	}
> +    } else {
> +	$scfg->{mountpoint} = $mountpoint;
> +    }
> +}
> +
>  sub path {
>      my ($class, $scfg, $volname, $storeid, $snapname) = @_;
>  
>      my ($vtype, $name, $vmid) = $class->parse_volname($volname);
>  
>      my $path = '';
> +    my $mountpoint = $scfg->{mountpoint} // "/$scfg->{pool}";
>  
>      if ($vtype eq "images") {
>  	if ($name =~ m/^subvol-/ || $name =~ m/^basevol-/) {
> -	    # fixme: we currently assume standard mount point?!
> -	    $path = "/$scfg->{pool}/$name";
> +	    $path = "$mountpoint/$name";
>  	} else {
>  	    $path = "/dev/zvol/$scfg->{pool}/$name";
>  	}





More information about the pve-devel mailing list