From 675f6a908b8e75ae1e993ee8280e96182d04cf18 Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Mon, 23 Oct 2023 18:42:36 +0800 Subject: [PATCH] ddl: fix panic in pause (#47914) (#47933) close pingcap/tidb#47902 --- pkg/ddl/index.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/pkg/ddl/index.go b/pkg/ddl/index.go index 7e8a76c823ec4..4d940ccd8791b 100644 --- a/pkg/ddl/index.go +++ b/pkg/ddl/index.go @@ -2086,9 +2086,11 @@ func (w *worker) executeDistGlobalTask(reorgInfo *reorgInfo) error { return err } err = handle.WaitGlobalTask(ctx, task) - if w.isReorgPaused(reorgInfo.Job.ID) { - logutil.BgLogger().Warn("job paused by user", zap.String("category", "ddl"), zap.Error(err)) - return dbterror.ErrPausedDDLJob.GenWithStackByArgs(reorgInfo.Job.ID) + if err := w.isReorgRunnable(reorgInfo.Job.ID, true); err != nil { + if dbterror.ErrPausedDDLJob.Equal(err) { + logutil.BgLogger().Warn("job paused by user", zap.String("category", "ddl"), zap.Error(err)) + return dbterror.ErrPausedDDLJob.GenWithStackByArgs(reorgInfo.Job.ID) + } } return err }) @@ -2116,9 +2118,12 @@ func (w *worker) executeDistGlobalTask(reorgInfo *reorgInfo) error { failpoint.Inject("pauseAfterDistTaskSuccess", func() { MockDMLExecutionOnTaskFinished() }) - if w.isReorgPaused(reorgInfo.Job.ID) { - logutil.BgLogger().Warn("job paused by user", zap.String("category", "ddl"), zap.Error(err)) - return dbterror.ErrPausedDDLJob.GenWithStackByArgs(reorgInfo.Job.ID) + + if err := w.isReorgRunnable(reorgInfo.Job.ID, true); err != nil { + if dbterror.ErrPausedDDLJob.Equal(err) { + logutil.BgLogger().Warn("job paused by user", zap.String("category", "ddl"), zap.Error(err)) + return dbterror.ErrPausedDDLJob.GenWithStackByArgs(reorgInfo.Job.ID) + } } return err }) @@ -2147,7 +2152,7 @@ func (w *worker) executeDistGlobalTask(reorgInfo *reorgInfo) error { } if err = handle.CancelGlobalTask(taskKey); err != nil { logutil.BgLogger().Error("cancel global task error", zap.String("category", "ddl"), zap.String("task_key", taskKey), zap.Error(err)) - // continue to cancel global task + // continue to cancel global task. continue } }