Skip to content

Commit

Permalink
skip region not found error in WaitScatterRegionFinish (#18789)
Browse files Browse the repository at this point in the history
  • Loading branch information
nolouch authored Jul 27, 2020
1 parent 29178df commit b249dc5
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
7 changes: 6 additions & 1 deletion ddl/split_region.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ package ddl
import (
"context"

"github.com/pingcap/errors"
"github.com/pingcap/parser/model"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/sessionctx"
"github.com/pingcap/tidb/store/tikv"
"github.com/pingcap/tidb/tablecodec"
"github.com/pingcap/tidb/util/logutil"
"go.uber.org/zap"
Expand Down Expand Up @@ -134,7 +136,10 @@ func waitScatterRegionFinish(ctx context.Context, store kv.SplittableStore, regi
err := store.WaitScatterRegionFinish(ctx, regionID, 0)
if err != nil {
logutil.BgLogger().Warn("[ddl] wait scatter region failed", zap.Uint64("regionID", regionID), zap.Error(err))
return
// We don't break for PDError because it may caused by ScatterRegion request failed.
if _, ok := errors.Cause(err).(*tikv.PDError); !ok {
break
}
}
}
}
10 changes: 10 additions & 0 deletions store/tikv/error.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package tikv
import (
"github.com/pingcap/errors"
"github.com/pingcap/kvproto/pkg/kvrpcpb"
"github.com/pingcap/kvproto/pkg/pdpb"
"github.com/pingcap/parser/terror"
mysql "github.com/pingcap/tidb/errno"
)
Expand Down Expand Up @@ -64,3 +65,12 @@ type ErrDeadlock struct {
func (d *ErrDeadlock) Error() string {
return d.Deadlock.String()
}

// PDError wraps *pdpb.Error to implement the error interface.
type PDError struct {
Err *pdpb.Error
}

func (d *PDError) Error() string {
return d.Err.String()
}
8 changes: 8 additions & 0 deletions store/tikv/split_region.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,14 @@ func (s *tikvStore) WaitScatterRegionFinish(ctx context.Context, regionID uint64
zap.Uint64("regionID", regionID))
return nil
}
if resp.GetHeader().GetError() != nil {
err = errors.AddStack(&PDError{
Err: resp.Header.Error,
})
logutil.BgLogger().Warn("wait scatter region error",
zap.Uint64("regionID", regionID), zap.Error(err))
return err
}
if logFreq%10 == 0 {
logutil.BgLogger().Info("wait scatter region",
zap.Uint64("regionID", regionID),
Expand Down

0 comments on commit b249dc5

Please sign in to comment.