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;
|
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 ObTableRedefinitionTask::process()
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
|||||||
@ -60,6 +60,7 @@ public:
|
|||||||
virtual bool support_longops_monitoring() const override { return true; }
|
virtual bool support_longops_monitoring() const override { return true; }
|
||||||
virtual void flt_set_task_span_tag() const override;
|
virtual void flt_set_task_span_tag() const override;
|
||||||
virtual void flt_set_status_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:
|
protected:
|
||||||
int table_redefinition(const share::ObDDLTaskStatus next_task_status);
|
int table_redefinition(const share::ObDDLTaskStatus next_task_status);
|
||||||
int copy_table_dependent_objects(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/ob_define.h"
|
||||||
#include "lib/mysqlclient/ob_isql_client.h"
|
#include "lib/mysqlclient/ob_isql_client.h"
|
||||||
#include "sql/engine/cmd/ob_ddl_executor_util.h"
|
#include "sql/engine/cmd/ob_ddl_executor_util.h"
|
||||||
|
#include "rootserver/ddl_task/ob_table_redefinition_task.h"
|
||||||
|
|
||||||
namespace oceanbase
|
namespace oceanbase
|
||||||
{
|
{
|
||||||
@ -228,7 +229,8 @@ int ObDDLServerClient::wait_table_lock(const uint64_t tenant_id, const int64_t t
|
|||||||
} else {
|
} else {
|
||||||
int task_status = 0;
|
int task_status = 0;
|
||||||
EXTRACT_INT_FIELD_MYSQL(*result, "status", task_status, int);
|
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));
|
LOG_INFO("task status not equal REPENDING, Please Keep Waiting", K(task_status));
|
||||||
if (OB_FAIL(sql::ObDDLExecutorUtil::handle_session_exception(session))) {
|
if (OB_FAIL(sql::ObDDLExecutorUtil::handle_session_exception(session))) {
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user