Skip to content

Commit e3e0f03

Browse files
luwei16Your Name
authored andcommitted
[enhancement](cloud) retry TXN_MAYBE_COMMITTED and add UT (#59563)
1 parent 02e74ce commit e3e0f03

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
@@ -976,6 +976,7 @@ class MetaServiceProxy final : public MetaService {
976976
if (code != MetaServiceCode::KV_TXN_STORE_GET_RETRYABLE &&
977977
code != MetaServiceCode::KV_TXN_STORE_COMMIT_RETRYABLE &&
978978
code != MetaServiceCode::KV_TXN_STORE_CREATE_RETRYABLE &&
979+
code != MetaServiceCode::KV_TXN_MAYBE_COMMITTED &&
979980
code != MetaServiceCode::KV_TXN_TOO_OLD &&
980981
(!config::enable_retry_txn_conflict || code != MetaServiceCode::KV_TXN_CONFLICT)) {
981982
return;
@@ -999,6 +1000,8 @@ class MetaServiceProxy final : public MetaService {
9991000
code == MetaServiceCode::KV_TXN_STORE_COMMIT_RETRYABLE ? KV_TXN_COMMIT_ERR
10001001
: code == MetaServiceCode::KV_TXN_STORE_GET_RETRYABLE ? KV_TXN_GET_ERR
10011002
: code == MetaServiceCode::KV_TXN_STORE_CREATE_RETRYABLE ? KV_TXN_CREATE_ERR
1003+
: code == MetaServiceCode::KV_TXN_MAYBE_COMMITTED
1004+
? MetaServiceCode::KV_TXN_MAYBE_COMMITTED
10021005
: code == MetaServiceCode::KV_TXN_CONFLICT
10031006
? KV_TXN_CONFLICT_RETRY_EXCEEDED_MAX_TIMES
10041007
: 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
@@ -250,8 +250,9 @@ inline MetaServiceCode cast_as(TxnErrorCode code) {
250250
}
251251
}
252252
[[fallthrough]];
253-
case TxnErrorCode::TXN_KEY_NOT_FOUND:
254253
case TxnErrorCode::TXN_MAYBE_COMMITTED:
254+
return MetaServiceCode::KV_TXN_MAYBE_COMMITTED;
255+
case TxnErrorCode::TXN_KEY_NOT_FOUND:
255256
case TxnErrorCode::TXN_TIMEOUT:
256257
case TxnErrorCode::TXN_INVALID_ARGUMENT:
257258
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
@@ -1683,6 +1683,7 @@ enum MetaServiceCode {
16831683
KV_TXN_STORE_COMMIT_RETRYABLE = 1009;
16841684
KV_TXN_STORE_CREATE_RETRYABLE = 1010;
16851685
KV_TXN_TOO_OLD = 1011;
1686+
KV_TXN_MAYBE_COMMITTED = 1012;
16861687

16871688
//Doris error
16881689
TXN_GEN_ID_ERR = 2001;

0 commit comments

Comments
 (0)