This is an automated email from the ASF dual-hosted git repository.
gavinchou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 120ea039f40 [enhancement](cloud) retry TXN_MAYBE_COMMITTED and add UT
(#59563)
120ea039f40 is described below
commit 120ea039f404991ed9e0acf4472f20cfff7df1c1
Author: Luwei <[email protected]>
AuthorDate: Tue Jan 6 21:19:21 2026 +0800
[enhancement](cloud) retry TXN_MAYBE_COMMITTED and add UT (#59563)
---
cloud/src/meta-service/meta_service.h | 3 ++
cloud/src/meta-service/meta_service_helper.h | 3 +-
cloud/test/meta_service_test.cpp | 44 ++++++++++++++++++++++++++++
gensrc/proto/cloud.proto | 1 +
4 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/cloud/src/meta-service/meta_service.h
b/cloud/src/meta-service/meta_service.h
index 44027ed6316..9d982ecdc90 100644
--- a/cloud/src/meta-service/meta_service.h
+++ b/cloud/src/meta-service/meta_service.h
@@ -1017,6 +1017,7 @@ private:
if (code != MetaServiceCode::KV_TXN_STORE_GET_RETRYABLE &&
code != MetaServiceCode::KV_TXN_STORE_COMMIT_RETRYABLE &&
code != MetaServiceCode::KV_TXN_STORE_CREATE_RETRYABLE &&
+ code != MetaServiceCode::KV_TXN_MAYBE_COMMITTED &&
code != MetaServiceCode::KV_TXN_TOO_OLD &&
(!config::enable_retry_txn_conflict || code !=
MetaServiceCode::KV_TXN_CONFLICT)) {
return;
@@ -1040,6 +1041,8 @@ private:
code == MetaServiceCode::KV_TXN_STORE_COMMIT_RETRYABLE
? KV_TXN_COMMIT_ERR
: code == MetaServiceCode::KV_TXN_STORE_GET_RETRYABLE
? KV_TXN_GET_ERR
: code ==
MetaServiceCode::KV_TXN_STORE_CREATE_RETRYABLE ? KV_TXN_CREATE_ERR
+ : code == MetaServiceCode::KV_TXN_MAYBE_COMMITTED
+ ? MetaServiceCode::KV_TXN_MAYBE_COMMITTED
: code == MetaServiceCode::KV_TXN_CONFLICT
? KV_TXN_CONFLICT_RETRY_EXCEEDED_MAX_TIMES
: MetaServiceCode::KV_TXN_TOO_OLD);
diff --git a/cloud/src/meta-service/meta_service_helper.h
b/cloud/src/meta-service/meta_service_helper.h
index b992f5deb72..2f9ebd4fcc2 100644
--- a/cloud/src/meta-service/meta_service_helper.h
+++ b/cloud/src/meta-service/meta_service_helper.h
@@ -252,8 +252,9 @@ inline MetaServiceCode cast_as(TxnErrorCode code) {
}
}
[[fallthrough]];
- case TxnErrorCode::TXN_KEY_NOT_FOUND:
case TxnErrorCode::TXN_MAYBE_COMMITTED:
+ return MetaServiceCode::KV_TXN_MAYBE_COMMITTED;
+ case TxnErrorCode::TXN_KEY_NOT_FOUND:
case TxnErrorCode::TXN_TIMEOUT:
case TxnErrorCode::TXN_INVALID_ARGUMENT:
case TxnErrorCode::TXN_INVALID_DATA:
diff --git a/cloud/test/meta_service_test.cpp b/cloud/test/meta_service_test.cpp
index f6fd0081cf6..297d1bda7fb 100644
--- a/cloud/test/meta_service_test.cpp
+++ b/cloud/test/meta_service_test.cpp
@@ -8266,6 +8266,50 @@ TEST(MetaServiceTxnStoreRetryableTest,
DoNotReturnRetryableCode) {
config::txn_store_retry_times = retry_times;
}
+TEST(MetaServiceTxnStoreRetryableTest, RetryMaybeCommittedCode) {
+ size_t index = 0;
+
SyncPoint::get_instance()->set_call_back("update_delete_bitmap:commit:err",
[&](auto&& args) {
+ ++index;
+ *doris::try_any_cast<TxnErrorCode*>(args[2]) =
TxnErrorCode::TXN_MAYBE_COMMITTED;
+ });
+ SyncPoint::get_instance()->enable_processing();
+ int32_t retry_times = config::txn_store_retry_times;
+ bool enable_retry = config::enable_txn_store_retry;
+ int64_t max_txn_commit_byte = config::max_txn_commit_byte;
+ config::txn_store_retry_times = 2;
+ config::enable_txn_store_retry = true;
+ config::max_txn_commit_byte = 1;
+
+ auto service = get_meta_service();
+
+ brpc::Controller cntl;
+ UpdateDeleteBitmapRequest req;
+ UpdateDeleteBitmapResponse resp;
+ req.set_cloud_unique_id("test_cloud_unique_id");
+ req.set_table_id(100);
+ req.set_partition_id(123);
+ req.set_lock_id(-3);
+ req.set_without_lock(true);
+ req.set_initiator(-1);
+ req.set_tablet_id(333);
+ req.add_rowset_ids("r1");
+ req.add_segment_ids(0);
+ req.add_versions(2);
+ req.add_segment_delete_bitmaps("abc");
+
+ service->update_delete_bitmap(&cntl, &req, &resp, nullptr);
+
+ ASSERT_EQ(resp.status().code(), MetaServiceCode::KV_TXN_MAYBE_COMMITTED)
+ << " status is " << resp.status().msg() << ", code=" <<
resp.status().code();
+ EXPECT_GE(index, static_cast<size_t>(config::txn_store_retry_times + 1));
+
+ SyncPoint::get_instance()->disable_processing();
+ SyncPoint::get_instance()->clear_all_call_backs();
+ config::txn_store_retry_times = retry_times;
+ config::enable_txn_store_retry = enable_retry;
+ config::max_txn_commit_byte = max_txn_commit_byte;
+}
+
TEST(MetaServiceTest, GetClusterStatusTest) {
auto meta_service = get_meta_service();
diff --git a/gensrc/proto/cloud.proto b/gensrc/proto/cloud.proto
index ba0fbd7cc53..6d96bb715b7 100644
--- a/gensrc/proto/cloud.proto
+++ b/gensrc/proto/cloud.proto
@@ -1741,6 +1741,7 @@ enum MetaServiceCode {
KV_TXN_STORE_COMMIT_RETRYABLE = 1009;
KV_TXN_STORE_CREATE_RETRYABLE = 1010;
KV_TXN_TOO_OLD = 1011;
+ KV_TXN_MAYBE_COMMITTED = 1012;
//Doris error
TXN_GEN_ID_ERR = 2001;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]