@@ -54,6 +54,8 @@ import (
5454 "go.uber.org/multierr"
5555 "go.uber.org/zap"
5656 "golang.org/x/exp/slices"
57+ "google.golang.org/grpc/codes"
58+ "google.golang.org/grpc/status"
5759)
5860
5961// TableImporter is a helper struct to import a table.
@@ -988,15 +990,26 @@ func (tr *TableImporter) postProcess(
988990
989991 var remoteChecksum * local.RemoteChecksum
990992 remoteChecksum , err = DoChecksum (ctx , tr .tableInfo )
993+ failpoint .Inject ("checksum-error" , func () {
994+ tr .logger .Info ("failpoint checksum-error injected." )
995+ remoteChecksum = nil
996+ err = status .Error (codes .Unknown , "Checksum meets error." )
997+ })
991998 if err != nil {
992- return false , err
999+ if rc .cfg .PostRestore .Checksum != config .OpLevelOptional {
1000+ return false , err
1001+ }
1002+ tr .logger .Warn ("do checksum failed, will skip this error and go on" , log .ShortError (err ))
1003+ err = nil
9931004 }
994- err = tr .compareChecksum (remoteChecksum , localChecksum )
995- // with post restore level 'optional', we will skip checksum error
996- if rc .cfg .PostRestore .Checksum == config .OpLevelOptional {
997- if err != nil {
998- tr .logger .Warn ("compare checksum failed, will skip this error and go on" , log .ShortError (err ))
999- err = nil
1005+ if remoteChecksum != nil {
1006+ err = tr .compareChecksum (remoteChecksum , localChecksum )
1007+ // with post restore level 'optional', we will skip checksum error
1008+ if rc .cfg .PostRestore .Checksum == config .OpLevelOptional {
1009+ if err != nil {
1010+ tr .logger .Warn ("compare checksum failed, will skip this error and go on" , log .ShortError (err ))
1011+ err = nil
1012+ }
10001013 }
10011014 }
10021015 } else {
@@ -1054,11 +1067,12 @@ func (tr *TableImporter) postProcess(
10541067 case forcePostProcess || ! rc .cfg .PostRestore .PostProcessAtLast :
10551068 err := tr .analyzeTable (ctx , rc .db )
10561069 // witch post restore level 'optional', we will skip analyze error
1057- if rc .cfg .PostRestore .Analyze == config .OpLevelOptional {
1058- if err != nil {
1059- tr .logger .Warn ("analyze table failed, will skip this error and go on" , log .ShortError (err ))
1060- err = nil
1070+ if err != nil {
1071+ if rc .cfg .PostRestore .Analyze != config .OpLevelOptional {
1072+ return false , err
10611073 }
1074+ tr .logger .Warn ("analyze table failed, will skip this error and go on" , log .ShortError (err ))
1075+ err = nil
10621076 }
10631077 saveCpErr := rc .saveStatusCheckpoint (ctx , tr .tableName , checkpoints .WholeTableEngineID , err , checkpoints .CheckpointStatusAnalyzed )
10641078 if err = firstErr (err , saveCpErr ); err != nil {
0 commit comments