@@ -44,6 +44,8 @@ import (
4444 "go.uber.org/multierr"
4545 "go.uber.org/zap"
4646 "golang.org/x/exp/slices"
47+ "google.golang.org/grpc/codes"
48+ "google.golang.org/grpc/status"
4749)
4850
4951type TableRestore struct {
@@ -843,15 +845,26 @@ func (tr *TableRestore) postProcess(
843845
844846 var remoteChecksum * RemoteChecksum
845847 remoteChecksum , err = DoChecksum (ctx , tr .tableInfo )
848+ failpoint .Inject ("checksum-error" , func () {
849+ tr .logger .Info ("failpoint checksum-error injected." )
850+ remoteChecksum = nil
851+ err = status .Error (codes .Unknown , "Checksum meets error." )
852+ })
846853 if err != nil {
847- return false , err
854+ if rc .cfg .PostRestore .Checksum != config .OpLevelOptional {
855+ return false , err
856+ }
857+ tr .logger .Warn ("do checksum failed, will skip this error and go on" , log .ShortError (err ))
858+ err = nil
848859 }
849- err = tr .compareChecksum (remoteChecksum , localChecksum )
850- // with post restore level 'optional', we will skip checksum error
851- if rc .cfg .PostRestore .Checksum == config .OpLevelOptional {
852- if err != nil {
853- tr .logger .Warn ("compare checksum failed, will skip this error and go on" , log .ShortError (err ))
854- err = nil
860+ if remoteChecksum != nil {
861+ err = tr .compareChecksum (remoteChecksum , localChecksum )
862+ // with post restore level 'optional', we will skip checksum error
863+ if rc .cfg .PostRestore .Checksum == config .OpLevelOptional {
864+ if err != nil {
865+ tr .logger .Warn ("compare checksum failed, will skip this error and go on" , log .ShortError (err ))
866+ err = nil
867+ }
855868 }
856869 }
857870 } else {
@@ -893,11 +906,12 @@ func (tr *TableRestore) postProcess(
893906 case forcePostProcess || ! rc .cfg .PostRestore .PostProcessAtLast :
894907 err := tr .analyzeTable (ctx , rc .tidbGlue .GetSQLExecutor ())
895908 // witch post restore level 'optional', we will skip analyze error
896- if rc .cfg .PostRestore .Analyze == config .OpLevelOptional {
897- if err != nil {
898- tr .logger .Warn ("analyze table failed, will skip this error and go on" , log .ShortError (err ))
899- err = nil
909+ if err != nil {
910+ if rc .cfg .PostRestore .Analyze != config .OpLevelOptional {
911+ return false , err
900912 }
913+ tr .logger .Warn ("analyze table failed, will skip this error and go on" , log .ShortError (err ))
914+ err = nil
901915 }
902916 saveCpErr := rc .saveStatusCheckpoint (ctx , tr .tableName , checkpoints .WholeTableEngineID , err , checkpoints .CheckpointStatusAnalyzed )
903917 if err = firstErr (err , saveCpErr ); err != nil {
0 commit comments