From dcbb45919b0c203d71afc43af82378d39048e5c7 Mon Sep 17 00:00:00 2001 From: SF-Zhou Date: Fri, 27 Mar 2026 13:44:12 +0800 Subject: [PATCH] fix(sync): handle truncate/extend operations correctly in syncing --- src/storage/service/ReliableForwarding.cc | 5 +++-- src/storage/service/StorageOperator.cc | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/storage/service/ReliableForwarding.cc b/src/storage/service/ReliableForwarding.cc index 1b1135d2..d8f3b9f5 100644 --- a/src/storage/service/ReliableForwarding.cc +++ b/src/storage/service/ReliableForwarding.cc @@ -155,8 +155,9 @@ CoTask ReliableForwarding::doForward(const UpdateReq &req, updateReq.options.commitChainVer = target.vChainId.chainVer; } - bool readForSyncing = req.payload.isWriteTruncateExtend() && isSyncing && - (req.options.isSyncing || req.payload.length != req.payload.chunkSize); + bool readForSyncing = isSyncing && !req.payload.isRemove() && + (req.options.isSyncing || req.payload.isTruncate() || req.payload.isExtend() || + (req.payload.isWrite() && req.payload.length != req.payload.chunkSize)); if (readForSyncing) { auto recordGuard = syncingReadRecorder.record(); diff --git a/src/storage/service/StorageOperator.cc b/src/storage/service/StorageOperator.cc index 36a77d29..04dcd5b2 100644 --- a/src/storage/service/StorageOperator.cc +++ b/src/storage/service/StorageOperator.cc @@ -349,6 +349,11 @@ CoTask StorageOperator::handleUpdate(ServiceRequestContext &requestCtx XLOG(ERR, msg); co_return makeError(StatusCode::kInvalidArg, std::move(msg)); } + if (req.options.isSyncing && (req.payload.isTruncate() || req.payload.isExtend())) { + auto msg = fmt::format("reject truncate/extend request from syncing client: {}", req); + XLOG(ERR, msg); + co_return makeError(StatusCode::kInvalidArg, std::move(msg)); + } XLOGF(DBG1, "Start the replication process, target: {}, tag: {}, req: {}", target->targetId, req.tag, req);