Fix storage ha iterator get transfer abort tablet bug

This commit is contained in:
godyangfight
2023-09-12 09:14:29 +00:00
committed by ob-robot
parent dee288d4b6
commit 7dcb39d65b
2 changed files with 17 additions and 0 deletions

View File

@ -52,6 +52,7 @@ ERRSIM_POINT_DEF(EN_UPDATE_ALL_TABLET_TO_LS_FAILED);
ERRSIM_POINT_DEF(EN_UPDATE_TRANSFER_TASK_FAILED); ERRSIM_POINT_DEF(EN_UPDATE_TRANSFER_TASK_FAILED);
ERRSIM_POINT_DEF(EN_START_CAN_NOT_RETRY); ERRSIM_POINT_DEF(EN_START_CAN_NOT_RETRY);
ERRSIM_POINT_DEF(EN_MAKE_SRC_LS_REBUILD); ERRSIM_POINT_DEF(EN_MAKE_SRC_LS_REBUILD);
ERRSIM_POINT_DEF(EN_INSERT_TRANSFER_START_FAILED);
ObTransferHandler::ObTransferHandler() ObTransferHandler::ObTransferHandler()
: is_inited_(false), : is_inited_(false),
@ -481,6 +482,14 @@ int ObTransferHandler::do_with_start_status_(const share::ObTransferTaskInfo &ta
} else if (OB_FAIL(do_trans_transfer_start_(task_info, config_version, timeout_ctx, trans))) { } else if (OB_FAIL(do_trans_transfer_start_(task_info, config_version, timeout_ctx, trans))) {
LOG_WARN("failed to do trans transfer start", K(ret), K(task_info)); LOG_WARN("failed to do trans transfer start", K(ret), K(task_info));
} else { } else {
#ifdef ERRSIM
if (OB_SUCC(ret)) {
ret = EN_INSERT_TRANSFER_START_FAILED ? : OB_SUCCESS;
if (OB_FAIL(ret)) {
SERVER_EVENT_SYNC_ADD("transfer_errsim", "transfer_start_failed", "result", ret);
}
}
#endif
DEBUG_SYNC(BEFORE_TRANSFER_START_COMMIT); DEBUG_SYNC(BEFORE_TRANSFER_START_COMMIT);
} }

View File

@ -6065,6 +6065,7 @@ int ObLSTabletService::ha_scan_all_tablets(const HandleTabletMetaFunc &handle_ta
ObTabletHandle tablet_handle; ObTabletHandle tablet_handle;
ObTablet *tablet = nullptr; ObTablet *tablet = nullptr;
obrpc::ObCopyTabletInfo tablet_info; obrpc::ObCopyTabletInfo tablet_info;
ObTabletCreateDeleteMdsUserData user_data;
while (OB_SUCC(ret)) { while (OB_SUCC(ret)) {
tablet_info.reset(); tablet_info.reset();
@ -6078,6 +6079,13 @@ int ObLSTabletService::ha_scan_all_tablets(const HandleTabletMetaFunc &handle_ta
} else if (OB_ISNULL(tablet = tablet_handle.get_obj())) { } else if (OB_ISNULL(tablet = tablet_handle.get_obj())) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("tablet is nullptr", K(ret), K(tablet_handle)); LOG_WARN("tablet is nullptr", K(ret), K(tablet_handle));
} else if (OB_FAIL(tablet->ObITabletMdsInterface::get_tablet_status(
share::SCN::max_scn(), user_data, ObTabletCommon::DEFAULT_GET_TABLET_NO_WAIT))) {
//TODO(muwei.ym) CAN NOT USE this condition when MDS supports uncommitted transaction
LOG_WARN("failed to get tx data", K(ret), KPC(tablet));
if (OB_EMPTY_RESULT == ret) {
ret = OB_SUCCESS;
}
} else if (OB_FAIL(tablet->build_migration_tablet_param(tablet_info.param_))) { } else if (OB_FAIL(tablet->build_migration_tablet_param(tablet_info.param_))) {
LOG_WARN("failed to build migration tablet param", K(ret)); LOG_WARN("failed to build migration tablet param", K(ret));
} else if (OB_FAIL(tablet->get_ha_sstable_size(tablet_info.data_size_))) { } else if (OB_FAIL(tablet->get_ha_sstable_size(tablet_info.data_size_))) {