@@ -354,6 +354,15 @@ func newIngestBackfillScheduler(
354
354
}, nil
355
355
}
356
356
357
+ func (b * ingestBackfillScheduler ) finishedWritingNeedImport () bool {
358
+ job := b .reorgInfo .Job
359
+ bc , ok := ingest .LitBackCtxMgr .Load (job .ID )
360
+ if ! ok {
361
+ return false
362
+ }
363
+ return bc .FinishedWritingNeedImport ()
364
+ }
365
+
357
366
func (b * ingestBackfillScheduler ) setupWorkers () error {
358
367
job := b .reorgInfo .Job
359
368
bc , ok := ingest .LitBackCtxMgr .Load (job .ID )
@@ -371,10 +380,26 @@ func (b *ingestBackfillScheduler) setupWorkers() error {
371
380
if err != nil {
372
381
return errors .Trace (err )
373
382
}
383
+
384
+ indexIDs := make ([]int64 , 0 , len (b .reorgInfo .elements ))
385
+ for _ , e := range b .reorgInfo .elements {
386
+ indexIDs = append (indexIDs , e .ID )
387
+ }
388
+ engines , err := b .backendCtx .Register (indexIDs , job .TableName )
389
+ if err != nil {
390
+ return errors .Trace (err )
391
+ }
392
+
374
393
b .copReqSenderPool = copReqSenderPool
375
394
readerCnt , writerCnt := b .expectedWorkerSize ()
376
- writerPool := workerpool .NewWorkerPool [IndexRecordChunk ]("ingest_writer" ,
377
- poolutil .DDL , writerCnt , b .createWorker )
395
+ writerPool := workerpool .NewWorkerPool [IndexRecordChunk ](
396
+ "ingest_writer" ,
397
+ poolutil .DDL ,
398
+ writerCnt ,
399
+ func () workerpool.Worker [IndexRecordChunk , workerpool.None ] {
400
+ return b .createWorker (indexIDs , engines )
401
+ },
402
+ )
378
403
writerPool .Start (b .ctx )
379
404
b .writerPool = writerPool
380
405
b .copReqSenderPool .chunkSender = writerPool
@@ -406,13 +431,9 @@ func (b *ingestBackfillScheduler) close(force bool) {
406
431
})
407
432
}
408
433
close (b .resultCh )
409
- if intest .InTest && len (b .copReqSenderPool .srcChkPool ) != copReadChunkPoolSize () {
434
+ if intest .InTest && b . copReqSenderPool != nil && len (b .copReqSenderPool .srcChkPool ) != copReadChunkPoolSize () {
410
435
panic (fmt .Sprintf ("unexpected chunk size %d" , len (b .copReqSenderPool .srcChkPool )))
411
436
}
412
- if ! force {
413
- jobID := b .reorgInfo .ID
414
- b .backendCtx .ResetWorkers (jobID )
415
- }
416
437
}
417
438
418
439
func (b * ingestBackfillScheduler ) sendTask (task * reorgBackfillTask ) error {
@@ -446,32 +467,17 @@ func (b *ingestBackfillScheduler) adjustWorkerSize() error {
446
467
return nil
447
468
}
448
469
449
- func (b * ingestBackfillScheduler ) createWorker () workerpool.Worker [IndexRecordChunk , workerpool.None ] {
470
+ func (b * ingestBackfillScheduler ) createWorker (
471
+ indexIDs []int64 ,
472
+ engines []ingest.Engine ,
473
+ ) workerpool.Worker [IndexRecordChunk , workerpool.None ] {
450
474
reorgInfo := b .reorgInfo
451
475
job := reorgInfo .Job
452
476
sessCtx , err := newSessCtx (reorgInfo .d .store , reorgInfo .ReorgMeta .SQLMode , reorgInfo .ReorgMeta .Location , reorgInfo .ReorgMeta .ResourceGroupName )
453
477
if err != nil {
454
478
b .sendResult (& backfillResult {err : err })
455
479
return nil
456
480
}
457
- bcCtx := b .backendCtx
458
- indexIDs := make ([]int64 , 0 , len (reorgInfo .elements ))
459
- engines := make ([]ingest.Engine , 0 , len (reorgInfo .elements ))
460
- for _ , elem := range reorgInfo .elements {
461
- ei , err := bcCtx .Register (job .ID , elem .ID , job .SchemaName , job .TableName )
462
- if err != nil {
463
- // Return an error only if it is the first worker.
464
- if b .writerMaxID == 0 {
465
- b .sendResult (& backfillResult {err : err })
466
- return nil
467
- }
468
- logutil .Logger (b .ctx ).Warn ("cannot create new writer" , zap .Error (err ),
469
- zap .Int64 ("job ID" , reorgInfo .ID ), zap .Int64 ("index ID" , elem .ID ))
470
- return nil
471
- }
472
- indexIDs = append (indexIDs , elem .ID )
473
- engines = append (engines , ei )
474
- }
475
481
476
482
worker , err := newAddIndexIngestWorker (
477
483
b .ctx , b .tbl , reorgInfo .d , engines , b .resultCh , job .ID ,
0 commit comments