Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP]ddl: refactor the V2 args of Modifying column ddl job #56047

Closed
wants to merge 15 commits into from
33 changes: 7 additions & 26 deletions pkg/ddl/column_modify_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import (
"github.com/pingcap/tidb/pkg/errno"
"github.com/pingcap/tidb/pkg/kv"
"github.com/pingcap/tidb/pkg/meta/model"
"github.com/pingcap/tidb/pkg/parser/ast"
pmodel "github.com/pingcap/tidb/pkg/parser/model"
"github.com/pingcap/tidb/pkg/parser/mysql"
"github.com/pingcap/tidb/pkg/sessiontxn"
Expand Down Expand Up @@ -532,24 +531,14 @@ func TestColumnTypeChangeGenUniqueChangingName(t *testing.T) {
assertChangingIdxName := "_idx$_idx_0"
testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) {
if job.SchemaState == model.StateDeleteOnly && job.Type == model.ActionModifyColumn {
var (
_newCol *model.ColumnInfo
_oldColName *pmodel.CIStr
_pos = &ast.ColumnPosition{}
_modifyColumnTp byte
_updatedAutoRandomBits uint64
changingCol *model.ColumnInfo
changingIdxs []*model.IndexInfo
)

err := job.DecodeArgs(&_newCol, &_oldColName, _pos, &_modifyColumnTp, &_updatedAutoRandomBits, &changingCol, &changingIdxs)
args, err := model.GetModifyColumnArgs(job)
if err != nil {
checkErr = err
return
}
if changingCol.Name.L != assertChangingColName {
if args.ChangingCol.Name.L != assertChangingColName {
checkErr = errors.New("changing column name is incorrect")
} else if changingIdxs[0].Name.L != assertChangingIdxName {
} else if args.ChangingIdxs[0].Name.L != assertChangingIdxName {
checkErr = errors.New("changing index name is incorrect")
}
}
Expand Down Expand Up @@ -586,24 +575,16 @@ func TestColumnTypeChangeGenUniqueChangingName(t *testing.T) {
query2 := "alter table t modify column _col$__col$_c1_0 tinyint"
testfailpoint.EnableCall(t, "github.com/pingcap/tidb/pkg/ddl/onJobUpdated", func(job *model.Job) {
if (job.Query == query1 || job.Query == query2) && job.SchemaState == model.StateDeleteOnly && job.Type == model.ActionModifyColumn {
var (
_newCol *model.ColumnInfo
_oldColName *pmodel.CIStr
_pos = &ast.ColumnPosition{}
_modifyColumnTp byte
_updatedAutoRandomBits uint64
changingCol *model.ColumnInfo
changingIdxs []*model.IndexInfo
)
err := job.DecodeArgs(&_newCol, &_oldColName, _pos, &_modifyColumnTp, &_updatedAutoRandomBits, &changingCol, &changingIdxs)
args, err := model.GetModifyColumnArgs(job)
if err != nil {
checkErr = err
return
}
if job.Query == query1 && changingCol.Name.L != assertChangingColName1 {

if job.Query == query1 && args.ChangingCol.Name.L != assertChangingColName1 {
checkErr = errors.New("changing column name is incorrect")
}
if job.Query == query2 && changingCol.Name.L != assertChangingColName2 {
if job.Query == query2 && args.ChangingCol.Name.L != assertChangingColName2 {
checkErr = errors.New("changing column name is incorrect")
}
}
Expand Down
18 changes: 4 additions & 14 deletions pkg/ddl/db_change_failpoints_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ import (
ddlutil "github.com/pingcap/tidb/pkg/ddl/util"
"github.com/pingcap/tidb/pkg/domain"
"github.com/pingcap/tidb/pkg/meta/model"
"github.com/pingcap/tidb/pkg/parser/ast"
pmodel "github.com/pingcap/tidb/pkg/parser/model"
"github.com/pingcap/tidb/pkg/testkit"
"github.com/pingcap/tidb/pkg/testkit/external"
"github.com/pingcap/tidb/pkg/util"
Expand Down Expand Up @@ -66,19 +64,11 @@ func TestModifyColumnTypeArgs(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, historyJob)

var (
_newCol *model.ColumnInfo
_oldColName *pmodel.CIStr
_modifyColumnTp byte
_updatedAutoRandomBits uint64
changingCol *model.ColumnInfo
changingIdxs []*model.IndexInfo
)
_pos := &ast.ColumnPosition{}
err = historyJob.DecodeArgs(&_newCol, &_oldColName, _pos, &_modifyColumnTp, &_updatedAutoRandomBits, &changingCol, &changingIdxs)
arg, err := model.GetModifyColumnArgs(historyJob)
require.NoError(t, err)
require.Nil(t, changingCol)
require.Nil(t, changingIdxs)
require.NoError(t, err)
require.Nil(t, arg.ChangingCol)
require.Nil(t, arg.ChangingIdxs)
}

func TestParallelUpdateTableReplica(t *testing.T) {
Expand Down
16 changes: 8 additions & 8 deletions pkg/ddl/delete_range.go
Original file line number Diff line number Diff line change
Expand Up @@ -420,19 +420,19 @@ func insertJobIntoDeleteRangeTable(ctx context.Context, wrapper DelRangeExecWrap
}
}
case model.ActionModifyColumn:
var indexIDs []int64
var partitionIDs []int64
if err := job.DecodeArgs(&indexIDs, &partitionIDs); err != nil {
args, err := model.GetFinishedModifyColumnArgs(job)
if err != nil {
return errors.Trace(err)
}
if len(indexIDs) == 0 {

if len(args.IndexIDs) == 0 {
return nil
}
if len(partitionIDs) == 0 {
return doBatchDeleteIndiceRange(ctx, wrapper, job.ID, job.TableID, indexIDs, ea, "modify column: table ID")
if len(args.PartitionIDs) == 0 {
return doBatchDeleteIndiceRange(ctx, wrapper, job.ID, job.TableID, args.IndexIDs, ea, "modify column: table ID")
}
for _, pid := range partitionIDs {
if err := doBatchDeleteIndiceRange(ctx, wrapper, job.ID, pid, indexIDs, ea, "modify column: partition table ID"); err != nil {
for _, pid := range args.PartitionIDs {
if err := doBatchDeleteIndiceRange(ctx, wrapper, job.ID, pid, args.IndexIDs, ea, "modify column: partition table ID"); err != nil {
return errors.Trace(err)
}
}
Expand Down
14 changes: 12 additions & 2 deletions pkg/ddl/executor.go
Original file line number Diff line number Diff line change
Expand Up @@ -3404,18 +3404,28 @@ func (e *executor) RenameColumn(ctx sessionctx.Context, ident ast.Ident, spec *a
newCol := oldCol.Clone()
newCol.Name = newColName
job := &model.Job{
Version: model.GetJobVerInUse(),
SchemaID: schema.ID,
TableID: tbl.Meta().ID,
SchemaName: schema.Name.L,
TableName: tbl.Meta().Name.L,
Type: model.ActionModifyColumn,
BinlogInfo: &model.HistoryInfo{},
ReorgMeta: NewDDLReorgMeta(ctx),
Args: []any{&newCol, oldColName, spec.Position, 0, 0},
CDCWriteSource: ctx.GetSessionVars().CDCWriteSource,
SQLMode: ctx.GetSessionVars().SQLMode,
}
err = e.DoDDLJob(ctx, job)
args := &model.ModifyColumnArgs{
ModifyingColInfo: &model.ModifyingColInfo{
NewCol: newCol,
OldColName: oldColName,
Pos: spec.Position,
ModifyColumnTp: 0,
UpdatedAutoRandomBits: 0,
},
}
job.FillArgs(args)
err = e.doDDLJob2(ctx, job, args)
return errors.Trace(err)
}

Expand Down
Loading