diff --git a/cloud/src/meta-service/meta_service_txn.cpp b/cloud/src/meta-service/meta_service_txn.cpp index 0d3b7a143621e3..94e3a0282b131c 100644 --- a/cloud/src/meta-service/meta_service_txn.cpp +++ b/cloud/src/meta-service/meta_service_txn.cpp @@ -997,6 +997,7 @@ void process_mow_when_commit_txn( } if (pending_info.has_lock_id() && pending_info.lock_id() != lock_id) { + TEST_SYNC_POINT_CALLBACK("commit_txn:check_pending_delete_bitmap_lock_id", &tablet_id); LOG_WARNING( "wrong lock_id in pending delete bitmap infos, expect lock_id={}, but " "found {} tablet_id={} instance_id={}", diff --git a/cloud/test/meta_service_test.cpp b/cloud/test/meta_service_test.cpp index 49b1587228c912..b7004716035a46 100644 --- a/cloud/test/meta_service_test.cpp +++ b/cloud/test/meta_service_test.cpp @@ -5479,6 +5479,15 @@ TEST(MetaServiceTest, WrongPendingBitmapTest) { const std::string& cloud_unique_id); auto instance_id = get_instance_id(meta_service->resource_mgr(), "test_cloud_unique_id"); + std::set real_wrong_pending_delete_bitmap_tablet_ids; + std::set expected_wrong_pending_delete_bitmap_tablet_ids; + auto sp = SyncPoint::get_instance(); + sp->set_call_back("commit_txn:check_pending_delete_bitmap_lock_id", [&](auto&& args) { + auto* tablet_id = try_any_cast(args[0]); + real_wrong_pending_delete_bitmap_tablet_ids.insert(*tablet_id); + }); + sp->enable_processing(); + // case: first version of rowset { int64_t txn_id = 56789; @@ -5587,6 +5596,8 @@ TEST(MetaServiceTest, WrongPendingBitmapTest) { ASSERT_TRUE(pending_info.SerializeToString(&pending_val)); txn->put(pending_key, pending_val); ASSERT_EQ(txn->commit(), TxnErrorCode::TXN_OK); + + expected_wrong_pending_delete_bitmap_tablet_ids.insert(tablet_id_base); } // commit txn @@ -5600,9 +5611,13 @@ TEST(MetaServiceTest, WrongPendingBitmapTest) { CommitTxnResponse res; meta_service->commit_txn(reinterpret_cast<::google::protobuf::RpcController*>(&cntl), &req, &res, nullptr); - ASSERT_EQ(res.status().code(), MetaServiceCode::PENDING_DELETE_BITMAP_WRONG); + ASSERT_EQ(expected_wrong_pending_delete_bitmap_tablet_ids, + real_wrong_pending_delete_bitmap_tablet_ids); } } + + SyncPoint::get_instance()->disable_processing(); + SyncPoint::get_instance()->clear_all_call_backs(); } TEST(MetaServiceTest, GetDeleteBitmapWithRetryTest1) {