@@ -43,6 +43,8 @@ import (
4343 "github.com/pingcap/tidb/util/mathutil"
4444 "go.uber.org/multierr"
4545 "go.uber.org/zap"
46+ "google.golang.org/grpc/codes"
47+ "google.golang.org/grpc/status"
4648)
4749
4850type TableRestore struct {
@@ -800,11 +802,27 @@ func (tr *TableRestore) postProcess(
800802 return false , err
801803 }
802804 err = tr .compareChecksum (remoteChecksum , localChecksum )
805+ failpoint .Inject ("checksum-error" , func () {
806+ tr .logger .Info ("failpoint checksum-error injected." )
807+ remoteChecksum = nil
808+ err = status .Error (codes .Unknown , "Compare checksum meets error." )
809+ })
803810 // with post restore level 'optional', we will skip checksum error
804- if rc .cfg .PostRestore .Checksum == config .OpLevelOptional {
805- if err != nil {
806- tr .logger .Warn ("compare checksum failed, will skip this error and go on" , log .ShortError (err ))
807- err = nil
811+ if err != nil {
812+ if rc .cfg .PostRestore .Checksum != config .OpLevelOptional {
813+ return false , err
814+ }
815+ tr .logger .Warn ("do checksum failed, will skip this error and go on" , log .ShortError (err ))
816+ err = nil
817+ }
818+ if remoteChecksum != nil {
819+ err = tr .compareChecksum (remoteChecksum , localChecksum )
820+ // with post restore level 'optional', we will skip checksum error
821+ if rc .cfg .PostRestore .Checksum == config .OpLevelOptional {
822+ if err != nil {
823+ tr .logger .Warn ("compare checksum failed, will skip this error and go on" , log .ShortError (err ))
824+ err = nil
825+ }
808826 }
809827 }
810828 } else {
@@ -846,11 +864,12 @@ func (tr *TableRestore) postProcess(
846864 case forcePostProcess || ! rc .cfg .PostRestore .PostProcessAtLast :
847865 err := tr .analyzeTable (ctx , rc .tidbGlue .GetSQLExecutor ())
848866 // witch post restore level 'optional', we will skip analyze error
849- if rc .cfg .PostRestore .Analyze == config .OpLevelOptional {
850- if err != nil {
851- tr .logger .Warn ("analyze table failed, will skip this error and go on" , log .ShortError (err ))
852- err = nil
867+ if err != nil {
868+ if rc .cfg .PostRestore .Analyze != config .OpLevelOptional {
869+ return false , err
853870 }
871+ tr .logger .Warn ("analyze table failed, will skip this error and go on" , log .ShortError (err ))
872+ err = nil
854873 }
855874 saveCpErr := rc .saveStatusCheckpoint (ctx , tr .tableName , checkpoints .WholeTableEngineID , err , checkpoints .CheckpointStatusAnalyzed )
856875 if err = firstErr (err , saveCpErr ); err != nil {
0 commit comments