coder / coder/code-server

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

Đang mở
#7,955 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
bug needs-investigation
Ngôn ngữ chính
TypeScript
Star
79.3k
Fork
6.8k
Merge trung bình
2 ngày 6 giờ
Pull request đã merge (30 ngày)
41

Mô tả

## 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).

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Trace BrowserLifecycleService's pagehide/beforeunload handling and ManagementConnection's graceful-dispose cleanup first. Then inspect RemoteExtensionHostAgentServer's connection-shortening path; done means a configured grace period survives tab closure and a second connection, while installations using the default retain stock behavior.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
typescript
Lĩnh vực
backend, web-dev
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Sôi nổi
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
55/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.