-
Notifications
You must be signed in to change notification settings - Fork 6
[Bug]: reverse tunnel 中断写入缺少跨 driver 原子提交与清理契约 #555
Copy link
Copy link
Open
Labels
Priority: MediumMedium priority issueMedium priority issueScope: Remote NodesPrimary/follower nodes, remote storage targets, and internal routingPrimary/follower nodes, remote storage targets, and internal routingScope: RuntimeRuntime lifecycle, async execution, tasks, and process-level performanceRuntime lifecycle, async execution, tasks, and process-level performanceScope: StorageStorage policies, connectors, drivers, provider capabilities, and storage backendsStorage policies, connectors, drivers, provider capabilities, and storage backendsScope: UploadUpload negotiation, sessions, staging, completion, and ingress consistencyUpload negotiation, sessions, staging, completion, and ingress consistencyStatus: ReadyTriaged and ready to start in its assigned milestoneTriaged and ready to start in its assigned milestone
Milestone
Description
Metadata
Metadata
Assignees
Labels
Priority: MediumMedium priority issueMedium priority issueScope: Remote NodesPrimary/follower nodes, remote storage targets, and internal routingPrimary/follower nodes, remote storage targets, and internal routingScope: RuntimeRuntime lifecycle, async execution, tasks, and process-level performanceRuntime lifecycle, async execution, tasks, and process-level performanceScope: StorageStorage policies, connectors, drivers, provider capabilities, and storage backendsStorage policies, connectors, drivers, provider capabilities, and storage backendsScope: UploadUpload negotiation, sessions, staging, completion, and ingress consistencyUpload negotiation, sessions, staging, completion, and ingress consistencyStatus: ReadyTriaged and ready to start in its assigned milestoneTriaged and ready to start in its assigned milestone
背景
reverse tunnel 的 shutdown / EOF / heartbeat 失败会终止 follower 侧 internal-storage 请求,但不同 storage driver 对“写入进行中连接断开”的结果没有统一的原子提交和清理合同。当前隧道层可以让 pending request 返回 transient error、取消 follower 本地请求,并在 Primary lane drop 时释放等待者;这只能保证传输层收尾,不能证明最终对象状态一致。
已确认的风险面
put_reader先写临时文件、校验 declared size 后 rename,失败路径相对明确。put_reader直接 create 最终远端路径并流式写入;连接中断可能留下可见的半对象,下一次重试还可能覆盖或读到错误内容。目标
建立跨 driver 的 interrupted-write contract:传输取消、Primary shutdown drain 超时、follower shutdown、EOF/reset、heartbeat timeout 和请求重试之后,调用方能明确知道对象是完整提交、未提交、可安全重试还是需要后台清理。
验收标准
success、declared-size mismatch、reader error、transport cancellation、peer disconnect、process shutdown、retry same key 的最终对象状态。