Skip to content

Commit c13eb90

Browse files
authored
ddl: args v2 for create/alter/drop resource group (#56153)
ref #53930
1 parent 68fdf55 commit c13eb90

File tree

7 files changed

+90
-22
lines changed

7 files changed

+90
-22
lines changed

pkg/ddl/executor.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5784,17 +5784,18 @@ func (e *executor) AddResourceGroup(ctx sessionctx.Context, stmt *ast.CreateReso
57845784
logutil.DDLLogger().Debug("create resource group", zap.String("name", groupName.O), zap.Stringer("resource group settings", groupInfo.ResourceGroupSettings))
57855785

57865786
job := &model.Job{
5787+
Version: model.GetJobVerInUse(),
57875788
SchemaName: groupName.L,
57885789
Type: model.ActionCreateResourceGroup,
57895790
BinlogInfo: &model.HistoryInfo{},
57905791
CDCWriteSource: ctx.GetSessionVars().CDCWriteSource,
5791-
Args: []any{groupInfo, false},
57925792
InvolvingSchemaInfo: []model.InvolvingSchemaInfo{{
57935793
ResourceGroup: groupInfo.Name.L,
57945794
}},
57955795
SQLMode: ctx.GetSessionVars().SQLMode,
57965796
}
5797-
err = e.DoDDLJob(ctx, job)
5797+
args := &model.ResourceGroupArgs{RGInfo: groupInfo}
5798+
err = e.doDDLJob2(ctx, job, args)
57985799
return err
57995800
}
58005801

@@ -5828,18 +5829,19 @@ func (e *executor) DropResourceGroup(ctx sessionctx.Context, stmt *ast.DropResou
58285829
}
58295830

58305831
job := &model.Job{
5832+
Version: model.GetJobVerInUse(),
58315833
SchemaID: group.ID,
58325834
SchemaName: group.Name.L,
58335835
Type: model.ActionDropResourceGroup,
58345836
BinlogInfo: &model.HistoryInfo{},
58355837
CDCWriteSource: ctx.GetSessionVars().CDCWriteSource,
5836-
Args: []any{groupName},
58375838
InvolvingSchemaInfo: []model.InvolvingSchemaInfo{{
58385839
ResourceGroup: groupName.L,
58395840
}},
58405841
SQLMode: ctx.GetSessionVars().SQLMode,
58415842
}
5842-
err = e.DoDDLJob(ctx, job)
5843+
args := &model.ResourceGroupArgs{RGInfo: &model.ResourceGroupInfo{Name: groupName}}
5844+
err = e.doDDLJob2(ctx, job, args)
58435845
return err
58445846
}
58455847

@@ -5869,18 +5871,19 @@ func (e *executor) AlterResourceGroup(ctx sessionctx.Context, stmt *ast.AlterRes
58695871
logutil.DDLLogger().Debug("alter resource group", zap.String("name", groupName.L), zap.Stringer("new resource group settings", newGroupInfo.ResourceGroupSettings))
58705872

58715873
job := &model.Job{
5874+
Version: model.GetJobVerInUse(),
58725875
SchemaID: newGroupInfo.ID,
58735876
SchemaName: newGroupInfo.Name.L,
58745877
Type: model.ActionAlterResourceGroup,
58755878
BinlogInfo: &model.HistoryInfo{},
58765879
CDCWriteSource: ctx.GetSessionVars().CDCWriteSource,
5877-
Args: []any{newGroupInfo},
58785880
InvolvingSchemaInfo: []model.InvolvingSchemaInfo{{
58795881
ResourceGroup: newGroupInfo.Name.L,
58805882
}},
58815883
SQLMode: ctx.GetSessionVars().SQLMode,
58825884
}
5883-
err = e.DoDDLJob(ctx, job)
5885+
args := &model.ResourceGroupArgs{RGInfo: newGroupInfo}
5886+
err = e.doDDLJob2(ctx, job, args)
58845887
return err
58855888
}
58865889

