fix ddl direct load wait_table_lock() bug
This commit is contained in:
@ -779,6 +779,11 @@ int ObTableRedefinitionTask::repending(const share::ObDDLTaskStatus next_task_st
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ObTableRedefinitionTask::check_task_status_before_pending(const share::ObDDLTaskStatus task_status)
|
||||
{
|
||||
return task_status == ObDDLTaskStatus::PREPARE || task_status == ObDDLTaskStatus::WAIT_TRANS_END || task_status == ObDDLTaskStatus::LOCK_TABLE;
|
||||
}
|
||||
|
||||
int ObTableRedefinitionTask::process()
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
|
||||
@ -60,6 +60,7 @@ public:
|
||||
virtual bool support_longops_monitoring() const override { return true; }
|
||||
virtual void flt_set_task_span_tag() const override;
|
||||
virtual void flt_set_status_span_tag() const override;
|
||||
static bool check_task_status_before_pending(const share::ObDDLTaskStatus task_status);
|
||||
protected:
|
||||
int table_redefinition(const share::ObDDLTaskStatus next_task_status);
|
||||
int copy_table_dependent_objects(const share::ObDDLTaskStatus next_task_status);
|
||||
|
||||
@ -20,6 +20,7 @@
|
||||
#include "lib/ob_define.h"
|
||||
#include "lib/mysqlclient/ob_isql_client.h"
|
||||
#include "sql/engine/cmd/ob_ddl_executor_util.h"
|
||||
#include "rootserver/ddl_task/ob_table_redefinition_task.h"
|
||||
|
||||
namespace oceanbase
|
||||
{
|
||||
@ -228,7 +229,8 @@ int ObDDLServerClient::wait_table_lock(const uint64_t tenant_id, const int64_t t
|
||||
} else {
|
||||
int task_status = 0;
|
||||
EXTRACT_INT_FIELD_MYSQL(*result, "status", task_status, int);
|
||||
if (share::ObDDLTaskStatus::REPENDING != static_cast<share::ObDDLTaskStatus>(task_status)) {
|
||||
share::ObDDLTaskStatus task_cur_status = static_cast<share::ObDDLTaskStatus>(task_status);
|
||||
if (rootserver::ObTableRedefinitionTask::check_task_status_before_pending(task_cur_status)) {
|
||||
LOG_INFO("task status not equal REPENDING, Please Keep Waiting", K(task_status));
|
||||
if (OB_FAIL(sql::ObDDLExecutorUtil::handle_session_exception(session))) {
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user