all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH storage v2] fix #957 iscsi: improve check_connection logic
@ 2025-03-08 15:52 Victor Seva via pve-devel
  2025-03-11 14:35 ` Mira Limbeck
  0 siblings, 1 reply; 2+ messages in thread
From: Victor Seva via pve-devel @ 2025-03-08 15:52 UTC (permalink / raw)
  To: pve-devel; +Cc: Victor Seva

[-- Attachment #1: Type: message/rfc822, Size: 5986 bytes --]

From: Victor Seva <linuxmaniac@torreviejawireless.org>
To: pve-devel@lists.proxmox.com
Subject: [PATCH storage v2] fix #957 iscsi: improve check_connection logic
Date: Sat,  8 Mar 2025 16:52:29 +0100
Message-ID: <20250308155229.968380-1-linuxmaniac@torreviejawireless.org>

don't check tcp connection directly if there are already
sessions. Use iscsiadm command to check the sessions
status instead.

pvestatd is calling check_connection every 10 seconds.
This check produces a lot of noise at the iscsi server logging.

Signed-off-by: Victor Seva <linuxmaniac@torreviejawireless.org>
---
 src/PVE/Storage/ISCSIPlugin.pm | 42 ++++++++++++++++++++++++++++++----
 1 file changed, 37 insertions(+), 5 deletions(-)

diff --git a/src/PVE/Storage/ISCSIPlugin.pm b/src/PVE/Storage/ISCSIPlugin.pm
index eb70453..bcc281b 100644
--- a/src/PVE/Storage/ISCSIPlugin.pm
+++ b/src/PVE/Storage/ISCSIPlugin.pm
@@ -66,6 +66,25 @@ sub iscsi_test_portal {
     return PVE::Network::tcp_ping($server, $port || 3260, 2);
 }
 
+sub iscsi_test_session {
+    my ($sid) = @_;
+    my $cmd = [$ISCSIADM, '--mode', 'session', '--sid', $sid, '-P1'];
+
+    my $res = 0;
+    eval {
+        run_command($cmd, errmsg => 'iscsi session test failed', outfunc => sub {
+            my $line = shift;
+            if ($line =~ m/^\s+iSCSI Session State: LOGGED_IN\s*$/) {
+                $res = 1;
+            }
+        });
+    };
+    if (my $err = $@) {
+        die $err;
+    };
+    return $res;
+}
+
 sub iscsi_portals {
     my ($target, $portal_in) = @_;
 
@@ -560,11 +579,24 @@ sub activate_volume {
 sub check_connection {
     my ($class, $storeid, $scfg) = @_;
 
-    my $portals = iscsi_portals($scfg->{target}, $scfg->{portal});
-
-    for my $portal (@$portals) {
-	my $result = iscsi_test_portal($portal);
-	return $result if $result;
+    my $cache = {};
+    my $sessions = [];
+    eval {
+        $sessions = iscsi_session($cache, $scfg->{target});
+    };
+    if (my $err = $@) {
+        # no sessions, check portal via tcp
+        my $portals = iscsi_portals($scfg->{target}, $scfg->{portal});
+        for my $portal (@$portals) {
+            my $result = iscsi_test_portal($portal);
+            return $result if $result;
+        }
+        return 0;
+    }
+    # we have sessions, let's test them instead
+    for my $session (@$sessions) {
+        my $result = iscsi_test_session($session->{session_id});
+        return $result if $result;
     }
 
     return 0;
-- 
2.43.0



[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
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:[~2025-03-11 14:36 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-08 15:52 [pve-devel] [PATCH storage v2] fix #957 iscsi: improve check_connection logic Victor Seva via pve-devel
2025-03-11 14:35 ` Mira Limbeck

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal