refactor(r2-02): delete the dead bulkhead knob — options + parser (01/U-6); stored JSON keys become ignored unknowns

This commit is contained in:
Joseph Doherty
2026-07-13 10:08:27 -04:00
parent 99b424240a
commit 56854139c9
4 changed files with 16 additions and 27 deletions
@@ -98,18 +98,23 @@ public sealed class DriverResilienceOptionsParserTests
read.BreakerFailureThreshold.ShouldBe(tierDefault.BreakerFailureThreshold);
}
/// <summary>Verifies that bulkhead overrides are honored.</summary>
/// <summary>
/// 01/U-6: the deleted bulkhead knob's keys in stored JSON become ignored unknown keys — a
/// config carrying them parses clean with no diagnostic (migration-free contract).
/// </summary>
[Fact]
public void BulkheadOverrides_AreHonored()
public void BulkheadKeys_InStoredJson_AreIgnored()
{
var json = """
{ "bulkheadMaxConcurrent": 100, "bulkheadMaxQueue": 500 }
""";
var options = DriverResilienceOptionsParser.ParseOrDefaults(DriverTier.B, json, out _);
var options = DriverResilienceOptionsParser.ParseOrDefaults(DriverTier.B, json, out var diag);
options.BulkheadMaxConcurrent.ShouldBe(100);
options.BulkheadMaxQueue.ShouldBe(500);
diag.ShouldBeNull();
// Known capabilities untouched — the stale bulkhead keys are simply ignored.
options.Resolve(DriverCapability.Read).ShouldBe(
DriverResilienceOptions.GetTierDefaults(DriverTier.B)[DriverCapability.Read]);
}
/// <summary>Verifies that unknown capability surfaces in diagnostic but does not fail.</summary>
@@ -133,17 +138,18 @@ public sealed class DriverResilienceOptionsParserTests
DriverResilienceOptions.GetTierDefaults(DriverTier.A)[DriverCapability.Read]);
}
/// <summary>Verifies that property names are case insensitive.</summary>
/// <summary>Verifies that top-level property names are case insensitive.</summary>
[Fact]
public void PropertyNames_AreCaseInsensitive()
{
var json = """
{ "BULKHEADMAXCONCURRENT": 42 }
{ "RECYCLEINTERVALSECONDS": 3600 }
""";
var options = DriverResilienceOptionsParser.ParseOrDefaults(DriverTier.A, json, out _);
var options = DriverResilienceOptionsParser.ParseOrDefaults(DriverTier.C, json, out var diag);
options.BulkheadMaxConcurrent.ShouldBe(42);
diag.ShouldBeNull();
options.RecycleIntervalSeconds.ShouldBe(3600);
}
/// <summary>Verifies that capability name is case insensitive.</summary>