fix ddl direct load wait_table_lock() bug

This commit is contained in:
obdev
2023-02-09 17:29:16 +00:00
committed by ob-robot
parent 345a5ef182
commit 7569081da2
3 changed files with 9 additions and 1 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;