coder / coder/code-server

--reconnection-grace-time does not survive closing the browser tab

未關閉
#7,955 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
bug needs-investigation
主要語言
TypeScript
星號
79.3k
分支
6.8k
平均合併
2 天 6 小時
30 天內合併 PR
41

描述

## Problem

`--reconnection-grace-time` (added in #7678) is documented as *"Override the reconnection grace time in seconds. Clients who disconnect for longer than this duration will need to reload the window."*

In practice the setting cannot deliver that, for two independent reasons.

**1. Closing the tab bypasses the grace time entirely.**

`BrowserLifecycleService` listens on `pagehide`/`beforeunload` and runs the workbench shutdown, which disposes the remote connection *gracefully*. On the server, `ManagementConnection` treats a graceful dispose as a finished client:

```
Event.once(this.protocol.onDidDispose)(() => {
this._log(`The client has disconnected gracefully, so the connection will be disposed.`);
this._cleanResources();
});
```

`_cleanResources()` runs immediately — the grace time is never consulted. So closing the tab kills the session regardless of the configured value.

**2. A second connection cuts the grace time to 5 minutes.**

`RemoteExtensionHostAgentServer` shortens every disconnected connection on each new connection:

```
for (const key in this._managementConnections) {
this._managementConnections[key].shortenReconnectionGraceTimeIfNecessary();
}
```

which schedules `ProtocolConstants.ReconnectionShortGraceTime` (5 min). Opening a second tab is enough to cut a deliberately long grace time back down.

## Impact

The use case the flag exists for — leave a long-running task (a build, a CLI, an agent session) running and come back to it later — does not work. The session is gone as soon as the browser is closed.

## Expected

When an operator raises `--reconnection-grace-time` above the default, a disconnected session should survive for the configured duration, including across a closed browser. Installations that never set the flag should keep Code's stock behaviour.

## Environment

Reproduced on code-server 4.128.0 and confirmed present in `main` (4.133.0 / Code 1.133.0).

貢獻指南

開啟貢獻指南

研究方向

首先追蹤 BrowserLifecycleService 對 pagehide/beforeunload 的處理,以及 ManagementConnection 的 graceful dispose 清理。接著檢查 RemoteExtensionHostAgentServer 的連線縮短路徑;當設定的 grace period 能在分頁關閉和第二次連線後繼續生效,同時使用預設設定的安裝保留原有行為時,即表示完成。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
typescript
領域
backend, web-dev
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
活躍
描述清晰度
基本清楚
新手友好度
55/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。