Wait till data_checkpoint starts freeze_task successfully

This commit is contained in:
obdev 2023-03-07 04:13:20 +00:00 committed by ob-robot
parent 6008fdb2a5
commit 92212a2dba
2 changed files with 17 additions and 5 deletions

View File

@ -497,14 +497,12 @@ int ObFreezer::inner_logstream_freeze(ObFuture<int> *result)
share::ObLSID ls_id = get_ls_id();
ObTableHandleV2 handle;
if (OB_FAIL(get_ls_data_checkpoint()->ls_freeze(SCN::max_scn()))) {
// move memtables from active_list to frozen_list
TRANS_LOG(WARN, "[Freezer] data_checkpoint freeze failed", K(ret), K(ls_id));
stat_.add_diagnose_info("data_checkpoint freeze failed");
if (FALSE_IT(submit_checkpoint_task())) {
} else if (FALSE_IT(submit_log_for_freeze())) {
} else if (OB_FAIL(submit_freeze_task(true/*is_ls_freeze*/, result, handle))) {
TRANS_LOG(WARN, "failed to submit ls_freeze task", K(ret), K(ls_id));
TRANS_LOG(ERROR, "failed to submit ls_freeze task", K(ret), K(ls_id));
stat_.add_diagnose_info("fail to submit ls_freeze_task");
ob_abort();
} else {
TRANS_LOG(INFO, "[Freezer] succeed to start ls_freeze_task", K(ret), K(ls_id));
}
@ -512,6 +510,19 @@ int ObFreezer::inner_logstream_freeze(ObFuture<int> *result)
return ret;
}
void ObFreezer::submit_checkpoint_task()
{
int ret = OB_SUCCESS;
do {
if (OB_FAIL(get_ls_data_checkpoint()->ls_freeze(SCN::max_scn()))) {
TRANS_LOG(WARN, "[Freezer] data_checkpoint freeze failed", K(ret), K(ls_id));
stat_.add_diagnose_info("data_checkpoint freeze failed");
ob_usleep(100);
}
} while (OB_FAIL(ret));
}
int ObFreezer::ls_freeze_task()
{
int ret = OB_SUCCESS;

View File

@ -307,6 +307,7 @@ private:
int check_ls_state(); // must be used under the protection of ls_lock
int freeze_normal_tablet_(const ObTabletID &tablet_id, ObFuture<int> *result = nullptr);
int freeze_ls_inner_tablet_(const ObTabletID &tablet_id);
void submit_checkpoint_task();
private:
// flag whether the logsteram is freezing
// the first bit: 1, freeze; 0, not freeze