-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
96257: kvserver: log if lease applies with a delay r=erikgrinaker a=tbg When we transfer a lease to a lagging follower, there's often a latency blip that we get asked to investigate. This is time consuming; it's often very subtle to even figure out that it happened. We try to be better about not doing it, but at least on 22.1 we know it's possible, and we can't backport the rather involved fixes. This warning makes it fairly obvious when it happens. > W230131 [...] [T1,n2,s2,r23/3:‹/Table/2{1-2}›,raft] 165 lease repl=(n2,s2):3 seq=5 start=1675153630.108829000,0 epo=3 pro=1675153630.108829000,0 active after replication lag of ~0.58s; foreground traffic may have been impacted [prev=repl=(n3,s3):2 seq=4 start=1675153407.528408000,0 epo=2 pro=1675153419.837642000,0] Addresses #95991. Epic: none Release note: None 96529: backupccl: add missing context cancel checks in gen split scatter processor r=rhu713 a=rhu713 Add the rest of the missing context cancel checks in restore's generativeSplitAndScatterProcessor. Add a red/green test to show that runGenerativeSplitAndScatter is interrupted if its supplied context is canceled. Fixes: #95257 Release note: None 96796: sql: remove sql obs V22_2 gates r=maryliag a=maryliag With the min version bumped to 22.2, it's safe to delete version gates for 22.2. Fixes #96758 Release note: None Co-authored-by: Tobias Grieger <[email protected]> Co-authored-by: Rui Hu <[email protected]> Co-authored-by: maryliag <[email protected]>
- Loading branch information
Showing
15 changed files
with
225 additions
and
294 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
140 changes: 140 additions & 0 deletions
140
pkg/ccl/backupccl/generative_split_and_scatter_processor_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
// Copyright 2023 The Cockroach Authors. | ||
// | ||
// Licensed as a CockroachDB Enterprise file under the Cockroach Community | ||
// License (the "License"); you may not use this file except in compliance with | ||
// the License. You may obtain a copy of the License at | ||
// | ||
// https://github.com/cockroachdb/cockroach/blob/master/licenses/CCL.txt | ||
|
||
package backupccl | ||
|
||
import ( | ||
"context" | ||
"testing" | ||
|
||
"github.com/cockroachdb/cockroach/pkg/jobs" | ||
"github.com/cockroachdb/cockroach/pkg/keys" | ||
"github.com/cockroachdb/cockroach/pkg/roachpb" | ||
"github.com/cockroachdb/cockroach/pkg/settings/cluster" | ||
"github.com/cockroachdb/cockroach/pkg/sql" | ||
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb" | ||
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descs" | ||
"github.com/cockroachdb/cockroach/pkg/sql/catalog/desctestutils" | ||
"github.com/cockroachdb/cockroach/pkg/sql/execinfra" | ||
"github.com/cockroachdb/cockroach/pkg/sql/execinfrapb" | ||
"github.com/cockroachdb/cockroach/pkg/sql/sem/eval" | ||
"github.com/cockroachdb/cockroach/pkg/util/hlc" | ||
"github.com/cockroachdb/cockroach/pkg/util/leaktest" | ||
"github.com/cockroachdb/cockroach/pkg/util/protoutil" | ||
"github.com/stretchr/testify/require" | ||
) | ||
|
||
// TestRunGenerativeSplitAndScatterContextCancel verifies that | ||
// runGenerativeSplitAndScatter can be interrupted by canceling the supplied | ||
// context. This test would time out if the context cancellation does not | ||
// interrupt the function. | ||
func TestRunGenerativeSplitAndScatterContextCancel(t *testing.T) { | ||
defer leaktest.AfterTest(t)() | ||
|
||
const numAccounts = 1000 | ||
const localFoo = "nodelocal://0/foo" | ||
ctx := context.Background() | ||
ctx, cancel := context.WithCancel(ctx) | ||
tc, sqlDB, _, cleanupFn := backupRestoreTestSetup(t, singleNode, numAccounts, | ||
InitManualReplication) | ||
defer cleanupFn() | ||
|
||
st := cluster.MakeTestingClusterSettings() | ||
evalCtx := eval.MakeTestingEvalContext(st) | ||
|
||
testDiskMonitor := execinfra.NewTestDiskMonitor(ctx, st) | ||
defer testDiskMonitor.Stop(ctx) | ||
|
||
// Set up the test so that the test context is canceled after the first entry | ||
// has been processed by the generative split and scatterer. | ||
s0 := tc.Server(0) | ||
registry := tc.Server(0).JobRegistry().(*jobs.Registry) | ||
execCfg := s0.ExecutorConfig().(sql.ExecutorConfig) | ||
flowCtx := execinfra.FlowCtx{ | ||
Cfg: &execinfra.ServerConfig{ | ||
Settings: st, | ||
DB: s0.InternalDB().(descs.DB), | ||
JobRegistry: registry, | ||
ExecutorConfig: &execCfg, | ||
TestingKnobs: execinfra.TestingKnobs{ | ||
BackupRestoreTestingKnobs: &sql.BackupRestoreTestingKnobs{ | ||
RunAfterSplitAndScatteringEntry: func(ctx context.Context) { | ||
cancel() | ||
}, | ||
}, | ||
}, | ||
}, | ||
EvalCtx: &evalCtx, | ||
Mon: evalCtx.TestingMon, | ||
DiskMonitor: testDiskMonitor, | ||
NodeID: evalCtx.NodeID, | ||
} | ||
|
||
sqlDB.Exec(t, `SET CLUSTER SETTING bulkio.backup.file_size = '1'`) | ||
sqlDB.Exec(t, `BACKUP INTO $1`, localFoo) | ||
|
||
backups := sqlDB.QueryStr(t, `SHOW BACKUPS IN $1`, localFoo) | ||
require.Equal(t, 1, len(backups)) | ||
uri := localFoo + "/" + backups[0][0] | ||
|
||
codec := keys.MakeSQLCodec(s0.RPCContext().TenantID) | ||
backupTableDesc := desctestutils.TestingGetPublicTableDescriptor(tc.Servers[0].DB(), codec, "data", "bank") | ||
backupStartKey := backupTableDesc.PrimaryIndexSpan(codec).Key | ||
|
||
spec := makeTestingGenerativeSplitAndScatterSpec( | ||
[]string{uri}, | ||
[]roachpb.Span{{ | ||
Key: backupStartKey, | ||
EndKey: backupStartKey.PrefixEnd(), | ||
}}, | ||
) | ||
|
||
oldID := backupTableDesc.GetID() | ||
newID := backupTableDesc.GetID() + 1 | ||
newDesc := protoutil.Clone(backupTableDesc.TableDesc()).(*descpb.TableDescriptor) | ||
newDesc.ID = newID | ||
tableRekeys := []execinfrapb.TableRekey{ | ||
{ | ||
OldID: uint32(oldID), | ||
NewDesc: mustMarshalDesc(t, newDesc), | ||
}, | ||
} | ||
|
||
kr, err := MakeKeyRewriterFromRekeys(keys.SystemSQLCodec, tableRekeys, nil, false) | ||
require.NoError(t, err) | ||
|
||
chunkSplitScatterers := []splitAndScatterer{makeSplitAndScatterer(flowCtx.Cfg.DB.KV(), kr)} | ||
chunkEntrySpliterScatterers := []splitAndScatterer{makeSplitAndScatterer(flowCtx.Cfg.DB.KV(), kr)} | ||
|
||
// Large enough so doneScatterCh never blocks. | ||
doneScatterCh := make(chan entryNode, 1000) | ||
err = runGenerativeSplitAndScatter(ctx, &flowCtx, &spec, chunkSplitScatterers, chunkEntrySpliterScatterers, doneScatterCh) | ||
|
||
require.Error(t, err, "context canceled") | ||
} | ||
|
||
func makeTestingGenerativeSplitAndScatterSpec( | ||
backupURIs []string, requiredSpans []roachpb.Span, | ||
) execinfrapb.GenerativeSplitAndScatterSpec { | ||
return execinfrapb.GenerativeSplitAndScatterSpec{ | ||
ValidateOnly: false, | ||
URIs: backupURIs, | ||
Encryption: nil, | ||
EndTime: hlc.Timestamp{}, | ||
Spans: requiredSpans, | ||
BackupLocalityInfo: nil, | ||
HighWater: nil, | ||
UserProto: "", | ||
ChunkSize: 1, | ||
TargetSize: 1, | ||
NumEntries: 1, | ||
NumNodes: 1, | ||
JobID: 0, | ||
UseSimpleImportSpans: false, | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.