From 19731df3907c1e3fe7deed62fdbf818b5c57876a Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Wed, 5 Jun 2024 16:10:27 +0800 Subject: [PATCH] ddl: fix unexpected delete ETCD value (#52504) (#53738) close pingcap/tidb#47060, close pingcap/tidb#52335 --- ddl/ddl_worker.go | 4 ++-- ddl/job_table.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ddl/ddl_worker.go b/ddl/ddl_worker.go index 1c298180be8c4..af4a6a48d7eb7 100644 --- a/ddl/ddl_worker.go +++ b/ddl/ddl_worker.go @@ -525,7 +525,7 @@ func (w *worker) registerMDLInfo(job *model.Job, ver int64) error { } // cleanMDLInfo cleans metadata lock info. -func cleanMDLInfo(pool *sessionPool, jobID int64, ec *clientv3.Client) { +func cleanMDLInfo(pool *sessionPool, jobID int64, ec *clientv3.Client, cleanETCD bool) { if !variable.EnableMDL.Load() { return } @@ -539,7 +539,7 @@ func cleanMDLInfo(pool *sessionPool, jobID int64, ec *clientv3.Client) { logutil.BgLogger().Warn("unexpected error when clean mdl info", zap.Int64("job ID", jobID), zap.Error(err)) return } - if ec != nil { + if cleanETCD && ec != nil { path := fmt.Sprintf("%s/%d/", util.DDLAllSchemaVersionsByJob, jobID) _, err = ec.Delete(context.Background(), path, clientv3.WithPrefix()) if err != nil { diff --git a/ddl/job_table.go b/ddl/job_table.go index 72ad7ec77bc9c..4ccb604345a0b 100644 --- a/ddl/job_table.go +++ b/ddl/job_table.go @@ -232,7 +232,7 @@ func (d *ddl) delivery2worker(wk *worker, pool *workerPool, job *model.Job) { return } d.setAlreadyRunOnce(job.ID) - cleanMDLInfo(d.sessPool, job.ID, d.etcdCli) + cleanMDLInfo(d.sessPool, job.ID, d.etcdCli, job.State == model.JobStateSynced) // Don't have a worker now. return } @@ -272,7 +272,7 @@ func (d *ddl) delivery2worker(wk *worker, pool *workerPool, job *model.Job) { logutil.BgLogger().Info("wait latest schema version error", zap.String("category", "ddl"), zap.Error(err)) return } - cleanMDLInfo(d.sessPool, job.ID, d.etcdCli) + cleanMDLInfo(d.sessPool, job.ID, d.etcdCli, job.State == model.JobStateSynced) d.synced(job) if RunInGoTest {