diff --git a/src/share/ob_debug_sync_point.h b/src/share/ob_debug_sync_point.h index 383e282ce3..f1b26d3dc1 100755 --- a/src/share/ob_debug_sync_point.h +++ b/src/share/ob_debug_sync_point.h @@ -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); diff --git a/src/storage/high_availability/ob_storage_ha_utils.cpp b/src/storage/high_availability/ob_storage_ha_utils.cpp index e85967c390..e4487ec2d7 100644 --- a/src/storage/high_availability/ob_storage_ha_utils.cpp +++ b/src/storage/high_availability/ob_storage_ha_utils.cpp @@ -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; } diff --git a/src/storage/high_availability/ob_tablet_transfer_info.cpp b/src/storage/high_availability/ob_tablet_transfer_info.cpp index aabb0ed477..b759c4888f 100644 --- a/src/storage/high_availability/ob_tablet_transfer_info.cpp +++ b/src/storage/high_availability/ob_tablet_transfer_info.cpp @@ -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; diff --git a/src/storage/high_availability/ob_transfer_handler.cpp b/src/storage/high_availability/ob_transfer_handler.cpp index 8e164fef42..4eb0b4574b 100644 --- a/src/storage/high_availability/ob_transfer_handler.cpp +++ b/src/storage/high_availability/ob_transfer_handler.cpp @@ -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_() } } -} \ No newline at end of file +}