Fix transfer trans timeout return 4002 or 4016 bug.

This commit is contained in:
godyangfight
2024-04-25 08:35:02 +00:00
committed by ob-robot
parent dc233cc69e
commit 282f493cb0
4 changed files with 22 additions and 2 deletions

View File

@ -601,6 +601,7 @@ class ObString;
ACT(BEFORE_ALTER_TABLE_EXCHANGE_PARTITION,)\
ACT(AFTER_REPORT_BACKUP_COMPL_LOG,)\
ACT(BEFORE_WRITE_TABLE_LIST_META_INFO,)\
ACT(BEFORE_START_TRANSFER_GET_TABLET_META,)\
ACT(MAX_DEBUG_SYNC_POINT,)
DECLARE_ENUM(ObDebugSyncPoint, debug_sync_point, OB_DEBUG_SYNC_POINT_DEF);

View File

@ -47,6 +47,7 @@ namespace oceanbase
namespace storage
{
ERRSIM_POINT_DEF(EN_TRANSFER_ALLOW_RETRY);
int ObStorageHAUtils::get_ls_leader(const uint64_t tenant_id, const share::ObLSID &ls_id, common::ObAddr &leader)
{
int ret = OB_SUCCESS;
@ -461,6 +462,15 @@ bool ObTransferUtils::is_need_retry_error(const int err)
default:
break;
}
#ifdef ERRSIM
int tmp_ret = OB_SUCCESS;
tmp_ret = EN_TRANSFER_ALLOW_RETRY ? : OB_SUCCESS;
if (OB_TMP_FAIL(tmp_ret)) {
bool_ret = false;
}
#endif
return bool_ret;
}

View File

@ -44,7 +44,7 @@ int ObTabletTransferInfo::init(
int ret = OB_SUCCESS;
if (!ls_id.is_valid() || !transfer_start_scn.is_valid_and_not_min() || transfer_seq < 0) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("init transfer info get invalid agument", K(ret), K(ls_id), K(transfer_start_scn), K(transfer_seq));
LOG_WARN("init transfer info get invalid argument", K(ret), K(ls_id), K(transfer_start_scn), K(transfer_seq));
} else {
ls_id_ = ls_id;
transfer_start_scn_ = transfer_start_scn;

View File

@ -548,6 +548,14 @@ int ObTransferHandler::do_with_start_status_(const share::ObTransferTaskInfo &ta
DEBUG_SYNC(BEFORE_TRANSFER_START_COMMIT);
}
if (OB_FAIL(ret)) {
if (timeout_ctx.is_timeouted()) {
//overwrite ret
LOG_WARN("transfer trans already timeout, error code will change to timeout", K(ret));
ret = OB_TIMEOUT;
}
}
int64_t trans_commit_begin = ObTimeUtil::current_time();
commit_succ = OB_SUCC(ret);
if (OB_TMP_FAIL(commit_trans_(ret, trans))) {
@ -1742,6 +1750,7 @@ int ObTransferHandler::get_transfer_tablets_meta_(
tablet_meta_list.reset();
obrpc::ObCopyTabletInfo tablet_info;
const int64_t start_ts = ObTimeUtil::current_time();
DEBUG_SYNC(BEFORE_START_TRANSFER_GET_TABLET_META);
if (!is_inited_) {
ret = OB_NOT_INIT;
@ -3229,4 +3238,4 @@ int ObTransferHandler::do_clean_diagnose_info_()
}
}
}
}