Skip to content

Commit a0a3fd1

Browse files
committed
roachtest: Add mixed version kvprober test
Since the kv prober is used for critical alerts, we would like to add some additional tests to ensure that it continues to work. This is a simple nightly roach test that ensures we can query crdb_internal.probe_ranges and it successfully returns with no errors. resolves: cockroachdb#102034 Epic: none Release note: none
1 parent 3a09346 commit a0a3fd1

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

Diff for: pkg/cmd/roachtest/tests/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ go_library(
123123
"mixed_version_import.go",
124124
"mixed_version_job_compatibility_in_declarative_schema_changer.go",
125125
"mixed_version_jobs.go",
126+
"mixed_version_kv_prober.go",
126127
"mixed_version_ldr.go",
127128
"mixed_version_multi_region.go",
128129
"mixed_version_schemachange.go",

Diff for: pkg/cmd/roachtest/tests/mixed_version_kv_prober.go

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// Copyright 2024 The Cockroach Authors.
2+
//
3+
// Use of this software is governed by the CockroachDB Software License
4+
// included in the /LICENSE file.
5+
6+
package tests
7+
8+
import (
9+
"context"
10+
"math/rand"
11+
12+
"github.com/cockroachdb/cockroach/pkg/cmd/roachtest/cluster"
13+
"github.com/cockroachdb/cockroach/pkg/cmd/roachtest/registry"
14+
"github.com/cockroachdb/cockroach/pkg/cmd/roachtest/roachtestutil"
15+
"github.com/cockroachdb/cockroach/pkg/cmd/roachtest/roachtestutil/mixedversion"
16+
"github.com/cockroachdb/cockroach/pkg/cmd/roachtest/spec"
17+
"github.com/cockroachdb/cockroach/pkg/cmd/roachtest/test"
18+
"github.com/cockroachdb/cockroach/pkg/roachprod/logger"
19+
"github.com/cockroachdb/errors"
20+
)
21+
22+
func registerKVProberMixedVersion(r registry.Registry) {
23+
r.Add(registry.TestSpec{
24+
Name: "kv-prober/mixed-version",
25+
Owner: registry.OwnerObservability,
26+
Cluster: r.MakeClusterSpec(5, spec.WorkloadNode()),
27+
CompatibleClouds: registry.AllClouds,
28+
Suites: registry.Suites(registry.MixedVersion, registry.Nightly),
29+
Run: runKVProberMixedVersion,
30+
})
31+
}
32+
33+
// runKVProber tests that accessing crdb_internal_probe_ranges works across mixed version clusters.
34+
func runKVProberMixedVersion(ctx context.Context, t test.Test, c cluster.Cluster) {
35+
mvt := mixedversion.NewTest(ctx, t, t.L(), c,
36+
c.CRDBNodes(),
37+
// We test only upgrades from ?? because it is earliest supported version.
38+
mixedversion.MinimumSupportedVersion("v23.2.0"),
39+
)
40+
41+
// Not sure if using a kv heavy workload is necessary for this...
42+
initWorkload := roachtestutil.NewCommand("./cockroach workload init tpcc").
43+
Arg("{pgurl%s}", c.CRDBNodes())
44+
runWorkload := roachtestutil.NewCommand("./cockroach workload run tpcc").
45+
Arg("{pgurl%s}", c.CRDBNodes()).
46+
Option("tolerate-errors")
47+
48+
kvProbeRead := func(ctx context.Context, l *logger.Logger, r *rand.Rand, h *mixedversion.Helper) error {
49+
var kv_errors int
50+
if err := h.QueryRow(r, `select COUNT(error) from crdb_internal.probe_ranges(INTERVAL '1s', 'read') WHERE error != ''`).Scan(&kv_errors); err != nil {
51+
return errors.Wrap(err, "querying crdb_internal.probe_ranges(INTERVAL '1s', 'read')")
52+
}
53+
l.Printf("Successfully queried crdb_internal.probe_ranges(INTERVAL '1s', 'read')")
54+
return nil
55+
}
56+
57+
kvProbeWrite := func(ctx context.Context, l *logger.Logger, r *rand.Rand, h *mixedversion.Helper) error {
58+
var kv_errors int
59+
if err := h.QueryRow(r, `select COUNT(error) from crdb_internal.probe_ranges(INTERVAL '1s', 'write') WHERE error != ''`).Scan(&kv_errors); err != nil {
60+
return errors.Wrap(err, "querying crdb_internal.probe_ranges(INTERVAL '1s', 'write')")
61+
}
62+
l.Printf("Successfully queried crdb_internal.probe_ranges(INTERVAL '1s', 'write')")
63+
return nil
64+
}
65+
66+
stopTpcc := mvt.Workload("tpcc", c.WorkloadNode(), initWorkload, runWorkload)
67+
defer stopTpcc()
68+
69+
mvt.InMixedVersion("check kv prober reads", kvProbeRead)
70+
mvt.InMixedVersion("check kv prober writes", kvProbeWrite)
71+
72+
mvt.Run()
73+
}

Diff for: pkg/cmd/roachtest/tests/registry.go

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ func RegisterTests(r registry.Registry) {
8484
registerKVBench(r)
8585
registerKVContention(r)
8686
registerKVGracefulDraining(r)
87+
registerKVProberMixedVersion(r)
8788
registerKVQuiescenceDead(r)
8889
registerKVRangeLookups(r)
8990
registerKVScalability(r)

0 commit comments

Comments
 (0)