fix: add forward port occupancy validation and runtime residual cleanup (#278)

* fix: tolerate service not found during forward deletion

- Refactor deleteForwardServicesOnNode to handle not-found errors gracefully
- Extract deleteForwardServiceCandidates helper for reuse
- Add tests for not-found tolerance scenarios
- Ensures compatibility with legacy node versions

Entire-Checkpoint: a3bacf836c57

* fix: add forward port occupancy validation and runtime residual cleanup

- Add forward port occupancy validation on create/update paths
- Extend self-occupy recovery to clean residual candidate service names
- Add regression tests for address-in-use recovery with legacy runtime residue

Fixes port conflict issues when upgrading from 2.1.6 to later versions

Entire-Checkpoint: fb0a2aee4cb5
This commit is contained in:
sagit
2026-03-06 10:57:07 +08:00
committed by GitHub
parent c10f894afd
commit 1db5452be9
5 changed files with 131 additions and 6 deletions
@@ -0,0 +1,13 @@
# 014 Forward Port Occupancy Validation
## Checklist
- [x] Confirm current forward create/update only validates node port range and misses DB-backed occupancy checks for local nodes.
- [x] Add shared forward port occupancy validation for create/update paths before runtime dispatch.
- [x] Add focused tests covering create/update validation when another forward already uses the same node+port.
- [x] Run focused backend handler tests and record the result.
## Test Record
- Command: `cd go-backend && go test ./internal/http/handler/...`
- Result: passed.
@@ -0,0 +1,13 @@
# 015 Forward Runtime Port Residual Cleanup
## Checklist
- [x] Confirm 2.1.6 used service names with `_0` runtime base while later versions may target resolved `user_tunnel_id`, leaving old runtime services behind after direct upgrade.
- [x] Extend self-occupy recovery to clean residual candidate service names and retry update/add when the port is only occupied by self-owned legacy runtime services.
- [x] Add regression tests covering address-in-use recovery with legacy `_0` runtime residue.
- [x] Run focused backend handler tests and record the result.
## Test Record
- Command: `cd go-backend && go test ./internal/http/handler/...`
- Result: passed.