gather readble scn in memory
This commit is contained in:
@ -716,7 +716,8 @@ int ObRecoveryLSService::construct_sys_ls_recovery_stat_based_on_sync_scn_(
|
||||
readable_scn = tmp_ls_stat.get_readable_scn();
|
||||
}
|
||||
|
||||
if (FAILEDx(ls_stat.init_only_recovery_stat(tenant_id_, SYS_LS, sync_scn, readable_scn))) {
|
||||
if (FAILEDx(ls_stat.init_only_recovery_stat(tenant_id_, SYS_LS, sync_scn, readable_scn,
|
||||
tmp_ls_stat.get_config_version()))) {
|
||||
LOG_WARN("failed to init ls recovery stat", KR(ret), K(tenant_id_),
|
||||
K(sync_scn), K(readable_scn), K(tmp_ls_stat), K(tenant_info));
|
||||
}
|
||||
@ -1106,6 +1107,8 @@ int ObRecoveryLSService::do_ls_balance_task_()
|
||||
LOG_WARN("get_tenant_info failed", K(ret));
|
||||
} else if (tenant_info.get_standby_scn() >= ls_balance_task.get_operation_scn()) {
|
||||
const uint64_t exec_tenant_id = gen_meta_tenant_id(tenant_id_);
|
||||
//transfer_scn maybe sync_scn
|
||||
SCN transfer_scn;
|
||||
START_TRANSACTION(proxy_, exec_tenant_id)
|
||||
if (OB_FAIL(ret)) {
|
||||
LOG_WARN("failed to start trans", KR(ret));
|
||||
@ -1114,6 +1117,7 @@ int ObRecoveryLSService::do_ls_balance_task_()
|
||||
LOG_WARN("failed to do ls alter task", KR(ret), K(ls_balance_task));
|
||||
}
|
||||
} else if (ls_balance_task.get_task_op().is_transfer_end()) {
|
||||
transfer_scn = ls_balance_task.get_operation_scn();
|
||||
} else if (ls_balance_task.get_task_op().is_transfer_begin()) {
|
||||
//find transfer end, or tenant is in flashback
|
||||
ObBalanceTaskHelper transfer_end_task;
|
||||
@ -1122,28 +1126,43 @@ int ObRecoveryLSService::do_ls_balance_task_()
|
||||
ls_balance_task.get_dest_ls(), trans, transfer_end_task);
|
||||
if (OB_SUCC(ret)) {
|
||||
//if has transfer end, can remove transfer begin
|
||||
LOG_INFO("has transfer end task, can remove transfer begin", KR(ret),
|
||||
K(ls_balance_task), K(transfer_end_task));
|
||||
transfer_scn = ls_balance_task.get_operation_scn();
|
||||
LOG_INFO("has transfer end task", KR(ret), K(ls_balance_task), K(transfer_end_task));
|
||||
} else if (OB_ENTRY_NOT_EXIST != ret) {
|
||||
LOG_WARN("failed to find transfer end task", KR(ret), K(tenant_id_), K(ls_balance_task));
|
||||
} else if (tenant_info.is_prepare_flashback_for_switch_to_primary_status()
|
||||
|| tenant_info.is_prepare_flashback_for_failover_to_primary_status()) {
|
||||
//check tenant_info status and check wait readable_scn is equal to sync_scn
|
||||
ret = OB_SUCCESS;
|
||||
transfer_scn = tenant_info.get_sync_scn();
|
||||
if (tenant_info.get_sync_scn() != tenant_info.get_standby_scn()) {
|
||||
ret = OB_NEED_WAIT;
|
||||
LOG_WARN("must wait repay to newest", KR(ret), K(tenant_id_), K(tenant_info),
|
||||
K(ls_balance_task));
|
||||
} else {
|
||||
LOG_INFO("repay to newest, can remove transfer begin before failover", K(tenant_info), K(ls_balance_task));
|
||||
LOG_INFO("replay to newest", K(tenant_info), K(ls_balance_task));
|
||||
}
|
||||
} else {
|
||||
ret = OB_NEED_RETRY;
|
||||
LOG_WARN("can not find transfer end task, can not end transfer begin task", KR(ret), K(tenant_info), K(ls_balance_task));
|
||||
}
|
||||
} else {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("ls balance task op is unexpected", KR(ret), K(ls_balance_task));
|
||||
}
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (ls_balance_task.get_task_op().is_transfer_begin()
|
||||
|| ls_balance_task.get_task_op().is_transfer_end()) {
|
||||
bool is_replay_finish = false;
|
||||
if (!transfer_scn.is_valid()) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("transfer scn is invalid", KR(ret), K(transfer_scn), K(tenant_info), K(ls_balance_task));
|
||||
} else if (OB_FAIL(ObLSServiceHelper::check_transfer_task_replay(
|
||||
tenant_id_, ls_balance_task.get_src_ls(),
|
||||
ls_balance_task.get_dest_ls(), transfer_scn, is_replay_finish))) {
|
||||
LOG_WARN("failed to check transfer task replay", KR(ret), K(tenant_id_), K(ls_balance_task),
|
||||
K(tenant_info), K(transfer_scn));
|
||||
} else if (!is_replay_finish) {
|
||||
ret = OB_NEED_RETRY;
|
||||
LOG_WARN("can not remove ls balance task helper", KR(ret), K(ls_balance_task), K(transfer_scn));
|
||||
}
|
||||
}
|
||||
if (FAILEDx(ObBalanceTaskHelperTableOperator::remove_task(tenant_id_,
|
||||
ls_balance_task.get_operation_scn(), trans))) {
|
||||
@ -1162,6 +1181,8 @@ int ObRecoveryLSService::do_ls_balance_task_()
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int ObRecoveryLSService::do_ls_balance_alter_task_(const share::ObBalanceTaskHelper &ls_balance_task,
|
||||
common::ObMySQLTransaction &trans)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user