From 04fa72dd8fce6fb0fc350e608028c2c21b6e415e Mon Sep 17 00:00:00 2001 From: zqq Date: Mon, 13 Oct 2025 11:24:10 +0800 Subject: [PATCH] fixbug in check data flow Signed-off-by: zqq --- .../device/singlever/single_ver_data_sync.cpp | 16 +++++++++++----- .../src/device/singlever/single_ver_data_sync.h | 4 ++-- .../kv/distributeddb_kv_permission_sync_test.cpp | 6 +++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/frameworks/libs/distributeddb/syncer/src/device/singlever/single_ver_data_sync.cpp b/frameworks/libs/distributeddb/syncer/src/device/singlever/single_ver_data_sync.cpp index 536125edf92..8901c9f1774 100644 --- a/frameworks/libs/distributeddb/syncer/src/device/singlever/single_ver_data_sync.cpp +++ b/frameworks/libs/distributeddb/syncer/src/device/singlever/single_ver_data_sync.cpp @@ -946,7 +946,7 @@ int SingleVerDataSync::DoAbilitySyncIfNeed(SingleVerSyncTaskContext *context, co } } -int SingleVerDataSync::DataRequestRecvPre(SingleVerSyncTaskContext *context, const Message *message) +int SingleVerDataSync::DataRequestRecvPre(SingleVerSyncTaskContext *context, const Message *message, bool &isDeniedSend) { if (context == nullptr || message == nullptr) { return -E_INVALID_ARGS; @@ -970,7 +970,7 @@ int SingleVerDataSync::DataRequestRecvPre(SingleVerSyncTaskContext *context, con LOGE("[DataSync][DataRequestRecvPre] remote pullResponse getData sendCode=%d", sendCode); return sendCode; } - int errCode = RunPermissionCheck(context, message, packet); + int errCode = RunPermissionCheck(context, message, packet, isDeniedSend); if (errCode != E_OK) { return errCode; } @@ -1047,11 +1047,16 @@ int SingleVerDataSync::DataRequestRecvInner(SingleVerSyncTaskContext *context, c int SingleVerDataSync::DataRequestRecv(SingleVerSyncTaskContext *context, const Message *message, WaterMark &pullEndWatermark) { - int errCode = DataRequestRecvPre(context, message); + bool isDeniedSend = false; + int errCode = DataRequestRecvPre(context, message, isDeniedSend); if (errCode != E_OK) { return errCode; } - return DataRequestRecvInner(context, message, pullEndWatermark); + errCode = DataRequestRecvInner(context, message, pullEndWatermark); + if (isDeniedSend) { + pullEndWatermark = 0; + } + return errCode; } int SingleVerDataSync::SendDataPacket(SyncType syncType, DataRequestPacket *packet, @@ -1345,7 +1350,7 @@ int SingleVerDataSync::DealWaterMarkException(SingleVerSyncTaskContext *context, } int SingleVerDataSync::RunPermissionCheck(SingleVerSyncTaskContext *context, const Message *message, - const DataRequestPacket *packet) + const DataRequestPacket *packet, bool &isDeniedSend) { int mode = SyncOperation::TransferSyncMode(packet->GetMode()); auto checkRet = SingleVerDataSyncUtils::RunPermissionCheck(context, storage_, label_, packet); @@ -1377,6 +1382,7 @@ int SingleVerDataSync::RunPermissionCheck(SingleVerSyncTaskContext *context, con if (checkRet.ret == DataFlowCheckRet::DENIED_SEND && ((mode == PUSH_AND_PULL) || (mode == PULL))) { SyncEntry entry; errCode = SendPullResponseDataPkt(SEND_FINISHED, entry, context, packet->GetSessionId()); + isDeniedSend = true; } return errCode; } diff --git a/frameworks/libs/distributeddb/syncer/src/device/singlever/single_ver_data_sync.h b/frameworks/libs/distributeddb/syncer/src/device/singlever/single_ver_data_sync.h index 06cc51c2521..dba4c91023b 100644 --- a/frameworks/libs/distributeddb/syncer/src/device/singlever/single_ver_data_sync.h +++ b/frameworks/libs/distributeddb/syncer/src/device/singlever/single_ver_data_sync.h @@ -195,7 +195,7 @@ protected: int DoAbilitySyncIfNeed(SingleVerSyncTaskContext *context, const Message *message, bool isControlMsg = false); - int DataRequestRecvPre(SingleVerSyncTaskContext *context, const Message *message); + int DataRequestRecvPre(SingleVerSyncTaskContext *context, const Message *message, bool &isDeniedSend); void GetPullEndWatermark(const SingleVerSyncTaskContext *context, const DataRequestPacket *packet, WaterMark &pullEndWatermark) const; @@ -204,7 +204,7 @@ protected: const std::vector &reserved); int RunPermissionCheck(SingleVerSyncTaskContext *context, const Message *message, - const DataRequestPacket *packet); + const DataRequestPacket *packet, bool &isDeniedSend); void SendResetWatchDogPacket(SingleVerSyncTaskContext *context, uint32_t packetLen); diff --git a/frameworks/libs/distributeddb/test/unittest/common/store_test/kv/distributeddb_kv_permission_sync_test.cpp b/frameworks/libs/distributeddb/test/unittest/common/store_test/kv/distributeddb_kv_permission_sync_test.cpp index d5c92c868ab..addd708e9fb 100644 --- a/frameworks/libs/distributeddb/test/unittest/common/store_test/kv/distributeddb_kv_permission_sync_test.cpp +++ b/frameworks/libs/distributeddb/test/unittest/common/store_test/kv/distributeddb_kv_permission_sync_test.cpp @@ -33,6 +33,7 @@ protected: void CheckData(const StoreInfo &info, const Entry &expectEntry, DBStatus status); static constexpr const char *DEVICE_A = "DEVICE_A"; static constexpr const char *DEVICE_B = "DEVICE_B"; + std::atomic callbackCount_ = 0; }; void DistributedDBKvPermissionSyncTest::SetUp() @@ -43,8 +44,9 @@ void DistributedDBKvPermissionSyncTest::SetUp() auto storeInfo2 = GetStoreInfo2(); ASSERT_EQ(BasicUnitTest::InitDelegate(storeInfo2, DEVICE_B), E_OK); ASSERT_NO_FATAL_FAILURE(PrepareData()); - RuntimeConfig::SetDataFlowCheckCallback([storeInfo1, storeInfo2](const PermissionCheckParam ¶m, + RuntimeConfig::SetDataFlowCheckCallback([storeInfo1, storeInfo2, this](const PermissionCheckParam ¶m, const Property &property) { + callbackCount_++; if (param.storeId == storeInfo2.storeId) { EXPECT_EQ(property.size(), 1); return DataFlowCheckRet::DEFAULT; @@ -56,6 +58,7 @@ void DistributedDBKvPermissionSyncTest::SetUp() void DistributedDBKvPermissionSyncTest::TearDown() { + callbackCount_ = 0; RuntimeConfig::SetDataFlowCheckCallback(nullptr); PermissionCheckCallbackV4 callbackV4 = nullptr; RuntimeConfig::SetPermissionCheckCallback(callbackV4); @@ -189,6 +192,7 @@ HWTEST_F(DistributedDBKvPermissionSyncTest, KVPermissionSync005, TestSize.Level0 DBStatus::OK); EXPECT_NO_FATAL_FAILURE(CheckData(GetStoreInfo1(), DistributedDBToolsUnitTest::GetK1V1(), OK)); EXPECT_NO_FATAL_FAILURE(CheckData(GetStoreInfo2(), DistributedDBToolsUnitTest::GetK1V1(), NOT_FOUND)); + EXPECT_EQ(callbackCount_.load(), 3); // check callback 3 times } /** -- Gitee