--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

Chưa có ai nhận issue này.

Đánh giá

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

Hướng nghiên cứu

Trước tiên, hãy theo dõi việc xử lý pagehide/beforeunload của BrowserLifecycleService và quá trình dọn dẹp graceful dispose của ManagementConnection. Sau đó kiểm tra đường dẫn rút ngắn kết nối của RemoteExtensionHostAgentServer; hoàn tất khi một grace period được cấu hình vẫn tồn tại qua việc đóng tab và một kết nối thứ hai, trong khi các cài đặt sử dụng mặc định vẫn giữ nguyên hành vi mặc định.

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

Mô tả

bug needs-investigation

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

Ngôn ngữ chính
TypeScript
Star
79.4k
Fork
6.9k
Merge trung bình
2 ngày 13 giờ
Pull request đã merge (30 ngày)
39

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

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

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của coder/code-server

Tất cả issue của coder/code-server

Issue tương tự

Thêm issue về TypeScript

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.