74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
// Copyright 2022 PingCAP, Inc. Licensed under Apache-2.0.
|
|
package split_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/pingcap/failpoint"
|
|
berrors "github.com/pingcap/tidb/br/pkg/errors"
|
|
"github.com/pingcap/tidb/br/pkg/restore/split"
|
|
"github.com/pingcap/tidb/br/pkg/utils"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestScanRegionBackOfferWithSuccess(t *testing.T) {
|
|
var counter int
|
|
bo := split.NewWaitRegionOnlineBackoffer()
|
|
|
|
err := utils.WithRetry(context.Background(), func() error {
|
|
defer func() {
|
|
counter++
|
|
}()
|
|
|
|
if counter == 3 {
|
|
return nil
|
|
}
|
|
return berrors.ErrPDBatchScanRegion
|
|
}, bo)
|
|
require.NoError(t, err)
|
|
require.Equal(t, counter, 4)
|
|
}
|
|
|
|
func TestScanRegionBackOfferWithFail(t *testing.T) {
|
|
_ = failpoint.Enable("github.com/pingcap/tidb/br/pkg/restore/split/hint-scan-region-backoff", "return(true)")
|
|
defer func() {
|
|
_ = failpoint.Disable("github.com/pingcap/tidb/br/pkg/restore/split/hint-scan-region-backoff")
|
|
}()
|
|
|
|
var counter int
|
|
bo := split.NewWaitRegionOnlineBackoffer()
|
|
|
|
err := utils.WithRetry(context.Background(), func() error {
|
|
defer func() {
|
|
counter++
|
|
}()
|
|
return berrors.ErrPDBatchScanRegion
|
|
}, bo)
|
|
require.Error(t, err)
|
|
require.Equal(t, counter, split.WaitRegionOnlineAttemptTimes)
|
|
}
|
|
|
|
func TestScanRegionBackOfferWithStopRetry(t *testing.T) {
|
|
_ = failpoint.Enable("github.com/pingcap/tidb/br/pkg/restore/split/hint-scan-region-backoff", "return(true)")
|
|
defer func() {
|
|
_ = failpoint.Disable("github.com/pingcap/tidb/br/pkg/restore/split/hint-scan-region-backoff")
|
|
}()
|
|
|
|
var counter int
|
|
bo := split.NewWaitRegionOnlineBackoffer()
|
|
|
|
err := utils.WithRetry(context.Background(), func() error {
|
|
defer func() {
|
|
counter++
|
|
}()
|
|
|
|
if counter < 5 {
|
|
return berrors.ErrPDBatchScanRegion
|
|
}
|
|
return berrors.ErrKVUnknown
|
|
}, bo)
|
|
require.Error(t, err)
|
|
require.Equal(t, counter, 6)
|
|
}
|