|
|
|
@ -125,29 +125,16 @@ int ObTabletStartTransferOutReplayExecutor::do_replay_(ObTabletHandle &tablet_ha
|
|
|
|
ObTabletCreateDeleteMdsUserData user_data;
|
|
|
|
ObTabletCreateDeleteMdsUserData user_data;
|
|
|
|
mds::MdsCtx &user_ctx = static_cast<mds::MdsCtx&>(*buffer_ctx_);
|
|
|
|
mds::MdsCtx &user_ctx = static_cast<mds::MdsCtx&>(*buffer_ctx_);
|
|
|
|
ObTablet *tablet = nullptr;
|
|
|
|
ObTablet *tablet = nullptr;
|
|
|
|
ObLSService *ls_service = nullptr;
|
|
|
|
|
|
|
|
ObLS *ls = nullptr;
|
|
|
|
|
|
|
|
ObLSHandle ls_handle;
|
|
|
|
|
|
|
|
if (!is_inited_) {
|
|
|
|
if (!is_inited_) {
|
|
|
|
ret = OB_NOT_INIT;
|
|
|
|
ret = OB_NOT_INIT;
|
|
|
|
LOG_WARN("tablet start transfer out replay executor do not init", K(ret));
|
|
|
|
LOG_WARN("tablet start transfer out replay executor do not init", K(ret));
|
|
|
|
} else if (OB_FAIL(check_src_transfer_tablet_(tablet_handle))) {
|
|
|
|
} else if (OB_FAIL(check_src_transfer_tablet_(tablet_handle))) {
|
|
|
|
LOG_WARN("failed to check src transfer tablet", K(ret), K(tablet_handle));
|
|
|
|
LOG_WARN("failed to check src transfer tablet", K(ret), K(tablet_handle));
|
|
|
|
} else if (OB_ISNULL(ls_service = MTL(ObLSService*))) {
|
|
|
|
|
|
|
|
ret = OB_ERR_UNEXPECTED;
|
|
|
|
|
|
|
|
LOG_WARN("failed to get ObLSService from MTL", K(ret), KP(ls_service));
|
|
|
|
|
|
|
|
} 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 should not be NULL", K(ret), KP(tablet), K(tablet_handle));
|
|
|
|
LOG_WARN("tablet should not be NULL", K(ret), KP(tablet), K(tablet_handle));
|
|
|
|
} else if (OB_FAIL(tablet->ObITabletMdsInterface::get_tablet_status(share::SCN::max_scn(), user_data, ObTabletCommon::DEFAULT_GET_TABLET_DURATION_US))) {
|
|
|
|
} else if (OB_FAIL(tablet->ObITabletMdsInterface::get_tablet_status(share::SCN::max_scn(), user_data, ObTabletCommon::DEFAULT_GET_TABLET_DURATION_US))) {
|
|
|
|
LOG_WARN("failed to get tx data", K(ret), KPC(tablet), K(tablet_info_));
|
|
|
|
LOG_WARN("failed to get tx data", K(ret), KPC(tablet), K(tablet_info_));
|
|
|
|
} else if (OB_FAIL(ls_service->get_ls(src_ls_id_, ls_handle, ObLSGetMod::HA_MOD))) {
|
|
|
|
|
|
|
|
LOG_WARN("failed to get ls", K(ret));
|
|
|
|
|
|
|
|
} else if (OB_ISNULL(ls = ls_handle.get_ls())) {
|
|
|
|
|
|
|
|
ret = OB_ERR_UNEXPECTED;
|
|
|
|
|
|
|
|
LOG_WARN("ls should not be NULL", K(ret), KP(ls));
|
|
|
|
|
|
|
|
} else if (OB_FAIL(ObTXTransferUtils::set_tablet_freeze_flag(ls->get_ls_id(), tablet))) {
|
|
|
|
|
|
|
|
LOG_WARN("failed to freeze tablet memtable", K(ret), "tablet id", tablet->get_tablet_meta().tablet_id_);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
user_data.transfer_ls_id_ = dest_ls_id_;
|
|
|
|
user_data.transfer_ls_id_ = dest_ls_id_;
|
|
|
|
user_data.data_type_ = ObTabletMdsUserDataType::START_TRANSFER_OUT;
|
|
|
|
user_data.data_type_ = ObTabletMdsUserDataType::START_TRANSFER_OUT;
|
|
|
|
@ -306,7 +293,7 @@ int ObTabletStartTransferOutHelper::prepare_src_transfer_tablet_(
|
|
|
|
LOG_WARN("tablet should not be NULL", K(ret), K(tablet_info));
|
|
|
|
LOG_WARN("tablet should not be NULL", K(ret), K(tablet_info));
|
|
|
|
} else if (CLICK_FAIL(check_src_transfer_tablet_(ls->get_ls_id(), tablet_info, tablet))) {
|
|
|
|
} else if (CLICK_FAIL(check_src_transfer_tablet_(ls->get_ls_id(), tablet_info, tablet))) {
|
|
|
|
LOG_WARN("failed to check src transfer tablet", K(ret), K(tablet_info), KPC(tablet));
|
|
|
|
LOG_WARN("failed to check src transfer tablet", K(ret), K(tablet_info), KPC(tablet));
|
|
|
|
} else if (CLICK_FAIL(ObTXTransferUtils::set_tablet_freeze_flag(ls->get_ls_id(), tablet))) {
|
|
|
|
} else if (CLICK_FAIL(ObTXTransferUtils::set_tablet_freeze_flag(*ls, tablet))) {
|
|
|
|
LOG_WARN("failed to freeze memtable", K(ret), K(tablet_info), KPC(tablet));
|
|
|
|
LOG_WARN("failed to freeze memtable", K(ret), K(tablet_info), KPC(tablet));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
return ret;
|
|
|
|
@ -508,6 +495,46 @@ int ObTabletStartTransferOutHelper::try_enable_dest_ls_clog_replay(
|
|
|
|
return ret;
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int ObTabletStartTransferOutHelper::set_transfer_tablets_freeze_flag_(const ObTXStartTransferOutInfo &tx_start_transfer_out_info)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
int ret = OB_SUCCESS;
|
|
|
|
|
|
|
|
ObLSService *ls_service = nullptr;
|
|
|
|
|
|
|
|
ObLS *ls = nullptr;
|
|
|
|
|
|
|
|
ObLSHandle ls_handle;
|
|
|
|
|
|
|
|
if (!tx_start_transfer_out_info.is_valid()) {
|
|
|
|
|
|
|
|
ret = OB_INVALID_ARGUMENT;
|
|
|
|
|
|
|
|
LOG_WARN("invalid argument", K(ret), K(tx_start_transfer_out_info));
|
|
|
|
|
|
|
|
} else if (OB_ISNULL(ls_service = MTL(ObLSService*))) {
|
|
|
|
|
|
|
|
ret = OB_ERR_UNEXPECTED;
|
|
|
|
|
|
|
|
LOG_WARN("failed to get ObLSService from MTL", K(ret), KP(ls_service));
|
|
|
|
|
|
|
|
} else if (OB_FAIL(ls_service->get_ls(tx_start_transfer_out_info.src_ls_id_, ls_handle, ObLSGetMod::HA_MOD))) {
|
|
|
|
|
|
|
|
LOG_WARN("failed to get ls", K(ret));
|
|
|
|
|
|
|
|
} else if (OB_ISNULL(ls = ls_handle.get_ls())) {
|
|
|
|
|
|
|
|
ret = OB_ERR_UNEXPECTED;
|
|
|
|
|
|
|
|
LOG_WARN("ls should not be NULL", K(ret), KP(ls));
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
for (int64_t i = 0; OB_SUCC(ret) && i < tx_start_transfer_out_info.tablet_list_.count(); ++i) {
|
|
|
|
|
|
|
|
const share::ObTransferTabletInfo &tablet_info = tx_start_transfer_out_info.tablet_list_.at(i);
|
|
|
|
|
|
|
|
const ObTabletMapKey key(tx_start_transfer_out_info.src_ls_id_, tablet_info.tablet_id_);
|
|
|
|
|
|
|
|
ObTabletHandle tablet_handle;
|
|
|
|
|
|
|
|
ObTablet *tablet = nullptr;
|
|
|
|
|
|
|
|
if (OB_FAIL(ObTabletCreateDeleteHelper::get_tablet(key, tablet_handle))) {
|
|
|
|
|
|
|
|
if (OB_TABLET_NOT_EXIST == ret) {
|
|
|
|
|
|
|
|
ret = OB_SUCCESS;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
LOG_WARN("failed to get tablet", K(ret), K(key));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
} else if (OB_ISNULL(tablet = tablet_handle.get_obj())) {
|
|
|
|
|
|
|
|
ret = OB_ERR_UNEXPECTED;
|
|
|
|
|
|
|
|
LOG_WARN("tablet should not be NULL", K(ret), KP(tablet), K(key));
|
|
|
|
|
|
|
|
} else if (OB_FAIL(ObTXTransferUtils::set_tablet_freeze_flag(*ls, tablet))) {
|
|
|
|
|
|
|
|
LOG_WARN("failed to freeze tablet memtable", K(ret), K(key));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int ObTabletStartTransferOutHelper::on_replay_success_(
|
|
|
|
int ObTabletStartTransferOutHelper::on_replay_success_(
|
|
|
|
const share::SCN &scn,
|
|
|
|
const share::SCN &scn,
|
|
|
|
const ObTXStartTransferOutInfo &tx_start_transfer_out_info,
|
|
|
|
const ObTXStartTransferOutInfo &tx_start_transfer_out_info,
|
|
|
|
@ -531,9 +558,11 @@ int ObTabletStartTransferOutHelper::on_replay_success_(
|
|
|
|
|
|
|
|
|
|
|
|
if (!scn.is_valid() || !tx_start_transfer_out_info.is_valid()) {
|
|
|
|
if (!scn.is_valid() || !tx_start_transfer_out_info.is_valid()) {
|
|
|
|
ret = OB_INVALID_ARGUMENT;
|
|
|
|
ret = OB_INVALID_ARGUMENT;
|
|
|
|
LOG_WARN("on_register_ get invalid argument", K(ret), K(scn), K(tx_start_transfer_out_info));
|
|
|
|
LOG_WARN("on_replay_success_ get invalid argument", K(ret), K(scn), K(tx_start_transfer_out_info));
|
|
|
|
} else if (CLICK_FAIL(try_enable_dest_ls_clog_replay(scn, tx_start_transfer_out_info.dest_ls_id_))) {
|
|
|
|
} else if (CLICK_FAIL(try_enable_dest_ls_clog_replay(scn, tx_start_transfer_out_info.dest_ls_id_))) {
|
|
|
|
LOG_WARN("failed to try enable dest ls clog replay", K(ret), K(scn), K(tx_start_transfer_out_info));
|
|
|
|
LOG_WARN("failed to try enable dest ls clog replay", K(ret), K(scn), K(tx_start_transfer_out_info));
|
|
|
|
|
|
|
|
} else if (CLICK_FAIL(set_transfer_tablets_freeze_flag_(tx_start_transfer_out_info))) {
|
|
|
|
|
|
|
|
LOG_WARN("failed to set transfer src tablets freeze flag", K(ret), K(scn), K(tx_start_transfer_out_info));
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
for (int64_t i = 0; OB_SUCC(ret) && i < tx_start_transfer_out_info.tablet_list_.count(); ++i) {
|
|
|
|
for (int64_t i = 0; OB_SUCC(ret) && i < tx_start_transfer_out_info.tablet_list_.count(); ++i) {
|
|
|
|
MDS_TG(10_ms);
|
|
|
|
MDS_TG(10_ms);
|
|
|
|
|