Skip to content

Commit edbec22

Browse files
authored
ddl: use static contexts in NewReorgCopContext (#55823)
ref #53388
1 parent 41c9926 commit edbec22

File tree

7 files changed

+333
-114
lines changed

7 files changed

+333
-114
lines changed

pkg/ddl/BUILD.bazel

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,7 @@ go_test(
281281
"//pkg/ddl/session",
282282
"//pkg/ddl/testutil",
283283
"//pkg/ddl/util",
284+
"//pkg/distsql/context",
284285
"//pkg/disttask/framework/proto",
285286
"//pkg/disttask/framework/scheduler",
286287
"//pkg/disttask/framework/storage",
@@ -291,6 +292,7 @@ go_test(
291292
"//pkg/errno",
292293
"//pkg/executor",
293294
"//pkg/expression",
295+
"//pkg/expression/contextstatic",
294296
"//pkg/infoschema",
295297
"//pkg/keyspace",
296298
"//pkg/kv",
@@ -306,6 +308,7 @@ go_test(
306308
"//pkg/parser/mysql",
307309
"//pkg/parser/terror",
308310
"//pkg/parser/types",
311+
"//pkg/privilege",
309312
"//pkg/server",
310313
"//pkg/session",
311314
"//pkg/session/types",
@@ -331,6 +334,7 @@ go_test(
331334
"//pkg/util/context",
332335
"//pkg/util/dbterror",
333336
"//pkg/util/dbterror/plannererrors",
337+
"//pkg/util/deeptest",
334338
"//pkg/util/domainutil",
335339
"//pkg/util/gcutil",
336340
"//pkg/util/generic",

pkg/ddl/backfilling.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,9 +169,10 @@ type backfillCtx struct {
169169

170170
func newBackfillCtx(id int, rInfo *reorgInfo,
171171
schemaName string, tbl table.Table, jobCtx *ReorgContext, label string, isDistributed bool) (*backfillCtx, error) {
172-
sessCtx, err := newSessCtx(rInfo.jobCtx.store, rInfo.ReorgMeta)
173-
if err != nil {
174-
return nil, err
172+
// TODO: remove newReorgSessCtx
173+
sessCtx := newReorgSessCtx(rInfo.jobCtx.store)
174+
if err := initSessCtx(sessCtx, rInfo.ReorgMeta); err != nil {
175+
return nil, errors.Trace(err)
175176
}
176177

177178
if isDistributed {

pkg/ddl/backfilling_scheduler.go

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,14 @@ import (
2828
"github.com/pingcap/tidb/pkg/errctx"
2929
"github.com/pingcap/tidb/pkg/kv"
3030
"github.com/pingcap/tidb/pkg/meta/model"
31+
"github.com/pingcap/tidb/pkg/resourcegroup"
3132
"github.com/pingcap/tidb/pkg/sessionctx"
3233
"github.com/pingcap/tidb/pkg/sessionctx/stmtctx"
3334
"github.com/pingcap/tidb/pkg/sessionctx/variable"
3435
"github.com/pingcap/tidb/pkg/table"
3536
contextutil "github.com/pingcap/tidb/pkg/util/context"
3637
"github.com/pingcap/tidb/pkg/util/execdetails"
38+
"github.com/pingcap/tidb/pkg/util/intest"
3739
"github.com/pingcap/tidb/pkg/util/memory"
3840
"github.com/pingcap/tidb/pkg/util/mock"
3941
decoder "github.com/pingcap/tidb/pkg/util/rowDecoder"
@@ -125,30 +127,34 @@ func NewReorgCopContext(
125127
allIdxInfo []*model.IndexInfo,
126128
requestSource string,
127129
) (copr.CopContext, error) {
128-
sessCtx, err := newSessCtx(store, reorgMeta)
130+
warnHandler := contextutil.NewStaticWarnHandler(0)
131+
distSQLCtx, err := newReorgDistSQLCtxWithReorgMeta(store.GetClient(), reorgMeta, warnHandler)
132+
if err != nil {
133+
return nil, err
134+
}
135+
136+
exprCtx, err := newReorgExprCtxWithReorgMeta(reorgMeta, warnHandler)
129137
if err != nil {
130138
return nil, err
131139
}
140+
141+
evalCtx := exprCtx.GetEvalCtx()
142+
tc, ec := evalCtx.TypeCtx(), evalCtx.ErrCtx()
143+
pushDownFlags := stmtctx.PushDownFlagsWithTypeFlagsAndErrLevels(tc.Flags(), ec.LevelMap())
144+
132145
return copr.NewCopContext(
133-
sessCtx.GetExprCtx(),
134-
sessCtx.GetDistSQLCtx(),
135-
sessCtx.GetSessionVars().StmtCtx.PushDownFlags(),
146+
exprCtx,
147+
distSQLCtx,
148+
pushDownFlags,
136149
tblInfo,
137150
allIdxInfo,
138151
requestSource,
139152
)
140153
}
141154

142-
func newSessCtx(store kv.Storage, reorgMeta *model.DDLReorgMeta) (sessionctx.Context, error) {
143-
sessCtx := newReorgSessCtx(store)
144-
if err := initSessCtx(sessCtx, reorgMeta); err != nil {
145-
return nil, errors.Trace(err)
146-
}
147-
return sessCtx, nil
148-
}
149-
150-
func newDefaultReorgDistSQLCtx(kvClient kv.Client) *distsqlctx.DistSQLContext {
151-
warnHandler := contextutil.NewStaticWarnHandler(0)
155+
func newDefaultReorgDistSQLCtx(kvClient kv.Client, warnHandler contextutil.WarnAppender) *distsqlctx.DistSQLContext {
156+
intest.AssertNotNil(kvClient)
157+
intest.AssertNotNil(warnHandler)
152158
var sqlKiller sqlkiller.SQLKiller
153159
var execDetails execdetails.SyncExecDetails
154160
return &distsqlctx.DistSQLContext{
@@ -168,10 +174,23 @@ func newDefaultReorgDistSQLCtx(kvClient kv.Client) *distsqlctx.DistSQLContext {
168174
TiFlashMaxBytesBeforeExternalSort: variable.DefTiFlashMaxBytesBeforeExternalSort,
169175
TiFlashMaxQueryMemoryPerNode: variable.DefTiFlashMemQuotaQueryPerNode,
170176
TiFlashQuerySpillRatio: variable.DefTiFlashQuerySpillRatio,
177+
ResourceGroupName: resourcegroup.DefaultResourceGroupName,
171178
ExecDetails: &execDetails,
172179
}
173180
}
174181

182+
func newReorgDistSQLCtxWithReorgMeta(kvClient kv.Client, reorgMeta *model.DDLReorgMeta, warnHandler contextutil.WarnAppender) (*distsqlctx.DistSQLContext, error) {
183+
loc, err := reorgTimeZoneWithTzLoc(reorgMeta.Location)
184+
if err != nil {
185+
return nil, errors.Trace(err)
186+
}
187+
ctx := newDefaultReorgDistSQLCtx(kvClient, warnHandler)
188+
ctx.Location = loc
189+
ctx.ErrCtx = errctx.NewContextWithLevels(reorgErrLevelsWithSQLMode(reorgMeta.SQLMode), ctx.WarnHandler)
190+
ctx.ResourceGroupName = reorgMeta.ResourceGroupName
191+
return ctx, nil
192+
}
193+
175194
// initSessCtx initializes the session context. Be careful to the timezone.
176195
func initSessCtx(sessCtx sessionctx.Context, reorgMeta *model.DDLReorgMeta) error {
177196
// Correct the initial timezone.

0 commit comments

Comments
 (0)