Files
flvx/plans/067-issue-342-offline-node-tunnel-edit.md
T
sagitchu 103290ed35 fix: 节点离线时允许删除隧道关联,但禁止新增隧道 (#342)
- prepareTunnelCreateState: 更新隧道时允许已关联的离线节点,仅拒绝新增的离线节点
- syncForwardServicesWithWarnings: 离线节点跳过下发并返回警告,不再硬性失败
- applyTunnelRuntime: 所有节点类型均支持离线错误延迟处理
- 前端 validateTunnelForm: 编辑模式下跳过离线节点验证

Closes #342
2026-03-28 19:30:30 +08:00

1.5 KiB

067 - Issue #342: Allow Tunnel Edit with Offline Nodes

Issue: https://github.com/Sagit-chu/flvx/issues/342

Problem

When a node goes offline, users cannot edit tunnel configurations at all — including removing the faulty offline node. This creates a deadlock where users must wait for the offline node to recover or manually edit the database.

Changes Required

Backend

  • 1. prepareTunnelCreateState (mutations.go:2800): Split the offline check into two modes:

    • Create (excludeTunnelID == 0): Keep current behavior — reject any offline non-remote node.
    • Update (excludeTunnelID > 0): Only reject newly added offline non-remote nodes. Allow existing offline nodes to remain (they'll be removed or kept). Query existing chain_tunnel records to determine which nodes are "old".
  • 2. syncForwardServicesWithWarnings (control_plane.go:231): When a node is offline (sendNodeCommand fails with "节点不在线"), skip it and add a warning instead of returning a hard error. This allows forward rule modifications to succeed partially.

  • 3. applyTunnelRuntime (mutations.go:3190): For non-remote local entry nodes, treat offline errors as deferrable (like remote nodes) so tunnel updates don't fail entirely when some nodes are offline.

Frontend

  • 4. validateTunnelForm (tunnel/form.ts): Change validation to only block adding NEW offline nodes. When editing, offline nodes that are being removed should not block submission. Add isEdit parameter to distinguish create vs. edit.