public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH storage] iscsi: fix activation of second iSCSI storage on other cluster nodes
@ 2024-11-05 16:37 Friedrich Weber
  2024-11-11 21:18 ` [pve-devel] applied: " Thomas Lamprecht
  0 siblings, 1 reply; 2+ messages in thread
From: Friedrich Weber @ 2024-11-05 16:37 UTC (permalink / raw)
  To: pve-devel

Assume a cluster that already has an iSCSI storage A configured. After
adding a new iSCSI storage B with a different target on node 1, B will
only become active on node 1, not on the other nodes. On other nodes,
pvestatd logs 'storage B is not online'. The storage does not become
available even after a reboot. A workaround is to manually perform
iSCSI discovery against B's targets on the other nodes once.

This happens because the connectivity check of the iSCSI plugin on
node B does not correctly handle the case that iscsiadm already knows
portals (i.e., A's portals) but not B's portals.

The connectivity check calls `iscsi_portals` to determine the portals
to ping, which calls `iscsiadm -m node` to query all known portals,
and extracts all portals to the storage's target. If the iscsiadm
command fails, `iscsi_portals` returns the portal given in the storage
config. This works as expected if the storage is the first iSCSI
storage, because then iscsiadm does not know any portals and thus
exits with code 21.

However, since there already is an iSCSI storage A, iscsiadm exits
cleanly but its output does not contain any portals for B's target.
Hence, `iscsi_portals` returns an empty array of portals, so the
connectivity check fails and node 2 never performs discovery for B.

To fix this, let `iscsi_portals` also return the portal from B's
storage config if iscsiadm exited cleanly but its output contained no
matching portal.

Signed-off-by: Friedrich Weber <f.weber@proxmox.com>
---
 src/PVE/Storage/ISCSIPlugin.pm | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/src/PVE/Storage/ISCSIPlugin.pm b/src/PVE/Storage/ISCSIPlugin.pm
index 2e3d6ee..0211bbe 100644
--- a/src/PVE/Storage/ISCSIPlugin.pm
+++ b/src/PVE/Storage/ISCSIPlugin.pm
@@ -86,12 +86,14 @@ sub iscsi_portals {
 	});
     };
 
-    if ($@) {
-	warn $@;
+    my $err = $@;
+    warn $err if $err;
+
+    if ($err || !scalar(@$res)) {
 	return [ $portal_in ];
+    } else {
+	return $res;
     }
-
-    return $res;
 }
 
 sub iscsi_discovery {
-- 
2.39.5



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


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

* [pve-devel] applied: [PATCH storage] iscsi: fix activation of second iSCSI storage on other cluster nodes
  2024-11-05 16:37 [pve-devel] [PATCH storage] iscsi: fix activation of second iSCSI storage on other cluster nodes Friedrich Weber
@ 2024-11-11 21:18 ` Thomas Lamprecht
  0 siblings, 0 replies; 2+ messages in thread
From: Thomas Lamprecht @ 2024-11-11 21:18 UTC (permalink / raw)
  To: Proxmox VE development discussion, Friedrich Weber

Am 05.11.24 um 17:37 schrieb Friedrich Weber:
> Assume a cluster that already has an iSCSI storage A configured. After
> adding a new iSCSI storage B with a different target on node 1, B will
> only become active on node 1, not on the other nodes. On other nodes,
> pvestatd logs 'storage B is not online'. The storage does not become
> available even after a reboot. A workaround is to manually perform
> iSCSI discovery against B's targets on the other nodes once.
> 
> This happens because the connectivity check of the iSCSI plugin on
> node B does not correctly handle the case that iscsiadm already knows
> portals (i.e., A's portals) but not B's portals.
> 
> The connectivity check calls `iscsi_portals` to determine the portals
> to ping, which calls `iscsiadm -m node` to query all known portals,
> and extracts all portals to the storage's target. If the iscsiadm
> command fails, `iscsi_portals` returns the portal given in the storage
> config. This works as expected if the storage is the first iSCSI
> storage, because then iscsiadm does not know any portals and thus
> exits with code 21.
> 
> However, since there already is an iSCSI storage A, iscsiadm exits
> cleanly but its output does not contain any portals for B's target.
> Hence, `iscsi_portals` returns an empty array of portals, so the
> connectivity check fails and node 2 never performs discovery for B.
> 
> To fix this, let `iscsi_portals` also return the portal from B's
> storage config if iscsiadm exited cleanly but its output contained no
> matching portal.
> 
> Signed-off-by: Friedrich Weber <f.weber@proxmox.com>
> ---
>  src/PVE/Storage/ISCSIPlugin.pm | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
>

applied, thanks!


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


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

end of thread, other threads:[~2024-11-11 21:18 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-11-05 16:37 [pve-devel] [PATCH storage] iscsi: fix activation of second iSCSI storage on other cluster nodes Friedrich Weber
2024-11-11 21:18 ` [pve-devel] applied: " Thomas Lamprecht

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