Wait till data_checkpoint starts freeze_task successfully
This commit is contained in:
@ -497,14 +497,12 @@ int ObFreezer::inner_logstream_freeze(ObFuture<int> *result)
|
|||||||
share::ObLSID ls_id = get_ls_id();
|
share::ObLSID ls_id = get_ls_id();
|
||||||
ObTableHandleV2 handle;
|
ObTableHandleV2 handle;
|
||||||
|
|
||||||
if (OB_FAIL(get_ls_data_checkpoint()->ls_freeze(SCN::max_scn()))) {
|
if (FALSE_IT(submit_checkpoint_task())) {
|
||||||
// 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");
|
|
||||||
} else if (FALSE_IT(submit_log_for_freeze())) {
|
} else if (FALSE_IT(submit_log_for_freeze())) {
|
||||||
} else if (OB_FAIL(submit_freeze_task(true/*is_ls_freeze*/, result, handle))) {
|
} 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");
|
stat_.add_diagnose_info("fail to submit ls_freeze_task");
|
||||||
|
ob_abort();
|
||||||
} else {
|
} else {
|
||||||
TRANS_LOG(INFO, "[Freezer] succeed to start ls_freeze_task", K(ret), K(ls_id));
|
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;
|
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 ObFreezer::ls_freeze_task()
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
|||||||
@ -307,6 +307,7 @@ private:
|
|||||||
int check_ls_state(); // must be used under the protection of ls_lock
|
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_normal_tablet_(const ObTabletID &tablet_id, ObFuture<int> *result = nullptr);
|
||||||
int freeze_ls_inner_tablet_(const ObTabletID &tablet_id);
|
int freeze_ls_inner_tablet_(const ObTabletID &tablet_id);
|
||||||
|
void submit_checkpoint_task();
|
||||||
private:
|
private:
|
||||||
// flag whether the logsteram is freezing
|
// flag whether the logsteram is freezing
|
||||||
// the first bit: 1, freeze; 0, not freeze
|
// the first bit: 1, freeze; 0, not freeze
|
||||||
|
|||||||
Reference in New Issue
Block a user