@@ -34,7 +34,6 @@ import (
34
34
"github.com/pingcap/tidb/pkg/util/intest"
35
35
"github.com/pingcap/tidb/pkg/util/logutil"
36
36
"github.com/tikv/client-go/v2/tikv"
37
- sd "github.com/tikv/pd/client/servicediscovery"
38
37
clientv3 "go.etcd.io/etcd/client/v3"
39
38
"go.uber.org/atomic"
40
39
"go.uber.org/zap"
@@ -94,29 +93,16 @@ func (b *BackendCtxBuilder) ForDuplicateCheck() *BackendCtxBuilder {
94
93
var BackendCounterForTest = atomic.Int64 {}
95
94
96
95
// Build builds a BackendCtx.
97
- func (b * BackendCtxBuilder ) Build () (BackendCtx , error ) {
96
+ func (b * BackendCtxBuilder ) Build (cfg * local. BackendConfig , bd * local. Backend ) (BackendCtx , error ) {
98
97
ctx , store , job := b .ctx , b .store , b .job
99
- sortPath , err := GenIngestTempDataDir ( )
98
+ jobSortPath , err := genJobSortPath ( job . ID , b . checkDup )
100
99
if err != nil {
101
100
return nil , err
102
101
}
103
- jobSortPath := filepath .Join (sortPath , encodeBackendTag (job .ID , b .checkDup ))
104
102
intest .Assert (job .Type == model .ActionAddPrimaryKey ||
105
103
job .Type == model .ActionAddIndex )
106
104
intest .Assert (job .ReorgMeta != nil )
107
105
108
- resGroupName := job .ReorgMeta .ResourceGroupName
109
- concurrency := job .ReorgMeta .GetConcurrency ()
110
- maxWriteSpeed := job .ReorgMeta .GetMaxWriteSpeed ()
111
- hasUnique , err := hasUniqueIndex (job )
112
- if err != nil {
113
- return nil , err
114
- }
115
- cfg , err := genConfig (ctx , jobSortPath , LitMemRoot , hasUnique , resGroupName , concurrency , maxWriteSpeed )
116
- if err != nil {
117
- logutil .Logger (ctx ).Warn (LitWarnConfigError , zap .Int64 ("job ID" , job .ID ), zap .Error (err ))
118
- return nil , err
119
- }
120
106
failpoint .Inject ("beforeCreateLocalBackend" , func () {
121
107
ResignOwnerForTest .Store (true )
122
108
})
@@ -141,45 +127,41 @@ func (b *BackendCtxBuilder) Build() (BackendCtx, error) {
141
127
return mockBackend , nil
142
128
}
143
129
144
- discovery := pdCli .GetServiceDiscovery ()
145
- bd , err := createLocalBackend (ctx , cfg , discovery )
146
- if err != nil {
147
- logutil .Logger (ctx ).Error (LitErrCreateBackendFail , zap .Int64 ("job ID" , job .ID ), zap .Error (err ))
148
- return nil , err
149
- }
150
-
151
130
bCtx := newBackendContext (ctx , job .ID , bd , cfg ,
152
131
defaultImportantVariables , LitMemRoot , b .etcdClient , job .RealStartTS , b .importTS , cpMgr )
153
132
154
- logutil .Logger (ctx ).Info (LitInfoCreateBackend , zap .Int64 ("job ID" , job .ID ),
155
- zap .Int64 ("current memory usage" , LitMemRoot .CurrentUsage ()),
156
- zap .Int64 ("max memory quota" , LitMemRoot .MaxMemoryQuota ()),
157
- zap .Bool ("has unique index" , hasUnique ))
158
-
159
133
LitDiskRoot .Add (job .ID , bCtx )
160
134
BackendCounterForTest .Add (1 )
161
135
return bCtx , nil
162
136
}
163
137
164
- func hasUniqueIndex ( job * model. Job ) (bool , error ) {
165
- args , err := model . GetModifyIndexArgs ( job )
138
+ func genJobSortPath ( jobID int64 , checkDup bool ) (string , error ) {
139
+ sortPath , err := GenIngestTempDataDir ( )
166
140
if err != nil {
167
- return false , errors . Trace ( err )
141
+ return "" , err
168
142
}
143
+ return filepath .Join (sortPath , encodeBackendTag (jobID , checkDup )), nil
144
+ }
169
145
170
- for _ , a := range args .IndexArgs {
171
- if a .Unique {
172
- return true , nil
173
- }
146
+ // CreateLocalBackend creates a local backend for adding index.
147
+ func CreateLocalBackend (ctx context.Context , store kv.Storage , job * model.Job , checkDup bool ) (* local.BackendConfig , * local.Backend , error ) {
148
+ jobSortPath , err := genJobSortPath (job .ID , checkDup )
149
+ if err != nil {
150
+ return nil , nil , err
174
151
}
175
- return false , nil
176
- }
152
+ intest .Assert (job .Type == model .ActionAddPrimaryKey ||
153
+ job .Type == model .ActionAddIndex )
154
+ intest .Assert (job .ReorgMeta != nil )
155
+
156
+ resGroupName := job .ReorgMeta .ResourceGroupName
157
+ concurrency := job .ReorgMeta .GetConcurrency ()
158
+ maxWriteSpeed := job .ReorgMeta .GetMaxWriteSpeed ()
159
+ hasUnique , err := hasUniqueIndex (job )
160
+ if err != nil {
161
+ return nil , nil , err
162
+ }
163
+ cfg := genConfig (ctx , jobSortPath , LitMemRoot , hasUnique , resGroupName , concurrency , maxWriteSpeed )
177
164
178
- func createLocalBackend (
179
- ctx context.Context ,
180
- cfg * local.BackendConfig ,
181
- pdSvcDiscovery sd.ServiceDiscovery ,
182
- ) (* local.Backend , error ) {
183
165
tidbCfg := config .GetGlobalConfig ()
184
166
tls , err := common .NewTLS (
185
167
tidbCfg .Security .ClusterSSLCA ,
@@ -190,13 +172,35 @@ func createLocalBackend(
190
172
)
191
173
if err != nil {
192
174
logutil .Logger (ctx ).Error (LitErrCreateBackendFail , zap .Error (err ))
193
- return nil , err
175
+ return nil , nil , err
194
176
}
195
177
196
178
ddllogutil .DDLIngestLogger ().Info ("create local backend for adding index" ,
197
179
zap .String ("sortDir" , cfg .LocalStoreDir ),
198
- zap .String ("keyspaceName" , cfg .KeyspaceName ))
199
- return local .NewBackend (ctx , tls , * cfg , pdSvcDiscovery )
180
+ zap .String ("keyspaceName" , cfg .KeyspaceName ),
181
+ zap .Int64 ("job ID" , job .ID ),
182
+ zap .Int64 ("current memory usage" , LitMemRoot .CurrentUsage ()),
183
+ zap .Int64 ("max memory quota" , LitMemRoot .MaxMemoryQuota ()),
184
+ zap .Bool ("has unique index" , hasUnique ))
185
+
186
+ //nolint: forcetypeassert
187
+ pdCli := store .(tikv.Storage ).GetRegionCache ().PDClient ()
188
+ be , err := local .NewBackend (ctx , tls , * cfg , pdCli .GetServiceDiscovery ())
189
+ return cfg , be , err
190
+ }
191
+
192
+ func hasUniqueIndex (job * model.Job ) (bool , error ) {
193
+ args , err := model .GetModifyIndexArgs (job )
194
+ if err != nil {
195
+ return false , errors .Trace (err )
196
+ }
197
+
198
+ for _ , a := range args .IndexArgs {
199
+ if a .Unique {
200
+ return true , nil
201
+ }
202
+ }
203
+ return false , nil
200
204
}
201
205
202
206
const checkpointUpdateInterval = 10 * time .Minute
0 commit comments