ddl: refine test TestDDLJobErrorCount and remove test TestBackwardCompatibility (#33009)

ref pingcap/tidb#33008
This commit is contained in:
wjHuang
2022-03-11 16:43:51 +08:00
committed by GitHub
parent 15ddcd085a
commit 3226aab5cc
2 changed files with 15 additions and 124 deletions

View File

@ -32,7 +32,6 @@ import (
"github.com/pingcap/tidb/infoschema"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/meta"
"github.com/pingcap/tidb/parser/ast"
"github.com/pingcap/tidb/parser/auth"
"github.com/pingcap/tidb/parser/charset"
"github.com/pingcap/tidb/parser/model"
@ -41,7 +40,6 @@ import (
"github.com/pingcap/tidb/planner/core"
"github.com/pingcap/tidb/sessionctx/stmtctx"
"github.com/pingcap/tidb/sessionctx/variable"
"github.com/pingcap/tidb/store/mockstore"
"github.com/pingcap/tidb/tablecodec"
"github.com/pingcap/tidb/testkit"
"github.com/pingcap/tidb/types"
@ -49,7 +47,6 @@ import (
"github.com/pingcap/tidb/util/dbterror"
"github.com/pingcap/tidb/util/mock"
"github.com/stretchr/testify/require"
"github.com/tikv/client-go/v2/testutils"
)
func TestNoZeroDateMode(t *testing.T) {
@ -1229,86 +1226,6 @@ func TestBitDefaultValue(t *testing.T) {
);`)
}
func TestBackwardCompatibility(t *testing.T) {
var cluster testutils.Cluster
store, dom, clean := testkit.CreateMockStoreAndDomainWithSchemaLease(t, 600*time.Millisecond,
mockstore.WithClusterInspector(func(c testutils.Cluster) {
mockstore.BootstrapWithSingleStore(c)
cluster = c
}))
defer clean()
tk := testkit.NewTestKit(t, store)
tk.MustExec("use test")
tk.MustExec("create table t(a int primary key, b int)")
for i := 0; i < 200; i++ {
tk.MustExec(fmt.Sprintf("insert into t values(%v, %v)", i, i))
}
// alter table t add index idx_b(b);
is := dom.InfoSchema()
schemaName := model.NewCIStr("test")
tableName := model.NewCIStr("t")
schema, ok := is.SchemaByName(schemaName)
require.True(t, ok)
tbl, err := is.TableByName(schemaName, tableName)
require.NoError(t, err)
// Split the table.
tableStart := tablecodec.GenTableRecordPrefix(tbl.Meta().ID)
cluster.SplitKeys(tableStart, tableStart.PrefixNext(), 10)
indexName := model.NewCIStr("idx_b")
indexPartSpecification := &ast.IndexPartSpecification{
Column: &ast.ColumnName{
Schema: schemaName,
Table: tableName,
Name: model.NewCIStr("b"),
},
Length: types.UnspecifiedLength,
}
indexPartSpecifications := []*ast.IndexPartSpecification{indexPartSpecification}
var indexOption *ast.IndexOption
job := &model.Job{
SchemaID: schema.ID,
TableID: tbl.Meta().ID,
Type: model.ActionAddIndex,
BinlogInfo: &model.HistoryInfo{},
Args: []interface{}{false /* unique */, indexName, indexPartSpecifications, indexOption},
}
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
job.ID, err = m.GenGlobalID()
require.NoError(t, err)
job.Version = 1
job.StartTS = txn.StartTS()
// Simulate old TiDB init the add index job, old TiDB will not init the model.Job.ReorgMeta field,
// if we set job.SnapshotVer here, can simulate the behavior.
job.SnapshotVer = txn.StartTS()
err = m.EnQueueDDLJob(job)
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
ticker := time.NewTicker(50 * time.Millisecond)
defer ticker.Stop()
for range ticker.C {
historyJob, err := getHistoryDDLJob(store, job.ID)
require.NoError(t, err)
if historyJob == nil {
continue
}
require.Nil(t, historyJob.Error)
if historyJob.IsSynced() {
break
}
}
// finished add index
tk.MustExec("admin check index t idx_b")
}
func getHistoryDDLJob(store kv.Storage, id int64) (*model.Job, error) {
var job *model.Job

View File

@ -1956,54 +1956,28 @@ func (s *testSerialDBSuite) TestDDLJobErrorCount(c *C) {
tk.MustExec("use test")
tk.MustExec("drop table if exists ddl_error_table, new_ddl_error_table")
tk.MustExec("create table ddl_error_table(a int)")
is := s.dom.InfoSchema()
schemaName := model.NewCIStr("test")
tableName := model.NewCIStr("ddl_error_table")
schema, ok := is.SchemaByName(schemaName)
c.Assert(ok, IsTrue)
tbl, err := is.TableByName(schemaName, tableName)
c.Assert(err, IsNil)
newTableName := model.NewCIStr("new_ddl_error_table")
job := &model.Job{
SchemaID: schema.ID,
TableID: tbl.Meta().ID,
SchemaName: schema.Name.L,
Type: model.ActionRenameTable,
BinlogInfo: &model.HistoryInfo{},
Args: []interface{}{schema.ID, newTableName},
}
c.Assert(failpoint.Enable("github.com/pingcap/tidb/ddl/mockErrEntrySizeTooLarge", `return(true)`), IsNil)
defer func() {
c.Assert(failpoint.Disable("github.com/pingcap/tidb/ddl/mockErrEntrySizeTooLarge"), IsNil)
}()
txn, err := s.store.Begin()
c.Assert(err, IsNil)
t := meta.NewMeta(txn)
job.ID, err = t.GenGlobalID()
c.Assert(err, IsNil)
job.Version = 1
job.StartTS = txn.StartTS()
err = t.EnQueueDDLJob(job)
c.Assert(err, IsNil)
err = txn.Commit(context.Background())
c.Assert(err, IsNil)
ticker := time.NewTicker(s.lease)
defer ticker.Stop()
for range ticker.C {
historyJob, err := getHistoryDDLJob(s.store, job.ID)
c.Assert(err, IsNil)
if historyJob == nil {
continue
}
c.Assert(historyJob.ErrorCount, Equals, int64(1), Commentf("%v", historyJob))
kv.ErrEntryTooLarge.Equal(historyJob.Error)
break
var jobID int64
hook := &ddl.TestDDLCallback{}
hook.OnJobUpdatedExported = func(job *model.Job) {
jobID = job.ID
}
originHook := s.dom.DDL().GetHook()
s.dom.DDL().SetHook(hook)
defer s.dom.DDL().SetHook(originHook)
tk.MustGetErrCode("rename table ddl_error_table to new_ddl_error_table", errno.ErrEntryTooLarge)
historyJob, err := getHistoryDDLJob(s.store, jobID)
c.Assert(err, IsNil)
c.Assert(historyJob, NotNil)
c.Assert(historyJob.ErrorCount, Equals, int64(1), Commentf("%v", historyJob))
kv.ErrEntryTooLarge.Equal(historyJob.Error)
}
func (s *testSerialDBSuite) TestCommitTxnWithIndexChange(c *C) {