@@ -622,7 +622,11 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo
622
622
switch indexInfo .State {
623
623
case model .StateNone :
624
624
// none -> delete only
625
- reorgTp := pickBackfillType (job )
625
+ var reorgTp model.ReorgType
626
+ reorgTp , err = pickBackfillType (w .ctx , job , indexInfo .Unique )
627
+ if err != nil {
628
+ break
629
+ }
626
630
if reorgTp .NeedMergeProcess () {
627
631
// Increase telemetryAddIndexIngestUsage
628
632
telemetryAddIndexIngestUsage .Inc ()
@@ -711,39 +715,54 @@ func (w *worker) onCreateIndex(d *ddlCtx, t *meta.Meta, job *model.Job, isPK boo
711
715
}
712
716
713
717
// pickBackfillType determines which backfill process will be used.
714
- func pickBackfillType (job * model.Job ) model.ReorgType {
718
+ func pickBackfillType (ctx context. Context , job * model.Job , unique bool ) ( model.ReorgType , error ) {
715
719
if job .ReorgMeta .ReorgTp != model .ReorgTypeNone {
716
720
// The backfill task has been started.
717
- // Don't switch the backfill process .
718
- return job .ReorgMeta .ReorgTp
721
+ // Don't change the backfill type .
722
+ return job .ReorgMeta .ReorgTp , nil
719
723
}
720
- if IsEnableFastReorg () {
721
- var useIngest bool
722
- if ingest .LitInitialized && ingest .LitBackCtxMgr .Available () {
723
- cleanupSortPath (job .ID )
724
+ if ! IsEnableFastReorg () {
725
+ job .ReorgMeta .ReorgTp = model .ReorgTypeTxn
726
+ return model .ReorgTypeTxn , nil
727
+ }
728
+ if ingest .LitInitialized {
729
+ available , err := ingest .LitBackCtxMgr .CheckAvailable ()
730
+ if err != nil {
731
+ return model .ReorgTypeNone , err
732
+ }
733
+ if available {
734
+ err = cleanupSortPath (job .ID )
735
+ if err != nil {
736
+ return model .ReorgTypeNone , err
737
+ }
738
+ _ , err = ingest .LitBackCtxMgr .Register (ctx , unique , job .ID )
739
+ if err != nil {
740
+ return model .ReorgTypeNone , err
741
+ }
724
742
job .ReorgMeta .ReorgTp = model .ReorgTypeLitMerge
725
- return model .ReorgTypeLitMerge
743
+ return model .ReorgTypeLitMerge , nil
726
744
}
727
- // The lightning environment is unavailable, but we can still use the txn-merge backfill.
728
- logutil .BgLogger ().Info ("[ddl] fallback to txn-merge backfill process" ,
729
- zap .Bool ("lightning env initialized" , ingest .LitInitialized ),
730
- zap .Bool ("can use ingest" , useIngest ))
731
- job .ReorgMeta .ReorgTp = model .ReorgTypeTxnMerge
732
- return model .ReorgTypeTxnMerge
733
745
}
734
- job .ReorgMeta .ReorgTp = model .ReorgTypeTxn
735
- return model .ReorgTypeTxn
746
+ // The lightning environment is unavailable, but we can still use the txn-merge backfill.
747
+ logutil .BgLogger ().Info ("[ddl] fallback to txn-merge backfill process" ,
748
+ zap .Bool ("lightning env initialized" , false ))
749
+ job .ReorgMeta .ReorgTp = model .ReorgTypeTxnMerge
750
+ return model .ReorgTypeTxnMerge , nil
736
751
}
737
752
738
753
// cleanupSortPath is used to clean up the temp data of the previous jobs.
739
754
// Because we don't remove all the files after the support of checkpoint,
740
755
// there maybe some stale files in the sort path if TiDB is killed during the backfill process.
741
- func cleanupSortPath (currentJobID int64 ) {
756
+ func cleanupSortPath (currentJobID int64 ) error {
742
757
sortPath := ingest .ConfigSortPath ()
758
+ err := os .MkdirAll (sortPath , 0700 )
759
+ if err != nil {
760
+ return errors .Trace (err )
761
+ }
743
762
entries , err := os .ReadDir (sortPath )
744
763
if err != nil {
745
- logutil .BgLogger ().Warn ("[ddl-ingest] cannot cleanup sort path" , zap .Error (err ))
746
- return
764
+ logutil .BgLogger ().Warn ("[ddl-ingest] cannot read sort path" , zap .Error (err ))
765
+ return errors . Trace ( err )
747
766
}
748
767
for _ , entry := range entries {
749
768
if ! entry .IsDir () {
@@ -762,10 +781,11 @@ func cleanupSortPath(currentJobID int64) {
762
781
err := os .RemoveAll (filepath .Join (sortPath , entry .Name ()))
763
782
if err != nil {
764
783
logutil .BgLogger ().Warn ("[ddl-ingest] cannot cleanup sort path" , zap .Error (err ))
765
- return
784
+ return nil
766
785
}
767
786
}
768
787
}
788
+ return nil
769
789
}
770
790
771
791
// IngestJobsNotExisted checks the ddl about `add index` with ingest method not existed.
@@ -824,17 +844,21 @@ func doReorgWorkForCreateIndexMultiSchema(w *worker, d *ddlCtx, t *meta.Meta, jo
824
844
825
845
func doReorgWorkForCreateIndex (w * worker , d * ddlCtx , t * meta.Meta , job * model.Job ,
826
846
tbl table.Table , indexInfo * model.IndexInfo ) (done bool , ver int64 , err error ) {
827
- bfProcess := pickBackfillType (job )
828
- if ! bfProcess .NeedMergeProcess () {
847
+ var reorgTp model.ReorgType
848
+ reorgTp , err = pickBackfillType (w .ctx , job , indexInfo .Unique )
849
+ if err != nil {
850
+ return false , ver , err
851
+ }
852
+ if ! reorgTp .NeedMergeProcess () {
829
853
return runReorgJobAndHandleErr (w , d , t , job , tbl , indexInfo , false )
830
854
}
831
855
switch indexInfo .BackfillState {
832
856
case model .BackfillStateRunning :
833
857
logutil .BgLogger ().Info ("[ddl] index backfill state running" ,
834
858
zap .Int64 ("job ID" , job .ID ), zap .String ("table" , tbl .Meta ().Name .O ),
835
- zap .Bool ("ingest mode" , bfProcess == model .ReorgTypeLitMerge ),
859
+ zap .Bool ("ingest mode" , reorgTp == model .ReorgTypeLitMerge ),
836
860
zap .String ("index" , indexInfo .Name .O ))
837
- switch bfProcess {
861
+ switch reorgTp {
838
862
case model .ReorgTypeLitMerge :
839
863
if job .ReorgMeta .IsDistReorg {
840
864
done , ver , err = runIngestReorgJobDist (w , d , t , job , tbl , indexInfo )
@@ -854,7 +878,7 @@ func doReorgWorkForCreateIndex(w *worker, d *ddlCtx, t *meta.Meta, job *model.Jo
854
878
logutil .BgLogger ().Info ("[ddl] index backfill state ready to merge" , zap .Int64 ("job ID" , job .ID ),
855
879
zap .String ("table" , tbl .Meta ().Name .O ), zap .String ("index" , indexInfo .Name .O ))
856
880
indexInfo .BackfillState = model .BackfillStateMerging
857
- if bfProcess == model .ReorgTypeLitMerge {
881
+ if reorgTp == model .ReorgTypeLitMerge {
858
882
ingest .LitBackCtxMgr .Unregister (job .ID )
859
883
}
860
884
job .SnapshotVer = 0 // Reset the snapshot version for merge index reorg.
0 commit comments