Skip to content

Commit 6aa0f66

Browse files
committed
Merge remote-tracking branch 'upstream/master' into HEAD
2 parents 6233988 + f50e894 commit 6aa0f66

File tree

105 files changed

+8136
-8901
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

105 files changed

+8136
-8901
lines changed

DEPS.bzl

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7019,13 +7019,13 @@ def go_deps():
70197019
name = "com_github_tikv_pd_client",
70207020
build_file_proto_mode = "disable_global",
70217021
importpath = "github.com/tikv/pd/client",
7022-
sha256 = "a1f7b29d753c60a373d29430d426be39a204fbedb62ceeb41296dee7bc6e5efe",
7023-
strip_prefix = "github.com/tikv/pd/[email protected]20231204034622-259435d93ae2",
7022+
sha256 = "5b31b38e151e03117ef9878c2dbac2b1f22c890e72ebb70935795ac5682c77c1",
7023+
strip_prefix = "github.com/tikv/pd/[email protected]20231213112719-f51f9134558e",
70247024
urls = [
7025-
"http://bazel-cache.pingcap.net:8080/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20231204034622-259435d93ae2.zip",
7026-
"http://ats.apps.svc/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20231204034622-259435d93ae2.zip",
7027-
"https://cache.hawkingrei.com/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20231204034622-259435d93ae2.zip",
7028-
"https://storage.googleapis.com/pingcapmirror/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20231204034622-259435d93ae2.zip",
7025+
"http://bazel-cache.pingcap.net:8080/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20231213112719-f51f9134558e.zip",
7026+
"http://ats.apps.svc/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20231213112719-f51f9134558e.zip",
7027+
"https://cache.hawkingrei.com/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20231213112719-f51f9134558e.zip",
7028+
"https://storage.googleapis.com/pingcapmirror/gomod/github.com/tikv/pd/client/com_github_tikv_pd_client-v0.0.0-20231213112719-f51f9134558e.zip",
70297029
],
70307030
)
70317031
go_repository(
@@ -9177,26 +9177,26 @@ def go_deps():
91779177
name = "com_sourcegraph_sourcegraph_appdash",
91789178
build_file_proto_mode = "disable_global",
91799179
importpath = "sourcegraph.com/sourcegraph/appdash",
9180-
sha256 = "bd2492d9db05362c2fecd0b3d0f6002c89a6d90d678fb93b4158298ab883736f",
9181-
strip_prefix = "sourcegraph.com/sourcegraph/[email protected]",
9180+
sha256 = "c46b442fa40d2af48e08064f4c16ae3712953a9988cd0f7588fcf5e4fc7a2fed",
9181+
strip_prefix = "github.com/sourcegraph/[email protected]",
91829182
urls = [
9183-
"http://bazel-cache.pingcap.net:8080/gomod/sourcegraph.com/sourcegraph/appdash/com_sourcegraph_sourcegraph_appdash-v0.0.0-20190731080439-ebfcffb1b5c0.zip",
9184-
"http://ats.apps.svc/gomod/sourcegraph.com/sourcegraph/appdash/com_sourcegraph_sourcegraph_appdash-v0.0.0-20190731080439-ebfcffb1b5c0.zip",
9185-
"https://cache.hawkingrei.com/gomod/sourcegraph.com/sourcegraph/appdash/com_sourcegraph_sourcegraph_appdash-v0.0.0-20190731080439-ebfcffb1b5c0.zip",
9186-
"https://storage.googleapis.com/pingcapmirror/gomod/sourcegraph.com/sourcegraph/appdash/com_sourcegraph_sourcegraph_appdash-v0.0.0-20190731080439-ebfcffb1b5c0.zip",
9183+
"http://bazel-cache.pingcap.net:8080/gomod/github.com/sourcegraph/appdash/com_github_sourcegraph_appdash-v0.0.0-20190731080439-ebfcffb1b5c0.zip",
9184+
"http://ats.apps.svc/gomod/github.com/sourcegraph/appdash/com_github_sourcegraph_appdash-v0.0.0-20190731080439-ebfcffb1b5c0.zip",
9185+
"https://cache.hawkingrei.com/gomod/github.com/sourcegraph/appdash/com_github_sourcegraph_appdash-v0.0.0-20190731080439-ebfcffb1b5c0.zip",
9186+
"https://storage.googleapis.com/pingcapmirror/gomod/github.com/sourcegraph/appdash/com_github_sourcegraph_appdash-v0.0.0-20190731080439-ebfcffb1b5c0.zip",
91879187
],
91889188
)
91899189
go_repository(
91909190
name = "com_sourcegraph_sourcegraph_appdash_data",
91919191
build_file_proto_mode = "disable_global",
91929192
importpath = "sourcegraph.com/sourcegraph/appdash-data",
9193-
sha256 = "382adefecd62bb79172e2552bcfb7d45f47122f9bd22259b0566b26fb2627b87",
9194-
strip_prefix = "sourcegraph.com/sourcegraph/[email protected]",
9193+
sha256 = "59b71fa8cdb0fe2b1c02739ccf2daeaf28f2e22c4b178cdc8e1b902ad1022bc0",
9194+
strip_prefix = "github.com/sourcegraph/[email protected]",
91959195
urls = [
9196-
"http://bazel-cache.pingcap.net:8080/gomod/sourcegraph.com/sourcegraph/appdash-data/com_sourcegraph_sourcegraph_appdash_data-v0.0.0-20151005221446-73f23eafcf67.zip",
9197-
"http://ats.apps.svc/gomod/sourcegraph.com/sourcegraph/appdash-data/com_sourcegraph_sourcegraph_appdash_data-v0.0.0-20151005221446-73f23eafcf67.zip",
9198-
"https://cache.hawkingrei.com/gomod/sourcegraph.com/sourcegraph/appdash-data/com_sourcegraph_sourcegraph_appdash_data-v0.0.0-20151005221446-73f23eafcf67.zip",
9199-
"https://storage.googleapis.com/pingcapmirror/gomod/sourcegraph.com/sourcegraph/appdash-data/com_sourcegraph_sourcegraph_appdash_data-v0.0.0-20151005221446-73f23eafcf67.zip",
9196+
"http://bazel-cache.pingcap.net:8080/gomod/github.com/sourcegraph/appdash-data/com_github_sourcegraph_appdash_data-v0.0.0-20151005221446-73f23eafcf67.zip",
9197+
"http://ats.apps.svc/gomod/github.com/sourcegraph/appdash-data/com_github_sourcegraph_appdash_data-v0.0.0-20151005221446-73f23eafcf67.zip",
9198+
"https://cache.hawkingrei.com/gomod/github.com/sourcegraph/appdash-data/com_github_sourcegraph_appdash_data-v0.0.0-20151005221446-73f23eafcf67.zip",
9199+
"https://storage.googleapis.com/pingcapmirror/gomod/github.com/sourcegraph/appdash-data/com_github_sourcegraph_appdash_data-v0.0.0-20151005221446-73f23eafcf67.zip",
92009200
],
92019201
)
92029202
go_repository(

br/pkg/backup/BUILD.bazel

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ go_test(
7070
embed = [":backup"],
7171
flaky = True,
7272
race = "on",
73-
shard_count = 9,
73+
shard_count = 10,
7474
deps = [
7575
"//br/pkg/conn",
7676
"//br/pkg/gluetidb",
@@ -89,6 +89,7 @@ go_test(
8989
"//pkg/util/codec",
9090
"//pkg/util/table-filter",
9191
"@com_github_golang_protobuf//proto",
92+
"@com_github_pingcap_failpoint//:failpoint",
9293
"@com_github_pingcap_kvproto//pkg/brpb",
9394
"@com_github_pingcap_kvproto//pkg/encryptionpb",
9495
"@com_github_pingcap_kvproto//pkg/errorpb",

br/pkg/backup/client.go

Lines changed: 67 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,23 +1011,74 @@ func (bc *Client) BackupRange(
10111011
return nil
10121012
}
10131013

1014-
func (bc *Client) findTargetPeer(ctx context.Context, key []byte, isRawKv bool, targetStoreIds map[uint64]struct{}) (*metapb.Peer, error) {
1014+
func (bc *Client) FindTargetPeer(ctx context.Context, key []byte, isRawKv bool, targetStoreIds map[uint64]struct{}) (*metapb.Peer, error) {
10151015
// Keys are saved in encoded format in TiKV, so the key must be encoded
10161016
// in order to find the correct region.
1017+
var leader *metapb.Peer
10171018
key = codec.EncodeBytesExt([]byte{}, key, isRawKv)
1018-
for i := 0; i < 5; i++ {
1019-
// better backoff.
1019+
state := utils.InitialRetryState(60, 100*time.Millisecond, 2*time.Second)
1020+
failpoint.Inject("retry-state-on-find-target-peer", func(v failpoint.Value) {
1021+
logutil.CL(ctx).Info("reset state for FindTargetPeer")
1022+
state = utils.InitialRetryState(v.(int), 100*time.Millisecond, 100*time.Millisecond)
1023+
})
1024+
err := utils.WithRetry(ctx, func() error {
10201025
region, err := bc.mgr.GetPDClient().GetRegion(ctx, key)
1026+
failpoint.Inject("return-region-on-find-target-peer", func(v failpoint.Value) {
1027+
switch v.(string) {
1028+
case "nil":
1029+
{
1030+
region = nil
1031+
}
1032+
case "hasLeader":
1033+
{
1034+
region = &pd.Region{
1035+
Leader: &metapb.Peer{
1036+
Id: 42,
1037+
},
1038+
}
1039+
}
1040+
case "hasPeer":
1041+
{
1042+
region = &pd.Region{
1043+
Meta: &metapb.Region{
1044+
Peers: []*metapb.Peer{
1045+
{
1046+
Id: 43,
1047+
StoreId: 42,
1048+
},
1049+
},
1050+
},
1051+
}
1052+
}
1053+
1054+
case "noLeader":
1055+
{
1056+
region = &pd.Region{
1057+
Leader: nil,
1058+
}
1059+
}
1060+
case "noPeer":
1061+
{
1062+
{
1063+
region = &pd.Region{
1064+
Meta: &metapb.Region{
1065+
Peers: nil,
1066+
},
1067+
}
1068+
}
1069+
}
1070+
}
1071+
})
10211072
if err != nil || region == nil {
10221073
logutil.CL(ctx).Error("find region failed", zap.Error(err), zap.Reflect("region", region))
1023-
time.Sleep(time.Millisecond * time.Duration(100*i))
1024-
continue
1074+
return errors.Annotate(berrors.ErrPDLeaderNotFound, "cannot find region from pd client")
10251075
}
10261076
if len(targetStoreIds) == 0 {
10271077
if region.Leader != nil {
10281078
logutil.CL(ctx).Info("find leader",
10291079
zap.Reflect("Leader", region.Leader), logutil.Key("key", key))
1030-
return region.Leader, nil
1080+
leader = region.Leader
1081+
return nil
10311082
}
10321083
} else {
10331084
candidates := make([]*metapb.Peer, 0, len(region.Meta.Peers))
@@ -1040,19 +1091,18 @@ func (bc *Client) findTargetPeer(ctx context.Context, key []byte, isRawKv bool,
10401091
peer := candidates[rand.Intn(len(candidates))]
10411092
logutil.CL(ctx).Info("find target peer for backup",
10421093
zap.Reflect("Peer", peer), logutil.Key("key", key))
1043-
return peer, nil
1094+
leader = peer
1095+
return nil
10441096
}
10451097
}
1046-
1047-
logutil.CL(ctx).Warn("fail to find a target peer", logutil.Key("key", key))
1048-
time.Sleep(time.Millisecond * time.Duration(1000*i))
1049-
continue
1050-
}
1051-
logutil.CL(ctx).Error("can not find a valid target peer", logutil.Key("key", key))
1052-
if len(targetStoreIds) == 0 {
1053-
return nil, errors.Annotatef(berrors.ErrBackupNoLeader, "can not find a valid leader for key %s", key)
1098+
return errors.Annotate(berrors.ErrPDLeaderNotFound, "cannot find leader or candidate from pd client")
1099+
}, &state)
1100+
if err != nil {
1101+
logutil.CL(ctx).Error("can not find a valid target peer after retry", logutil.Key("key", key))
1102+
return nil, err
10541103
}
1055-
return nil, errors.Errorf("can not find a valid target peer for key %s", key)
1104+
// leader cannot be nil if err is nil
1105+
return leader, nil
10561106
}
10571107

10581108
func (bc *Client) fineGrainedBackup(
@@ -1226,7 +1276,7 @@ func (bc *Client) handleFineGrained(
12261276
targetStoreIds map[uint64]struct{},
12271277
respCh chan<- *backuppb.BackupResponse,
12281278
) (int, error) {
1229-
targetPeer, pderr := bc.findTargetPeer(ctx, req.StartKey, req.IsRawKv, targetStoreIds)
1279+
targetPeer, pderr := bc.FindTargetPeer(ctx, req.StartKey, req.IsRawKv, targetStoreIds)
12301280
if pderr != nil {
12311281
return 0, errors.Trace(pderr)
12321282
}

br/pkg/backup/client_test.go

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"time"
1111

1212
"github.com/golang/protobuf/proto"
13+
"github.com/pingcap/failpoint"
1314
backuppb "github.com/pingcap/kvproto/pkg/brpb"
1415
"github.com/pingcap/kvproto/pkg/encryptionpb"
1516
"github.com/pingcap/kvproto/pkg/errorpb"
@@ -41,6 +42,7 @@ type testBackup struct {
4142
cancel context.CancelFunc
4243

4344
mockPDClient pd.Client
45+
mockCluster *testutils.MockCluster
4446
mockGlue *gluetidb.MockGlue
4547
backupClient *backup.Client
4648

@@ -49,11 +51,12 @@ type testBackup struct {
4951
}
5052

5153
func createBackupSuite(t *testing.T) *testBackup {
52-
tikvClient, _, pdClient, err := testutils.NewMockTiKV("", nil)
54+
tikvClient, mockCluster, pdClient, err := testutils.NewMockTiKV("", nil)
5355
require.NoError(t, err)
5456
s := new(testBackup)
5557
s.mockGlue = &gluetidb.MockGlue{}
5658
s.mockPDClient = pdClient
59+
s.mockCluster = mockCluster
5760
s.ctx, s.cancel = context.WithCancel(context.Background())
5861
mockMgr := &conn.Mgr{PdController: &pdutil.PdController{}}
5962
mockMgr.SetPDClient(s.mockPDClient)
@@ -334,3 +337,63 @@ func TestCheckBackupIsLocked(t *testing.T) {
334337
require.Error(t, err)
335338
require.Regexp(t, "backup lock file and sst file exist in(.+)", err.Error())
336339
}
340+
341+
func TestFindTargetPeer(t *testing.T) {
342+
s := createBackupSuite(t)
343+
344+
ctx := context.Background()
345+
testutils.BootstrapWithMultiRegions(s.mockCluster, []byte("g"), []byte("n"), []byte("t"))
346+
347+
leader1, err := s.backupClient.FindTargetPeer(ctx, []byte("a"), false, nil)
348+
require.NoError(t, err)
349+
350+
leader2, err := s.backupClient.FindTargetPeer(ctx, []byte("b"), false, nil)
351+
require.NoError(t, err)
352+
353+
// check passed keys on same region
354+
require.Equal(t, leader1.GetId(), leader2.GetId())
355+
356+
failpoint.Enable("github.com/pingcap/tidb/br/pkg/backup/retry-state-on-find-target-peer", "return(2)")
357+
failpoint.Enable("github.com/pingcap/tidb/br/pkg/backup/return-region-on-find-target-peer", "1*return(\"nil\")->1*return(\"hasLeader\")")
358+
359+
leader, err := s.backupClient.FindTargetPeer(ctx, []byte("m"), false, nil)
360+
require.NoError(t, err)
361+
// check passed keys on find leader after retry
362+
require.Equal(t, 42, int(leader.GetId()))
363+
364+
failpoint.Disable("github.com/pingcap/tidb/br/pkg/backup/retry-state-on-find-target-peer")
365+
failpoint.Disable("github.com/pingcap/tidb/br/pkg/backup/return-region-on-find-target-peer")
366+
367+
failpoint.Enable("github.com/pingcap/tidb/br/pkg/backup/retry-state-on-find-target-peer", "return(2)")
368+
failpoint.Enable("github.com/pingcap/tidb/br/pkg/backup/return-region-on-find-target-peer", "return(\"noLeader\")")
369+
370+
leader, err = s.backupClient.FindTargetPeer(ctx, []byte("m"), false, nil)
371+
// check passed keys with error on find leader after retry
372+
require.ErrorContains(t, err, "cannot find leader")
373+
374+
failpoint.Disable("github.com/pingcap/tidb/br/pkg/backup/retry-state-on-find-target-peer")
375+
failpoint.Disable("github.com/pingcap/tidb/br/pkg/backup/return-region-on-find-target-peer")
376+
377+
failpoint.Enable("github.com/pingcap/tidb/br/pkg/backup/retry-state-on-find-target-peer", "return(2)")
378+
failpoint.Enable("github.com/pingcap/tidb/br/pkg/backup/return-region-on-find-target-peer", "1*return(\"nil\")->1*return(\"hasPeer\")")
379+
380+
storeIDMap := make(map[uint64]struct{})
381+
storeIDMap[42] = struct{}{}
382+
leader, err = s.backupClient.FindTargetPeer(ctx, []byte("m"), false, storeIDMap)
383+
require.NoError(t, err)
384+
// check passed keys with target peer
385+
require.Equal(t, 43, int(leader.GetId()))
386+
387+
failpoint.Disable("github.com/pingcap/tidb/br/pkg/backup/retry-state-on-find-target-peer")
388+
failpoint.Disable("github.com/pingcap/tidb/br/pkg/backup/return-region-on-find-target-peer")
389+
390+
failpoint.Enable("github.com/pingcap/tidb/br/pkg/backup/retry-state-on-find-target-peer", "return(2)")
391+
failpoint.Enable("github.com/pingcap/tidb/br/pkg/backup/return-region-on-find-target-peer", "1*return(\"nil\")->1*return(\"noPeer\")")
392+
393+
leader, err = s.backupClient.FindTargetPeer(ctx, []byte("m"), false, storeIDMap)
394+
// check passed keys with error and cannot find target peer
395+
require.ErrorContains(t, err, "cannot find leader")
396+
397+
failpoint.Disable("github.com/pingcap/tidb/br/pkg/backup/retry-state-on-find-target-peer")
398+
failpoint.Disable("github.com/pingcap/tidb/br/pkg/backup/return-region-on-find-target-peer")
399+
}

br/pkg/lightning/backend/kv/session.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import (
3333
"github.com/pingcap/tidb/pkg/parser/model"
3434
"github.com/pingcap/tidb/pkg/sessionctx"
3535
"github.com/pingcap/tidb/pkg/sessionctx/variable"
36-
"github.com/pingcap/tidb/pkg/types"
3736
"github.com/pingcap/tidb/pkg/util/topsql/stmtstats"
3837
"go.uber.org/zap"
3938
)
@@ -287,7 +286,6 @@ func NewSession(options *encode.SessionOptions, logger log.Logger) *Session {
287286
vars.StmtCtx.InInsertStmt = true
288287
vars.StmtCtx.BatchCheck = true
289288
vars.StmtCtx.BadNullAsWarning = !sqlMode.HasStrictMode()
290-
vars.StmtCtx.OverflowAsWarning = !sqlMode.HasStrictMode()
291289
vars.SQLMode = sqlMode
292290

293291
typeFlags := vars.StmtCtx.TypeFlags().
@@ -315,7 +313,6 @@ func NewSession(options *encode.SessionOptions, logger log.Logger) *Session {
315313
}
316314
}
317315
vars.StmtCtx.SetTimeZone(vars.Location())
318-
vars.StmtCtx.SetTypeFlags(types.StrictFlags)
319316
if err := vars.SetSystemVar("timestamp", strconv.FormatInt(options.Timestamp, 10)); err != nil {
320317
logger.Warn("new session: failed to set timestamp",
321318
log.ShortError(err))

br/pkg/storage/gcs.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,9 @@ func (s *GCSStorage) Rename(ctx context.Context, oldFileName, newFileName string
293293
return s.DeleteFile(ctx, oldFileName)
294294
}
295295

296+
// used in tests
297+
var mustReportCredErr = false
298+
296299
// NewGCSStorage creates a GCS external storage implementation.
297300
func NewGCSStorage(ctx context.Context, gcs *backuppb.GCS, opts *ExternalStorageOptions) (*GCSStorage, error) {
298301
var clientOps []option.ClientOption
@@ -302,6 +305,10 @@ func NewGCSStorage(ctx context.Context, gcs *backuppb.GCS, opts *ExternalStorage
302305
if gcs.CredentialsBlob == "" {
303306
creds, err := google.FindDefaultCredentials(ctx, storage.ScopeReadWrite)
304307
if err != nil {
308+
if intest.InTest && !mustReportCredErr {
309+
clientOps = append(clientOps, option.WithoutAuthentication())
310+
goto skipHandleCred
311+
}
305312
return nil, errors.Annotatef(berrors.ErrStorageInvalidConfig, "%v Or you should provide '--gcs.credentials_file'", err)
306313
}
307314
if opts.SendCredentials {
@@ -318,23 +325,26 @@ func NewGCSStorage(ctx context.Context, gcs *backuppb.GCS, opts *ExternalStorage
318325
clientOps = append(clientOps, option.WithCredentialsJSON([]byte(gcs.GetCredentialsBlob())))
319326
}
320327
}
328+
skipHandleCred:
321329

322330
if gcs.Endpoint != "" {
323331
clientOps = append(clientOps, option.WithEndpoint(gcs.Endpoint))
324332
}
325333

326334
if opts.HTTPClient != nil {
327-
if !intest.InTest {
328-
// see https://github.com/pingcap/tidb/issues/47022#issuecomment-1722913455
329-
// https://www.googleapis.com/auth/cloud-platform must be set to use service_account
330-
// type of credential-file.
331-
newTransport, err := htransport.NewTransport(ctx, opts.HTTPClient.Transport,
332-
append(clientOps, option.WithScopes(storage.ScopeFullControl, "https://www.googleapis.com/auth/cloud-platform"))...)
333-
if err != nil {
334-
return nil, errors.Trace(err)
335+
// see https://github.com/pingcap/tidb/issues/47022#issuecomment-1722913455
336+
// https://www.googleapis.com/auth/cloud-platform must be set to use service_account
337+
// type of credential-file.
338+
newTransport, err := htransport.NewTransport(ctx, opts.HTTPClient.Transport,
339+
append(clientOps, option.WithScopes(storage.ScopeFullControl, "https://www.googleapis.com/auth/cloud-platform"))...)
340+
if err != nil {
341+
if intest.InTest && !mustReportCredErr {
342+
goto skipHandleTransport
335343
}
336-
opts.HTTPClient.Transport = newTransport
344+
return nil, errors.Trace(err)
337345
}
346+
opts.HTTPClient.Transport = newTransport
347+
skipHandleTransport:
338348
clientOps = append(clientOps, option.WithHTTPClient(opts.HTTPClient))
339349
}
340350

0 commit comments

Comments
 (0)