pkg/ddl/job_submitter.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -556,8 +556,8 @@ func assignGIDsForJobs(jobWs []*JobWrapper, ids []int64) {
556556
jobW.SchemaID = dbInfo.ID
557557
case model.ActionCreateResourceGroup:
558558
if !jobW.IDAllocated {
559-
rgInfo := jobW.Args[0].(*model.ResourceGroupInfo)
560-
rgInfo.ID = alloc.next()
559+
args := jobW.JobArgs.(*model.ResourceGroupArgs)
560+
args.RGInfo.ID = alloc.next()
561561
}
562562
case model.ActionAlterTablePartitioning:
563563
if !jobW.IDAllocated {

pkg/ddl/job_submitter_test.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,15 @@ func TestCombinedIDAllocation(t *testing.T) {
173173
return j
174174
}
175175

176-
genRGroupJob := func() *model.Job {
176+
genRGroupJob := func(idAllocated bool) *ddl.JobWrapper {
177177
info := &model.ResourceGroupInfo{}
178-
return &model.Job{
179-
Version: model.JobVersion1,
178+
job := &model.Job{
179+
Version: model.GetJobVerInUse(),
180180
Type: model.ActionCreateResourceGroup,
181-
Args: []any{info},
182181
}
182+
return ddl.NewJobWrapperWithArgs(job, &model.ResourceGroupArgs{
183+
RGInfo: info,
184+
}, idAllocated)
183185
}
184186

185187
genAlterTblPartitioningJob := func(partCnt int) *model.Job {
@@ -284,11 +286,11 @@ func TestCombinedIDAllocation(t *testing.T) {
284286
requiredIDCount: 1,
285287
},
286288
{
287-
jobW: ddl.NewJobWrapper(genRGroupJob(), false),
289+
jobW: genRGroupJob(false),
288290
requiredIDCount: 2,
289291
},
290292
{
291-
jobW: ddl.NewJobWrapper(genRGroupJob(), true),
293+
jobW: genRGroupJob(true),
292294
requiredIDCount: 1,
293295
},
294296
{
@@ -428,9 +430,9 @@ func TestCombinedIDAllocation(t *testing.T) {
428430
uniqueIDs[args.DBInfo.ID] = struct{}{}
429431
require.Equal(t, j.SchemaID, args.DBInfo.ID)
430432
case model.ActionCreateResourceGroup:
431-
info := &model.ResourceGroupInfo{}
432-
require.NoError(t, j.DecodeArgs(info))
433-
checkID(info.ID)
433+
args, err := model.GetResourceGroupArgs(j)
434+
require.NoError(t, err)
435+
checkID(args.RGInfo.ID)
434436
case model.ActionAlterTablePartitioning:
435437
var partNames []string
436438
info := &model.PartitionInfo{}

pkg/ddl/resource_group.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,12 @@ const (
4444
)
4545

4646
func onCreateResourceGroup(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) {
47-
groupInfo := &model.ResourceGroupInfo{}
48-
if err := job.DecodeArgs(groupInfo); err != nil {
47+
args, err := model.GetResourceGroupArgs(job)
48+
if err != nil {
4949
job.State = model.JobStateCancelled
5050
return ver, errors.Trace(err)
5151
}
52+
groupInfo := args.RGInfo
5253
groupInfo.State = model.StateNone
5354

5455
// check if resource group value is valid and convert to proto format.
@@ -93,11 +94,12 @@ func onCreateResourceGroup(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ve
9394
}
9495

9596
func onAlterResourceGroup(jobCtx *jobContext, t *meta.Meta, job *model.Job) (ver int64, _ error) {
96-
alterGroupInfo := &model.ResourceGroupInfo{}
97-
if err := job.DecodeArgs(alterGroupInfo); err != nil {
97+
args, err := model.GetResourceGroupArgs(job)
98+
if err != nil {
9899
job.State = model.JobStateCancelled
99100
return ver, errors.Trace(err)
100101
}
102+
alterGroupInfo := args.RGInfo
101103
// check if resource group value is valid and convert to proto format.
102104
protoGroup, err := resourcegroup.NewGroupFromOptions(alterGroupInfo.Name.L, alterGroupInfo.ResourceGroupSettings)
103105
if err != nil {

pkg/meta/model/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ go_test(
4444
],
4545
embed = [":model"],
4646
flaky = True,
47-
shard_count = 32,
47+
shard_count = 33,
4848
deps = [
4949
"//pkg/parser/charset",
5050
"//pkg/parser/model",

pkg/meta/model/job_args.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,3 +425,45 @@ func UpdateRenameTableArgs(job *Job) error {
425425
}
426426
return nil
427427
}
428+
429+
// ResourceGroupArgs is the arguments for resource group job.
430+
type ResourceGroupArgs struct {
431+
// for DropResourceGroup we only use it to store the name, other fields are invalid.
432+
RGInfo *ResourceGroupInfo `json:"rg_info,omitempty"`
433+
}
434+
435+
func (a *ResourceGroupArgs) fillJob(job *Job) {
436+
if job.Version == JobVersion1 {
437+
if job.Type == ActionCreateResourceGroup {
438+
// what's the second parameter for? we keep it for compatibility.
439+
job.Args = []any{a.RGInfo, false}
440+
} else if job.Type == ActionAlterResourceGroup {
441+
job.Args = []any{a.RGInfo}
442+
} else if job.Type == ActionDropResourceGroup {
443+
// it's not used anywhere.
444+
job.Args = []any{a.RGInfo.Name}
445+
}
446+
return
447+
}
448+
job.Args = []any{a}
449+
}
450+
451+
// GetResourceGroupArgs gets the resource group args.
452+
func GetResourceGroupArgs(job *Job) (*ResourceGroupArgs, error) {
453+
if job.Version == JobVersion1 {
454+
rgInfo := ResourceGroupInfo{}
455+
if job.Type == ActionCreateResourceGroup || job.Type == ActionAlterResourceGroup {
456+
if err := job.DecodeArgs(&rgInfo); err != nil {
457+
return nil, errors.Trace(err)
458+
}
459+
} else if job.Type == ActionDropResourceGroup {
460+
var rgName pmodel.CIStr
461+
if err := job.DecodeArgs(&rgName); err != nil {
462+
return nil, errors.Trace(err)
463+
}
464+
rgInfo.Name = rgName
465+
}
466+
return &ResourceGroupArgs{RGInfo: &rgInfo}, nil
467+
}
468+
return getOrDecodeArgsV2[*ResourceGroupArgs](job)
469+
}

pkg/meta/model/job_args_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,3 +275,22 @@ func TestUpdateRenameTableArgs(t *testing.T) {
275275
}, args)
276276
}
277277
}
278+
279+
func TestResourceGroupArgs(t *testing.T) {
280+
inArgs := &ResourceGroupArgs{
281+
RGInfo: &ResourceGroupInfo{ID: 100, Name: model.NewCIStr("rg_name")},
282+
}
283+
for _, tp := range []ActionType{ActionCreateResourceGroup, ActionAlterResourceGroup, ActionDropResourceGroup} {
284+
for _, v := range []JobVersion{JobVersion1, JobVersion2} {
285+
j2 := &Job{}
286+
require.NoError(t, j2.Decode(getJobBytes(t, inArgs, v, tp)))
287+
args, err := GetResourceGroupArgs(j2)
288+
require.NoError(t, err)
289+
if tp == ActionDropResourceGroup {
290+
require.EqualValues(t, inArgs.RGInfo.Name, args.RGInfo.Name)
291+
} else {
292+
require.EqualValues(t, inArgs, args)
293+
}
294+
}
295+
}
296+
}

0 commit comments

Comments
 (0)