[GH-ISSUE #340] 对于batchRead的场景,且开启batch_read_ignore_chain_version,还有必要比较chainVer吗 #210

Closed
opened 2026-10-26 09:47:10 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @kaede11 on GitHub (Sep 22, 2025).
Original GitHub issue: https://github.com/deepseek-ai/3FS/issues/340

Result<const Target *> TargetMap::getByChainId(VersionedChainId vChainId, bool allowOutdatedChainVer) const { CHECK_RESULT(targetId, getTargetId(vChainId.chainId)); CHECK_RESULT(target, getTarget(targetId)); if (target->vChainId != vChainId && (!allowOutdatedChainVer || vChainId.chainVer > target->vChainId.chainVer)) { auto msg = fmt::format("chain {} version mismatch request {} != local {}", vChainId.chainId, vChainId.chainVer, target->vChainId.chainVer); XLOG(ERR, msg); return makeError(StorageClientCode::kRoutingVersionMismatch, std::move(msg)); } if (target->localState == flat::LocalTargetState::OFFLINE) { auto msg = fmt::format("chain {} target {} is offline", vChainId.chainId, target->targetId); XLOG(ERR, msg); return makeError(StorageCode::kTargetOffline, std::move(msg)); } if (target->storageTarget == nullptr) { auto msg = fmt::format("chain {} target {} is offline", vChainId.chainId, target->targetId); XLOG(CRITICAL, msg); return makeError(StorageCode::kTargetOffline, std::move(msg)); } return target; }
对于storage重启的场景,target会经历serving -> offline -> syncing -> serving,这个过程中会提升chainVersion。但是client和storage节点获取到routing info的时间是有gap的,这里判断chainVer会导致3波延迟抖动。
对于batchRead的场景,且batch_read_ignore_chain_version = true,还需要额外比较chainVer有哪些特殊考虑吗

Originally created by @kaede11 on GitHub (Sep 22, 2025). Original GitHub issue: https://github.com/deepseek-ai/3FS/issues/340 ` Result<const Target *> TargetMap::getByChainId(VersionedChainId vChainId, bool allowOutdatedChainVer) const { CHECK_RESULT(targetId, getTargetId(vChainId.chainId)); CHECK_RESULT(target, getTarget(targetId)); if (target->vChainId != vChainId && (!allowOutdatedChainVer || vChainId.chainVer > target->vChainId.chainVer)) { auto msg = fmt::format("chain {} version mismatch request {} != local {}", vChainId.chainId, vChainId.chainVer, target->vChainId.chainVer); XLOG(ERR, msg); return makeError(StorageClientCode::kRoutingVersionMismatch, std::move(msg)); } if (target->localState == flat::LocalTargetState::OFFLINE) { auto msg = fmt::format("chain {} target {} is offline", vChainId.chainId, target->targetId); XLOG(ERR, msg); return makeError(StorageCode::kTargetOffline, std::move(msg)); } if (target->storageTarget == nullptr) { auto msg = fmt::format("chain {} target {} is offline", vChainId.chainId, target->targetId); XLOG(CRITICAL, msg); return makeError(StorageCode::kTargetOffline, std::move(msg)); } return target; } ` 对于storage重启的场景,target会经历serving -> offline -> syncing -> serving,这个过程中会提升chainVersion。但是client和storage节点获取到routing info的时间是有gap的,这里判断chainVer会导致3波延迟抖动。 对于batchRead的场景,且batch_read_ignore_chain_version = true,还需要额外比较chainVer有哪些特殊考虑吗
Author
Owner

@SF-Zhou commented on GitHub (Sep 23, 2025):

确实没有必要再比较一次了。我修复一下该问题。

<!-- gh-comment-id:3322295546 --> @SF-Zhou commented on GitHub (Sep 23, 2025): 确实没有必要再比较一次了。我修复一下该问题。
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
deepseek-ai/3FS#210
No description provided.