ddl do not wait pending in dag
This commit is contained in:
@ -199,7 +199,8 @@ bool ObDDLTableMergeDag::ignore_warning()
|
||||
{
|
||||
return OB_LS_NOT_EXIST == dag_ret_
|
||||
|| OB_TABLET_NOT_EXIST == dag_ret_
|
||||
|| OB_TASK_EXPIRED == dag_ret_;
|
||||
|| OB_TASK_EXPIRED == dag_ret_
|
||||
|| OB_EAGAIN == dag_ret_;
|
||||
}
|
||||
|
||||
/****************** ObDDLTableDumpTask *****************/
|
||||
@ -269,7 +270,9 @@ int ObDDLTableDumpTask::process()
|
||||
} else if (OB_FAIL(ddl_kv_handle.get_ddl_kv(ddl_kv))) {
|
||||
LOG_WARN("get ddl kv failed", K(ret));
|
||||
} else if (OB_FAIL(ddl_kv->close())) {
|
||||
LOG_WARN("close ddl kv failed", K(ret));
|
||||
if (OB_EAGAIN != ret) {
|
||||
LOG_WARN("close ddl kv failed", K(ret));
|
||||
}
|
||||
} else if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->release_ddl_kvs(freeze_scn_))) {
|
||||
LOG_WARN("release ddl kv failed", K(ret), K(freeze_scn_));
|
||||
}
|
||||
|
||||
@ -318,7 +318,9 @@ int ObDDLKV::close()
|
||||
// do nothing
|
||||
LOG_INFO("ddl kv already closed", K(*this));
|
||||
} else if (OB_FAIL(wait_pending())) {
|
||||
LOG_WARN("wait pending failed", K(ret));
|
||||
if (OB_EAGAIN != ret) {
|
||||
LOG_WARN("wait pending failed", K(ret));
|
||||
}
|
||||
} else if (!is_rebuilder_closed_) {
|
||||
if (OB_FAIL(index_block_rebuilder_->close())) {
|
||||
LOG_WARN("index block rebuilder close failed", K(ret));
|
||||
@ -373,34 +375,16 @@ int ObDDLKV::wait_pending()
|
||||
LOG_WARN("get ls handle failed", K(ret), K(ls_id_));
|
||||
} else {
|
||||
SCN max_decided_scn;
|
||||
bool wait_ls_ts = true;
|
||||
bool wait_ddl_redo = true;
|
||||
const int64_t abs_timeout_ts = ObTimeUtility::fast_current_time() + 1000L * 1000L * 10L;
|
||||
while (OB_SUCC(ret)) {
|
||||
if (wait_ls_ts) {
|
||||
if (OB_FAIL(ls_handle.get_ls()->get_max_decided_scn(max_decided_scn))) {
|
||||
LOG_WARN("get max decided log ts failed", K(ret), K(ls_id_));
|
||||
} else {
|
||||
// max_decided_scn is the left border scn - 1
|
||||
wait_ls_ts = SCN::plus(max_decided_scn, 1) < freeze_scn_;
|
||||
}
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
if (!wait_ls_ts) {
|
||||
wait_ddl_redo = is_pending();
|
||||
}
|
||||
if (wait_ls_ts || wait_ddl_redo) {
|
||||
if (ObTimeUtility::fast_current_time() > abs_timeout_ts) {
|
||||
ret = OB_TIMEOUT;
|
||||
LOG_WARN("wait pending ddl kv timeout", K(ret), K(*this), K(max_decided_scn), K(wait_ls_ts), K(wait_ddl_redo));
|
||||
} else {
|
||||
ob_usleep(1L * 1000L); // 1 ms
|
||||
}
|
||||
if (REACH_TIME_INTERVAL(1000L * 1000L * 1L)) {
|
||||
LOG_INFO("wait pending ddl kv", K(ret), K(*this));
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
if (OB_FAIL(ls_handle.get_ls()->get_max_decided_scn(max_decided_scn))) {
|
||||
LOG_WARN("get max decided log ts failed", K(ret), K(ls_id_));
|
||||
} else {
|
||||
// max_decided_scn is the left border scn - 1
|
||||
// the min deciding(replay or apply) scn (aka left border) is max_decided_scn + 1
|
||||
const bool pending_finished = SCN::plus(max_decided_scn, 1) >= freeze_scn_ && !is_pending();
|
||||
if (!pending_finished) {
|
||||
ret = OB_EAGAIN;
|
||||
if (REACH_TIME_INTERVAL(1000L * 1000L)) {
|
||||
LOG_INFO("wait pending not finish", K(ret), K(*this), K(max_decided_scn));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user