Skip to content

Commit 892744f

Browse files
craig[bot]shubhamdhama
andcommitted
Merge #154156
154156: testutils,drpc: improve experience with DefaultTestDRPCOption r=shubhamdhama a=shubhamdhama Here are some small code changes to improve developer experience. `` testutils: improve validate DefaultDRPCOption error message `` This improves the error message when node level server args are used instead of top-level server args for a test cluster. before: "improper use of DefaultDRPCOption in per-server args: 1 vs 0" now : "improper use of DefaultDRPCOption in per-server args: enabled vs unset" `` server,tests: explicitly disable DRPC setting if option is TestDRPCDisabled `` This change ensures a clear distinction between an unset DRPC option and an explicitly disabled one. If the DRPC option is unset at both the test and package levels, we will not modify the setting. This allows the system to use the default value of `ExperimentalDRPCEnabled`, which can be overridden for development via `COCKROACH_EXPERIMENTAL_DRPC_ENABLED`. When the option is explicitly set to `TestDRPCDisabled`, we will now explicitly disable the setting. `` testutils: allow overriding DefaultTestDRPCOption with env variable `` This allows enabling or disabling DRPC for unit tests without changing code or recompiling. Note that the environment variable will take precedence over server args, which take precedence over the package-level option. Example usage: `dev test pkg/server:server_test -- --test_env=COCKROACH_TEST_DRPC=false` Epic: none Release note: none Co-authored-by: Shubham Dhama <[email protected]>
2 parents 92b4af4 + 7b0e2b8 commit 892744f

File tree

4 files changed

+57
-6
lines changed

4 files changed

+57
-6
lines changed

pkg/base/test_server_args.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,21 @@ const (
251251
TestDRPCEnabledRandomly
252252
)
253253

254+
func (d DefaultTestDRPCOption) String() string {
255+
switch d {
256+
case TestDRPCUnset:
257+
return "unset"
258+
case TestDRPCDisabled:
259+
return "disabled"
260+
case TestDRPCEnabled:
261+
return "enabled"
262+
case TestDRPCEnabledRandomly:
263+
return "enabled-randomly"
264+
default:
265+
panic("unreachable")
266+
}
267+
}
268+
254269
// TestClusterArgs contains the parameters one can set when creating a test
255270
// cluster. It contains a TestServerArgs instance which will be copied over to
256271
// every server.

pkg/server/testserver.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,8 +333,11 @@ func makeTestConfigFromParams(params base.TestServerArgs) Config {
333333
cfg.TestingKnobs.AdmissionControlOptions = &admission.Options{}
334334
}
335335

336-
if params.DefaultDRPCOption == base.TestDRPCEnabled {
336+
switch params.DefaultDRPCOption {
337+
case base.TestDRPCEnabled:
337338
rpcbase.ExperimentalDRPCEnabled.Override(context.Background(), &st.SV, true)
339+
case base.TestDRPCDisabled:
340+
rpcbase.ExperimentalDRPCEnabled.Override(context.Background(), &st.SV, false)
338341
}
339342

340343
return cfg

pkg/testutils/serverutils/test_server_shim.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,13 @@ const (
177177

178178
testTenantModeEnabledShared = "shared"
179179
testTenantModeEnabledExternal = "external"
180+
181+
// COCKROACH_TEST_DRPC controls the DRPC enablement mode for test servers.
182+
//
183+
// - disabled: disables DRPC; all inter-node connectivity will use gRPC only
184+
//
185+
// - enabled: enables DRPC for inter-node connectivity
186+
testDRPCEnabledEnvVar = "COCKROACH_TEST_DRPC"
180187
)
181188

182189
func testTenantDecisionFromEnvironment(
@@ -537,24 +544,50 @@ func WaitForTenantCapabilities(
537544
}
538545
}
539546

547+
// parseDefaultTestDRPCOptionFromEnv parses the COCKROACH_TEST_DRPC environment
548+
// variable and returns the corresponding DefaultTestDRPCOption. If the
549+
// environment variable is not set it returns TestDRPCUnset. For invalid value,
550+
// it panic.
551+
func parseDefaultTestDRPCOptionFromEnv() base.DefaultTestDRPCOption {
552+
if str, present := envutil.EnvString(testDRPCEnabledEnvVar, 0); present {
553+
switch str {
554+
case "disabled", "false":
555+
return base.TestDRPCDisabled
556+
case "enabled", "true":
557+
return base.TestDRPCEnabled
558+
default:
559+
panic(fmt.Sprintf("invalid value for %s: %s", testDRPCEnabledEnvVar, str))
560+
}
561+
}
562+
return base.TestDRPCUnset
563+
}
564+
540565
// ShouldEnableDRPC determines the final DRPC option based on the input
541566
// option and any global overrides, resolving random choices to a concrete
542567
// enabled/disabled state.
543568
func ShouldEnableDRPC(
544569
ctx context.Context, t TestLogger, option base.DefaultTestDRPCOption,
545570
) base.DefaultTestDRPCOption {
546571
var logSuffix string
547-
if option == base.TestDRPCUnset && globalDefaultDRPCOptionOverride.isSet {
572+
573+
// Check environment variable first
574+
if envOption := parseDefaultTestDRPCOptionFromEnv(); envOption != base.TestDRPCUnset {
575+
option = envOption
576+
logSuffix = " (override by COCKROACH_TEST_DRPC environment variable)"
577+
} else if option == base.TestDRPCUnset && globalDefaultDRPCOptionOverride.isSet {
548578
option = globalDefaultDRPCOptionOverride.value
549579
logSuffix = " (override by TestingGlobalDRPCOption)"
550580
}
581+
551582
enableDRPC := false
552583
switch option {
553584
case base.TestDRPCEnabled:
554585
enableDRPC = true
555586
case base.TestDRPCEnabledRandomly:
556587
rng, _ := randutil.NewTestRand()
557588
enableDRPC = rng.Intn(2) == 0
589+
case base.TestDRPCUnset:
590+
return base.TestDRPCUnset
558591
}
559592

560593
if enableDRPC {

pkg/testutils/testcluster/testcluster.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,16 +281,16 @@ func (tc *TestCluster) validateDefaultTestTenant(
281281
// validateDefaultDRPCOption checks that per-server args don't override
282282
// the top-level DefaultDRPCOption setting inconsistently.
283283
func (tc *TestCluster) validateDefaultDRPCOption(
284-
t serverutils.TestFataler, nodes int, defaultDRPCOption base.DefaultTestDRPCOption,
284+
t serverutils.TestFataler, nodes int, clusterDRPCOption base.DefaultTestDRPCOption,
285285
) {
286286
for i := range nodes {
287287
if args, ok := tc.clusterArgs.ServerArgsPerNode[i]; ok &&
288288
args.DefaultDRPCOption != base.TestDRPCUnset &&
289-
args.DefaultDRPCOption != defaultDRPCOption {
289+
args.DefaultDRPCOption != clusterDRPCOption {
290290
tc.Stopper().Stop(context.Background())
291291
t.Fatalf("improper use of DefaultDRPCOption in per-server args: %v vs %v\n"+
292-
"Tip: use the top-level ServerArgs to set the default DRPC option.",
293-
args.DefaultDRPCOption, defaultDRPCOption)
292+
"Use the top-level ServerArgs to set the default DRPC option.",
293+
args.DefaultDRPCOption, clusterDRPCOption)
294294
}
295295
}
296296
}

0 commit comments

Comments
 (0)