statstics,ddl: fix FK table forgets to send CreateTable event (#53654)

close pingcap/tidb#53652
This commit is contained in:
Weizhen Wang
2024-05-29 19:27:03 +08:00
committed by GitHub
parent fc2d0a6a18
commit aee176b572
2 changed files with 29 additions and 0 deletions

View File

@ -217,6 +217,11 @@ func createTableWithForeignKeys(d *ddlCtx, t *meta.Meta, job *model.Job, tbInfo
return ver, errors.Trace(err)
}
job.FinishTableJob(model.JobStateDone, model.StatePublic, ver, tbInfo)
createTableEvent := statsutil.NewCreateTableEvent(
job.SchemaID,
tbInfo,
)
asyncNotifyEvent(d, createTableEvent)
return ver, nil
default:
return ver, errors.Trace(dbterror.ErrInvalidDDLJob.GenWithStackByArgs("table", tbInfo.State))

View File

@ -86,6 +86,30 @@ func TestDDLTable(t *testing.T) {
require.Nil(t, h.Update(is))
statsTbl = h.GetTableStats(tableInfo)
require.False(t, statsTbl.Pseudo)
// For FK table's CreateTable Event
// https://github.com/pingcap/tidb/issues/53652
testKit.MustExec("create table t_parent (id int primary key)")
is = do.InfoSchema()
tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t_parent"))
require.NoError(t, err)
tableInfo = tbl.Meta()
err = h.HandleDDLEvent(<-h.DDLEventCh())
require.NoError(t, err)
require.Nil(t, h.Update(is))
statsTbl = h.GetTableStats(tableInfo)
require.False(t, statsTbl.Pseudo)
testKit.MustExec("create table t_child (id int primary key, pid int, foreign key (pid) references t_parent(id) on delete cascade on update cascade);")
is = do.InfoSchema()
tbl, err = is.TableByName(model.NewCIStr("test"), model.NewCIStr("t_child"))
require.NoError(t, err)
tableInfo = tbl.Meta()
err = h.HandleDDLEvent(<-h.DDLEventCh())
require.NoError(t, err)
require.Nil(t, h.Update(is))
statsTbl = h.GetTableStats(tableInfo)
require.False(t, statsTbl.Pseudo)
}
func TestCreateASystemTable(t *testing.T) {