Skip to content

Commit 900459b

Browse files
committed
roachtest: Add mixed version kvprober test
Since the kv prober is an important tool, 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. This PR should be followed by testing the kv_prober_enabled cluster setting. resolves: cockroachdb#102034 Epic: none Release note: none
1 parent c3a4d77 commit 900459b

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

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",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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+
const (
23+
kv_prober_virtual_table = "crdb_internal.probe_ranges"
24+
)
25+
26+
func registerKVProberMixedVersion(r registry.Registry) {
27+
// kv-prober/mixed-version tests ??
28+
r.Add(registry.TestSpec{
29+
Name: "kv-prober/mixed-version",
30+
Owner: registry.OwnerObservability,
31+
Cluster: r.MakeClusterSpec(5, spec.WorkloadNode()),
32+
CompatibleClouds: registry.AllClouds,
33+
Suites: registry.Suites(registry.MixedVersion, registry.Nightly),
34+
Randomized: true,
35+
Run: runSQLStatsMixedVersion,
36+
})
37+
}
38+
39+
// runKVProber tests that accessing crdb_internal_probe_ranges works across mixed version clusters.
40+
func runKVProberMixedVersion(ctx context.Context, t test.Test, c cluster.Cluster) {
41+
mvt := mixedversion.NewTest(ctx, t, t.L(), c,
42+
c.CRDBNodes(),
43+
// We test only upgrades from ?? because it is earliest supported version.
44+
mixedversion.MinimumSupportedVersion("v23.2.0"),
45+
)
46+
47+
// Not sure if using a kv heavy workload is necessary for this...
48+
initWorkload := roachtestutil.NewCommand("./cockroach workload init tpcc").
49+
Arg("{pgurl%s}", c.CRDBNodes())
50+
runWorkload := roachtestutil.NewCommand("./cockroach workload run tpcc").
51+
Arg("{pgurl%s}", c.CRDBNodes()).
52+
Option("tolerate-errors")
53+
54+
kvProbeRead := func(ctx context.Context, l *logger.Logger, r *rand.Rand, h *mixedversion.Helper) error {
55+
var kv_errors int
56+
if err := h.QueryRow(r, `select COUNT(error) from crdb_internal.probe_ranges(INTERVAL '1s', 'read') WHERE error != ''`).Scan(&kv_errors); err != nil {
57+
return errors.Wrap(err, "querying crdb_internal.probe_ranges(INTERVAL '1s', 'read')")
58+
}
59+
l.Printf("Successfully queried crdb_internal.probe_ranges(INTERVAL '1s', 'read')")
60+
return nil
61+
}
62+
63+
kvProbeWrite := func(ctx context.Context, l *logger.Logger, r *rand.Rand, h *mixedversion.Helper) error {
64+
var kv_errors int
65+
if err := h.QueryRow(r, `select COUNT(error) from crdb_internal.probe_ranges(INTERVAL '1s', 'write') WHERE error != ''`).Scan(&kv_errors); err != nil {
66+
return errors.Wrap(err, "querying crdb_internal.probe_ranges(INTERVAL '1s', 'write')")
67+
}
68+
l.Printf("Successfully queried crdb_internal.probe_ranges(INTERVAL '1s', 'write')")
69+
return nil
70+
}
71+
72+
stopTpcc := mvt.Workload("tpcc", c.WorkloadNode(), initWorkload, runWorkload)
73+
defer stopTpcc()
74+
75+
mvt.InMixedVersion("check kv prober reads", kvProbeRead)
76+
mvt.InMixedVersion("check kv prober writes", kvProbeWrite)
77+
78+
mvt.Run()
79+
}

0 commit comments

Comments
 (0)