public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH storage 1/2] zfs: only use cache when listing images locally
@ 2022-11-07 11:00 Fiona Ebner
  2022-11-07 11:00 ` [pve-devel] [PATCH storage 2/2] zfs: list zvol: list single pool only for remote ZFS Fiona Ebner
  2022-11-16 11:18 ` [pve-devel] [PATCH storage 1/2] zfs: only use cache when listing images locally Fabian Grünbichler
  0 siblings, 2 replies; 6+ messages in thread
From: Fiona Ebner @ 2022-11-07 11:00 UTC (permalink / raw)
  To: pve-devel

The plugin for remote ZFS storages currently also uses the same
list_images() as the plugin for local ZFS storages. The issue with
this is that there is only one cache which does not remember the
target host where the information originated.

Simply restrict the cache to be used for the local ZFS plugin only. An
alternative solution would be to use a cache for each target host, but
that seems a bit more involved and could still be added in the future.

For example, issues can happen during rescan:
1. Via list_images() and zfs_list_zvol(), ZFSPlugin.pm's zfs_request()
   is executed for a remote ZFS.
2. $cache->{zfs} is set to the result of scanning the images there.
3. Another list_images() for a local ZFS storage happens and uses the
   cache with the wrong information.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 PVE/Storage/ZFSPlugin.pm     | 7 +++++++
 PVE/Storage/ZFSPoolPlugin.pm | 8 +++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/PVE/Storage/ZFSPlugin.pm b/PVE/Storage/ZFSPlugin.pm
index d4dc2a4..1379bcf 100644
--- a/PVE/Storage/ZFSPlugin.pm
+++ b/PVE/Storage/ZFSPlugin.pm
@@ -419,4 +419,11 @@ sub deactivate_volume {
     return 1;
 }
 
+sub list_images {
+    my ($class, $storeid, $scfg, $vmid, $vollist, $cache) = @_;
+
+    my $zfs_list = $class->zfs_list_zvol($scfg);
+    return $class->zfs_list_images($storeid, $scfg, $vmid, $vollist, $zfs_list);
+}
+
 1;
diff --git a/PVE/Storage/ZFSPoolPlugin.pm b/PVE/Storage/ZFSPoolPlugin.pm
index e264fde..0fa18ce 100644
--- a/PVE/Storage/ZFSPoolPlugin.pm
+++ b/PVE/Storage/ZFSPoolPlugin.pm
@@ -255,10 +255,16 @@ sub list_images {
     my ($class, $storeid, $scfg, $vmid, $vollist, $cache) = @_;
 
     $cache->{zfs} = $class->zfs_list_zvol($scfg) if !$cache->{zfs};
+    return $class->zfs_list_images($storeid, $scfg, $vmid, $vollist, $cache->{zfs});
+}
+
+sub zfs_list_images {
+    my ($class, $storeid, $scfg, $vmid, $vollist, $zfs_list) = @_;
+
     my $zfspool = $scfg->{pool};
     my $res = [];
 
-    if (my $dat = $cache->{zfs}->{$zfspool}) {
+    if (my $dat = $zfs_list->{$zfspool}) {
 
 	foreach my $image (keys %$dat) {
 
-- 
2.30.2





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-11-29  9:50 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-07 11:00 [pve-devel] [PATCH storage 1/2] zfs: only use cache when listing images locally Fiona Ebner
2022-11-07 11:00 ` [pve-devel] [PATCH storage 2/2] zfs: list zvol: list single pool only for remote ZFS Fiona Ebner
2022-11-16 11:18 ` [pve-devel] [PATCH storage 1/2] zfs: only use cache when listing images locally Fabian Grünbichler
2022-11-16 13:30   ` Fiona Ebner
2022-11-28 12:19     ` Fiona Ebner
2022-11-29  9:50       ` Fabian Grünbichler

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal