On November 7, 2019 12:52 pm, Fabian Ebner wrote: > On 11/7/19 9:34 AM, Fabian Grünbichler wrote: >> On November 6, 2019 1:46 pm, Fabian Ebner wrote: >>> A new mountpoint property is added to the schema for ZFSPool storages. >>> When needed for the first time, the current mount point is determined and >>> written to the storage config. >>> >>> Signed-off-by: Fabian Ebner <f.eb...@proxmox.com> >>> --- >>> PVE/Storage/ZFSPoolPlugin.pm | 25 +++++++++++++++++++++++-- >>> 1 file changed, 23 insertions(+), 2 deletions(-) >>> >>> diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm >>> index 16fb0d6..44c8123 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 }, >>> }; >>> } >>> >>> @@ -148,11 +153,27 @@ sub path { >>> my ($vtype, $name, $vmid) = $class->parse_volname($volname); >>> >>> my $path = ''; >>> + my $mountpoint = $scfg->{mountpoint}; >>> + >>> + # automatically write mountpoint to storage config if it is not present >>> + if (!$mountpoint) { >>> + $mountpoint = $class->zfs_request($scfg, undef, 'get', '-o', 'value', >>> + 'mountpoint', '-H', $scfg->{pool}); >>> + chomp($mountpoint); >>> + >>> + eval { >>> + PVE::Storage::lock_storage_config(sub { >>> + my $cfg = PVE::Storage::config(); >>> + $cfg->{ids}->{$storeid}->{mountpoint} = $mountpoint; >>> + PVE::Storage::write_config($cfg); >>> + }, "update storage config failed"); >>> + }; >>> + warn $@ if $@; >>> + } >>> >>> 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"; >>> } >> >> it would be great if this "get mountpoint property of dataset" (or better: >> even "get arbitrary properties of dataset") helper could be factored out. >> we already have two calls to "zfs get -Hp '...' $dataset" that could >> re-use such a helper. >> >> then we could add a single check in activate_storage (maybe just for the >> branch where we actually just imported the pool?) to verify that the >> stored mountpoint value is correct, and if not update it (or warn about >> the problem). that check could have a very low timeout, and errors could >> be ignored since it is just a double-check. >> >> _______________________________________________ >> pve-devel mailing list >> pve-devel@pve.proxmox.com >> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel >> > > I noticed that the $scfg parameter in zfs_request is never used. Should > I clean that up? Otherwise I'd need to include the $scfg parameter in > the helper function as well, where it also isn't needed.
it's used by ZFS over iSCSI, where the plugin is derived from ZFSPoolPlugin, so it's not safe to remove ;) _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel