[4.x] fix try commit tx on local will fail when partition has migrated out
This commit is contained in:
@ -1820,6 +1820,16 @@ int ObTransService::handle_tx_batch_req(int msg_type,
|
|||||||
#undef CASE__
|
#undef CASE__
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define COMMON_RETRYABLE_ERROR(ret) \
|
||||||
|
(OB_NOT_MASTER == ret \
|
||||||
|
|| OB_EAGAIN == ret \
|
||||||
|
|| OB_NEED_RETRY == ret \
|
||||||
|
|| OB_LS_NOT_EXIST == ret \
|
||||||
|
|| OB_PARTITION_NOT_EXIST == ret \
|
||||||
|
|| OB_TENANT_NOT_EXIST == ret \
|
||||||
|
)
|
||||||
|
|
||||||
int ObTransService::handle_sp_rollback_resp(const share::ObLSID &ls_id,
|
int ObTransService::handle_sp_rollback_resp(const share::ObLSID &ls_id,
|
||||||
const int64_t epoch,
|
const int64_t epoch,
|
||||||
const transaction::ObTransID &tx_id,
|
const transaction::ObTransID &tx_id,
|
||||||
@ -1840,17 +1850,9 @@ int ObTransService::handle_sp_rollback_resp(const share::ObLSID &ls_id,
|
|||||||
} else if (tx->op_sn_ > request_id) {
|
} else if (tx->op_sn_ > request_id) {
|
||||||
TRANS_LOG(WARN, "receive old rpc result msg",
|
TRANS_LOG(WARN, "receive old rpc result msg",
|
||||||
K(ret), K_(tx->op_sn), K(request_id), K(tx_id));
|
K(ret), K_(tx->op_sn), K(request_id), K(tx_id));
|
||||||
} else if (status == OB_TRANS_RPC_TIMEOUT) {
|
} else if (status == OB_TRANS_RPC_TIMEOUT || COMMON_RETRYABLE_ERROR(status)) {
|
||||||
// ignore, waiter will drive retry
|
TRANS_LOG(WARN, "rollback savepoint on ls return an retryable error",
|
||||||
} else if (status == OB_NEED_RETRY) {
|
K(status), K(ls_id), K(tx_id), K(addr));
|
||||||
// ignore, waiter will retry periodically
|
|
||||||
// FIXME: may cause rollback slow
|
|
||||||
} else if (status == OB_NOT_MASTER) {
|
|
||||||
// ignore, waiter will drive retry
|
|
||||||
} else if (status == OB_LS_NOT_EXIST || status == OB_PARTITION_NOT_EXIST) {
|
|
||||||
TRANS_LOG(WARN, "ls not exist on receiver", K(status), K(ls_id), K(tx_id), K(addr));
|
|
||||||
} else if (status == OB_TENANT_NOT_EXIST) {
|
|
||||||
TRANS_LOG(WARN, "tenant not exist on receiver", K(status), K(ls_id), K(tx_id), K(addr));
|
|
||||||
} else if (status == OB_SUCCESS) {
|
} else if (status == OB_SUCCESS) {
|
||||||
ObTxLSEpochPair pair(ls_id, epoch);
|
ObTxLSEpochPair pair(ls_id, epoch);
|
||||||
if (tx->brpc_mask_set_.is_mask(pair)) {
|
if (tx->brpc_mask_set_.is_mask(pair)) {
|
||||||
@ -2039,7 +2041,9 @@ int ObTransService::gen_trans_id_(ObTransID &trans_id)
|
|||||||
|
|
||||||
bool ObTransService::commit_need_retry_(const int ret)
|
bool ObTransService::commit_need_retry_(const int ret)
|
||||||
{
|
{
|
||||||
return OB_NOT_MASTER == ret || OB_BLOCK_FROZEN == ret || OB_TX_NOLOGCB == ret || OB_EAGAIN == ret;
|
return OB_TX_NOLOGCB == ret
|
||||||
|
|| OB_BLOCK_FROZEN == ret
|
||||||
|
|| COMMON_RETRYABLE_ERROR(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ObTransService::get_min_uncommit_tx_prepare_version(const share::ObLSID& ls_id, int64_t &min_prepare_version)
|
int ObTransService::get_min_uncommit_tx_prepare_version(const share::ObLSID& ls_id, int64_t &min_prepare_version)
|
||||||
|
|||||||
Reference in New Issue
Block a user