apache / apache/cloudstack

consoleproxy.session.timeout is honoured for noVNC sessions but not legacy VNC/RDP/AJAX viewers

Offen
#13,858 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
component:console-proxy
Vorherrschende Sprache
Java
Sterne
3.1k
Forks
1.4k
Ø Merge
6 T. 19 Std.
Gemergte PRs (30 T.)
32

Beschreibung

### problem

`consoleproxy.session.timeout` is now honoured for noVNC console sessions (#12810, PR #13058), but VNC/RDP/AJAX-based console viewers still rely on a separate, hardcoded idle threshold: `ConsoleProxy.VIEWER_LINGER_SECONDS` (180 seconds), used by `isFrontEndAlive()` in `ConsoleProxyVncClient`, `ConsoleProxyRdpClient`, and `ConsoleProxyNoVncClient`.

This means the effective idle timeout for a console session now depends on which viewer/hypervisor path served it:

- noVNC sessions: idle timeout follows the configured `consoleproxy.session.timeout` (both via `ConsoleProxyGCThread` and, since PR #13058, the WebSocket session's own idle timeout).
- Legacy VNC/RDP/AJAX sessions: idle timeout is still fixed at 180 seconds regardless of the `consoleproxy.session.timeout` setting.

An admin who sets `consoleproxy.session.timeout` to, say, 30 minutes to keep long-idle sessions open will still see legacy VNC/RDP/AJAX sessions get dropped after 3 minutes — an inconsistency that's confusing and undocumented.

### versions

ACS 4.20+ (any branch carrying the PR #13058 / equivalent noVNC timeout fix)

### The steps to reproduce the bug

1. Set the global setting `consoleproxy.session.timeout` to a value well above 180000 ms (e.g. 1800000 ms / 30 minutes).
2. Open a console session that uses the legacy VNC/RDP/AJAX path (e.g. a hypervisor or console mode that doesn't route through noVNC).
3. Leave the session idle.
4. Observe the session is torn down after ~180 seconds, not after the configured `consoleproxy.session.timeout`.
5. Compare against a noVNC console session under the same setting, which correctly honours the configured value.

### What to do about it?

Derive `VIEWER_LINGER_SECONDS` from the same configured `consoleproxy.session.timeout` value (`ConsoleProxy.sessionTimeoutMillis`) instead of keeping it as an independent hardcoded constant, so all console viewer types (noVNC, VNC, RDP, AJAX) honour one single, consistently-configured idle timeout.

This was flagged during review of PR #13058 (https://github.com/apache/cloudstack/pull/13058#discussion_r3309508273) but deliberately left out of that PR's scope, since it's a noVNC-focused backport and touching `isFrontEndAlive()` for the legacy viewer types is a broader behavioural change that deserves its own review/testing pass.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit der Untersuchung von ConsoleProxy.VIEWER_LINGER_SECONDS, ConsoleProxy.sessionTimeoutMillis und isFrontEndAlive() in ConsoleProxyVncClient, ConsoleProxyRdpClient und ConsoleProxyNoVncClient. Reproduziere das Problem mit consoleproxy.session.timeout auf einen Wert über 180000 ms gesetzt und überprüfe anschließend, dass Legacy-VNC-, RDP-, AJAX- und noVNC-Sitzungen alle das konfigurierte Leerlauf-Timeout anstelle eines separaten Schwellenwerts von 180 Sekunden verwenden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Ruhig
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
68/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.