This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new d439c2f343e branch-4.0: [enhancement](cloud) retry TXN_MAYBE_COMMITTED
and add UT #59563 (#59604)
d439c2f343e is described below
commit d439c2f343e2ea0f6265e1bdc9bbd8f89e5332ec
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Feb 4 16:12:10 2026 +0800
branch-4.0: [enhancement](cloud) retry TXN_MAYBE_COMMITTED and add UT
#59563 (#59604)
Cherry-picked from #59563
Co-authored-by: Luwei <[email protected]>
---
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 e6747f6326d..f26dc3ad360 100644
--- a/cloud/src/meta-service/meta_service.h
+++ b/cloud/src/meta-service/meta_service.h
@@ -1042,6 +1042,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;
@@ -1065,6 +1066,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 f9197fd5d42..e575d834c52 100644
--- a/cloud/test/meta_service_test.cpp
+++ b/cloud/test/meta_service_test.cpp
@@ -8410,6 +8410,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 855c4d76378..6806f0ae89f 100644
--- a/gensrc/proto/cloud.proto
+++ b/gensrc/proto/cloud.proto
@@ -1754,6 +1754,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]