- prepareTunnelCreateState: 更新隧道时允许已关联的离线节点,仅拒绝新增的离线节点 - syncForwardServicesWithWarnings: 离线节点跳过下发并返回警告,不再硬性失败 - applyTunnelRuntime: 所有节点类型均支持离线错误延迟处理 - 前端 validateTunnelForm: 编辑模式下跳过离线节点验证 Closes #342
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.