mirror of
https://github.com/deepseek-ai/3FS.git
synced 2026-11-05 00:47:47 +00:00
[GH-ISSUE #345] storage failover的场景,个别target处于OFFLINE状态,无法自愈 #212
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
deepseek-ai/3FS#212
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @kaede11 on GitHub (Sep 30, 2025).
Original GitHub issue: https://github.com/deepseek-ai/3FS/issues/345
出现问题的场景如下:
三副本同步NodeA -> NodeB -> NodeC,在写数据时,最后一个节点NodeC完成了commit操作,返回response给前驱节点前进程crash了,当前在处理的chunk的状态如下:
updateVer == commitVer == $seqNum
chunkState == COMMIT
而此时,前驱节点engine的状态如下
updateVer == $seqNum
commitVer == $seqNum - 1
chunkState == CLEAN
此时NodeC重启恢复数据,在跟NodeB进行resync期间,在如下阶段报错返回
`
`
这个场景算是个常规case,长期卡在OFFLINE的状态,应该是不符合预期的。此外,代码中判断meta.chainVer != vChainId.chainVer也有点匪夷所思,有哪些特殊考虑吗? 为什么要拿chain最新的版本去跟engine存量数据去比较?NodeC停服期间,chainVer还是有可能发生变化的。
修复:
是不是可以考虑在meta.chainVer != vChainId.chainVer判断之前,跳过remoteMeta.chunkState == ChunkState::COMMIT的case?
@SF-Zhou commented on GitHub (Sep 30, 2025):
建议查看一下详细的 chunk meta 信息,如果已经走到了
meta.checksum != remoteMeta.checksum的判断,那么意味着 meta.chainVer == removeMeta.chainVer,仍然都处于旧的 crash 前的 chain 版本上,此时二者的 checksum 数据应该是完全一致的(没有新的写入发生)。判断 meta.chainVer != vChainId.chainVer 是必要的,如果 meta.chainVer 处于当前最新的版本,那么 checksum 不一致、其他均一致可以解释为在当前最新的 chain 版本上发生了一次 写入-删除-再写入 的情况。
@kaede11 commented on GitHub (Sep 30, 2025):
chunksum 确实是不一致的。目前我通过fullsync临时恢复了,仅存的日志如下:
[2025-09-29T09:23:13.273778636+08:00 Sync2: 156 ResyncWorker.cc:254 FATAL] chain {"chainId":900200002,"chainVer":117} checksum not equal, local {"commitVer":0,"updateVer":1,"chainVer":107,"size":1048576,"chunkSt ate":"CLEAN","recycleState":"NORMAL","checksumType":"CRC32C","checksumValue":1757205870,"lastNodeId":0,"lastRequestId":4656501,"innerOffset":"4504686254107530","innerFileId":{"chunkSize":1048576,"chunkIdx":256}," lastClientUuid":"60dd9a60-75f3-4a3c-b390-69cd318d9cba","timestamp":"2025-09-26 17:53:41"}, remote {"chunkId":"00000000-00000017-616A0000-00001624","updateVer":1,"commitVer":1,"chainVer":107,"chunkState":"COMMIT", "checksum":{"type":"CRC32C","value":2131067927},"length":1048576}