Skip to content

Commit 120ea03

Browse files
authored
[enhancement](cloud) retry TXN_MAYBE_COMMITTED and add UT (#59563)
1 parent 4a81f1b commit 120ea03

File tree

4 files changed

+50
-1
lines changed

4 files changed

+50
-1
lines changed

cloud/src/meta-service/meta_service.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,6 +1017,7 @@ class MetaServiceProxy final : public MetaService {
10171017
if (code != MetaServiceCode::KV_TXN_STORE_GET_RETRYABLE &&
10181018
code != MetaServiceCode::KV_TXN_STORE_COMMIT_RETRYABLE &&
10191019
code != MetaServiceCode::KV_TXN_STORE_CREATE_RETRYABLE &&
1020+
code != MetaServiceCode::KV_TXN_MAYBE_COMMITTED &&
10201021
code != MetaServiceCode::KV_TXN_TOO_OLD &&
10211022
(!config::enable_retry_txn_conflict || code != MetaServiceCode::KV_TXN_CONFLICT)) {
10221023
return;
@@ -1040,6 +1041,8 @@ class MetaServiceProxy final : public MetaService {
10401041
code == MetaServiceCode::KV_TXN_STORE_COMMIT_RETRYABLE ? KV_TXN_COMMIT_ERR
10411042
: code == MetaServiceCode::KV_TXN_STORE_GET_RETRYABLE ? KV_TXN_GET_ERR
10421043
: code == MetaServiceCode::KV_TXN_STORE_CREATE_RETRYABLE ? KV_TXN_CREATE_ERR
1044+
: code == MetaServiceCode::KV_TXN_MAYBE_COMMITTED
1045+
? MetaServiceCode::KV_TXN_MAYBE_COMMITTED
10431046
: code == MetaServiceCode::KV_TXN_CONFLICT
10441047
? KV_TXN_CONFLICT_RETRY_EXCEEDED_MAX_TIMES
10451048
: MetaServiceCode::KV_TXN_TOO_OLD);

cloud/src/meta-service/meta_service_helper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,9 @@ inline MetaServiceCode cast_as(TxnErrorCode code) {
252252
}
253253
}
254254
[[fallthrough]];
255-
case TxnErrorCode::TXN_KEY_NOT_FOUND:
256255
case TxnErrorCode::TXN_MAYBE_COMMITTED:
256+
return MetaServiceCode::KV_TXN_MAYBE_COMMITTED;
257+
case TxnErrorCode::TXN_KEY_NOT_FOUND:
257258
case TxnErrorCode::TXN_TIMEOUT:
258259
case TxnErrorCode::TXN_INVALID_ARGUMENT:
259260
case TxnErrorCode::TXN_INVALID_DATA:

cloud/test/meta_service_test.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8266,6 +8266,50 @@ TEST(MetaServiceTxnStoreRetryableTest, DoNotReturnRetryableCode) {
82668266
config::txn_store_retry_times = retry_times;
82678267
}
82688268

8269+
TEST(MetaServiceTxnStoreRetryableTest, RetryMaybeCommittedCode) {
8270+
size_t index = 0;
8271+
SyncPoint::get_instance()->set_call_back("update_delete_bitmap:commit:err", [&](auto&& args) {
8272+
++index;
8273+
*doris::try_any_cast<TxnErrorCode*>(args[2]) = TxnErrorCode::TXN_MAYBE_COMMITTED;
8274+
});
8275+
SyncPoint::get_instance()->enable_processing();
8276+
int32_t retry_times = config::txn_store_retry_times;
8277+
bool enable_retry = config::enable_txn_store_retry;
8278+
int64_t max_txn_commit_byte = config::max_txn_commit_byte;
8279+
config::txn_store_retry_times = 2;
8280+
config::enable_txn_store_retry = true;
8281+
config::max_txn_commit_byte = 1;
8282+
8283+
auto service = get_meta_service();
8284+
8285+
brpc::Controller cntl;
8286+
UpdateDeleteBitmapRequest req;
8287+
UpdateDeleteBitmapResponse resp;
8288+
req.set_cloud_unique_id("test_cloud_unique_id");
8289+
req.set_table_id(100);
8290+
req.set_partition_id(123);
8291+
req.set_lock_id(-3);
8292+
req.set_without_lock(true);
8293+
req.set_initiator(-1);
8294+
req.set_tablet_id(333);
8295+
req.add_rowset_ids("r1");
8296+
req.add_segment_ids(0);
8297+
req.add_versions(2);
8298+
req.add_segment_delete_bitmaps("abc");
8299+
8300+
service->update_delete_bitmap(&cntl, &req, &resp, nullptr);
8301+
8302+
ASSERT_EQ(resp.status().code(), MetaServiceCode::KV_TXN_MAYBE_COMMITTED)
8303+
<< " status is " << resp.status().msg() << ", code=" << resp.status().code();
8304+
EXPECT_GE(index, static_cast<size_t>(config::txn_store_retry_times + 1));
8305+
8306+
SyncPoint::get_instance()->disable_processing();
8307+
SyncPoint::get_instance()->clear_all_call_backs();
8308+
config::txn_store_retry_times = retry_times;
8309+
config::enable_txn_store_retry = enable_retry;
8310+
config::max_txn_commit_byte = max_txn_commit_byte;
8311+
}
8312+
82698313
TEST(MetaServiceTest, GetClusterStatusTest) {
82708314
auto meta_service = get_meta_service();
82718315

gensrc/proto/cloud.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1741,6 +1741,7 @@ enum MetaServiceCode {
17411741
KV_TXN_STORE_COMMIT_RETRYABLE = 1009;
17421742
KV_TXN_STORE_CREATE_RETRYABLE = 1010;
17431743
KV_TXN_TOO_OLD = 1011;
1744+
KV_TXN_MAYBE_COMMITTED = 1012;
17441745

17451746
//Doris error
17461747
TXN_GEN_ID_ERR = 2001;

0 commit comments

Comments
 (0)