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]

Reply via email to