[P1][stability] stale reverse session을 ready queue/readiness에서 제거 #27

Closed
opened 2026-05-02 04:34:06 +00:00 by boxqkrtm · 1 comment

문제

ReverseSession::keepalive_loop()에서 write 실패 시 io = None으로 만들지만 해당 session이 RelayStream.ready queue에서 제거되지 않을 수 있습니다. ready_count()가 단순 queue length 기반이면 실제 사용 불가능한 session도 ready로 집계됩니다.

관련 후보:

  • crates/portal-relay/src/relay/stream.rs

영향

  • landing/status에서 service alive/readiness가 부정확
  • claim()이 stale session을 pop하기 전까지 상태가 실제보다 좋게 표시됨
  • 운영자가 relay 상태를 오판할 수 있음

제안

  • ready queue에 session id를 저장하고 keepalive 실패 시 해당 id 제거
  • ready_count()는 live session만 count
  • session 상태를 Active / Ready / Dead 등으로 모델링
  • stale cleanup 결과를 metric/log로 노출

완료 기준

  • keepalive 실패 session이 ready count에서 즉시 제외됨
  • stale session이 많은 상황에서도 readiness가 정확히 표시됨
  • stale reverse session cleanup 테스트 추가

검토 기준: 업로드된 Rust portal-relay 코드 정적 리뷰. 리뷰 환경에서는 cargo check/test/clippy를 실행하지 못했습니다.

## 문제 `ReverseSession::keepalive_loop()`에서 write 실패 시 `io = None`으로 만들지만 해당 session이 `RelayStream.ready` queue에서 제거되지 않을 수 있습니다. `ready_count()`가 단순 queue length 기반이면 실제 사용 불가능한 session도 ready로 집계됩니다. 관련 후보: - `crates/portal-relay/src/relay/stream.rs` ## 영향 - landing/status에서 service alive/readiness가 부정확 - `claim()`이 stale session을 pop하기 전까지 상태가 실제보다 좋게 표시됨 - 운영자가 relay 상태를 오판할 수 있음 ## 제안 - ready queue에 session id를 저장하고 keepalive 실패 시 해당 id 제거 - `ready_count()`는 live session만 count - session 상태를 `Active / Ready / Dead` 등으로 모델링 - stale cleanup 결과를 metric/log로 노출 ## 완료 기준 - keepalive 실패 session이 ready count에서 즉시 제외됨 - stale session이 많은 상황에서도 readiness가 정확히 표시됨 - stale reverse session cleanup 테스트 추가 --- 검토 기준: 업로드된 Rust `portal-relay` 코드 정적 리뷰. 리뷰 환경에서는 `cargo check/test/clippy`를 실행하지 못했습니다.
Owner

수용했습니다. PR #62에서 keepalive 실패 session을 ready queue에서 제거하고 ready_count()가 live session만 세도록 변경했습니다. 검증: cargo test --locked, cargo clippy --locked --all-targets -- -D warnings.

수용했습니다. PR #62에서 keepalive 실패 session을 ready queue에서 제거하고 ready_count()가 live session만 세도록 변경했습니다. 검증: cargo test --locked, cargo clippy --locked --all-targets -- -D warnings.
gofix closed this issue 2026-05-03 18:58:37 +00:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
gofix/portal-tunnel-rs#27
No description provided.