From ba0ebc5075545e1f506be9305f19a1c9447b22d1 Mon Sep 17 00:00:00 2001 From: wjHuang Date: Wed, 17 Apr 2024 20:07:36 +0800 Subject: [PATCH] ddl: fix incorrect `truncate table`'s scheme_ids (#52591) close pingcap/tidb#52589 --- pkg/ddl/db_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ pkg/ddl/job_table.go | 3 +++ 2 files changed, 46 insertions(+) diff --git a/pkg/ddl/db_test.go b/pkg/ddl/db_test.go index 38c447c7777d6..72dcc7f7eeb5a 100644 --- a/pkg/ddl/db_test.go +++ b/pkg/ddl/db_test.go @@ -1066,6 +1066,49 @@ func TestMDLTruncateTable(t *testing.T) { require.True(t, timetk3.After(timeMain)) } +func TestTruncateTableAndSchemaDependence(t *testing.T) { + store, dom := testkit.CreateMockStoreAndDomain(t) + + tk := testkit.NewTestKit(t, store) + tk2 := testkit.NewTestKit(t, store) + tk3 := testkit.NewTestKit(t, store) + tk.MustExec("use test") + tk.MustExec("create table t(a int);") + + var wg sync.WaitGroup + + hook := &callback.TestDDLCallback{Do: dom} + wg.Add(2) + var timetk2 time.Time + var timetk3 time.Time + + one := false + f := func(job *model.Job) { + if one { + return + } + one = true + go func() { + tk3.MustExec("drop database test") + timetk3 = time.Now() + wg.Done() + }() + time.Sleep(3 * time.Second) + } + + hook.OnJobUpdatedExported.Store(&f) + dom.DDL().SetHook(hook) + + go func() { + tk2.MustExec("truncate table test.t") + timetk2 = time.Now() + wg.Done() + }() + + wg.Wait() + require.True(t, timetk3.After(timetk2)) +} + func TestInsertIgnore(t *testing.T) { store, dom := testkit.CreateMockStoreAndDomain(t) diff --git a/pkg/ddl/job_table.go b/pkg/ddl/job_table.go index dddb986dc1a0f..f9429709b2516 100644 --- a/pkg/ddl/job_table.go +++ b/pkg/ddl/job_table.go @@ -586,6 +586,9 @@ func job2UniqueIDs(job *model.Job, schema bool) string { slices.Sort(s) return strings.Join(s, ",") case model.ActionTruncateTable: + if schema { + return strconv.FormatInt(job.SchemaID, 10) + } return strconv.FormatInt(job.TableID, 10) + "," + strconv.FormatInt(job.Args[0].(int64), 10) } if schema {