Skip to content

Commit 336e6b5

Browse files
KSemenenkoclaude
andcommitted
Remove every artificial throttle, repair the test oracles and the benchmark cells
The million-record CLUSTER ingestion gate never passed on a hosted runner: ten SDK writers sharing one API key hit the per-principal HTTP admission pool (eight concurrent requests per key per node) and got ResourceExhausted or UnknownWriteOutcome within fifty seconds. The KeyLoad benchmark cells stopped at exactly 100,000 records because the change outbox refused producers once 100,000 entries were retained. The comparison harness also gave KeyLoad nodes an admission profile that no other database had. Measurements must show the real time of the work, so nothing refuses or queues callers because other work is running. Removed from request handling: - HTTP admission (node/tenant/principal request counts, reserved control requests and bytes, heavy-read and working-set reservations, per-route body caps) and its KeyLoad:HttpAdmission section. - Command admission (node/tenant/principal command counts, retained bytes, the runtime-journal bootstrap control lane) and KeyLoad:CommandAdmission. - The MCP retained-memory pools and KeyLoad:McpMemory; the MCP request state keeps only the payload and reply ceilings. - The admission status surface: GET /admin/admission, the SDK call, the keyload_admin_admission MCP tool, the read kind (NodeStatus keeps wire value 19), the grain/storage read methods and the dashboard card. - Grain routing caps: request producers per silo, connections per node, operations per connection and the per-silo active work count. MaximumTotalFrames is now MaximumStreamFrames and only bounds the frames one long-running response stream carries. - The Postgres cancellation registration count cap. - The benchmark KeyLoad admission profile and its observations. Removed from the engine: - DatabaseLimits.MaxConcurrentQueries: analytical reads keep one counted reservation for release proofs, but the count never refuses. - The change-outbox producer quota and projection progress reserve (MaxOutboxRecords/Bytes, ReservedOutboxRecords/Bytes and the consumer's LastProgressReservationCut); WriterQueueCapacity, which nothing used. - The ANN reader caps per generation and slot and the ANN operation gate. - TextExecutionOptions.MaximumActiveLeases: full-text readers, resource leases and maintenance sessions are counted for joined shutdown only. The bootstrap text projection keeps one reader per generation slot as a structural rule of its file lifecycle. - The unused CommandInboxExecutionOptions type. A duplicate active request or request-work identity now fails with Conflict instead of ResourceExhausted. The request body keeps one server-wide Kestrel limit (KeyLoad:ServerExecution:MaximumBodyBytes, 32 MiB); per-operation data bounds, lifetimes and memory/disk planning are unchanged. The heavy-load sentinel oracle now expects the read reference bound to the collection's resource lifetime, as the server returns it. Tests that only exercised removed limits are deleted with their helpers; tests that used them as scaffolding now check the behavior that remains: uncapped request work with Conflict on duplicates, hundreds of concurrent analytical reservations, a concurrent reservation during a held text search, the outbox head corruption flow without a quota write, projection receipts across compaction and reopen, and competing text maintenance sessions. The unit inventory, product contributors, docs (ADR-145 replaces ADR-042) and status.json describe the current design. Product defect found by the test sweep: PartitionRef cached its atomic partition hash in a private field, and a `with` copy carried the original's hash, so `partition with { PartitionKey = ... }` reported the wrong AtomicPartitionId. The cache now records the identity components it was computed from and recomputes when they differ; a regression test covers it. Unit oracles brought up to the current server contracts: - Store-image oracles exclude or expect the system last-command row that every command with a persisted outcome writes next to the applied watermark. - Queue, event and header oracles expect the caller's exact JSON text, which the server preserves, instead of key-sorted copies; derived link payloads are expected in the server's QueueGraphLink field order. - Duplicate request-work identities expect Conflict; the MCP catalog no longer counts the removed admission tool; ANN readers may overlap. - Hosted Orleans fixtures get a 60-second start bound: every host start builds the MCP tool-search graph, whose full-text indexing is serialized process-wide in ManagedCode.MarkdownLd.Kb. Packages: the owner's NuGet bump (ModelContextProtocol 2.3.0, ManagedCode.Communication 10.3.15, Aspire 13.6.4, TUnit 1.76.0 and others) is completed with ManagedCode.MCPGateway 2.3.0, released today on ModelContextProtocol 2.3.0. MCP gateway invoke arguments are JsonElement values; the new Communication analyzers' findings (redundant null guards, negated IsSuccess) are fixed, including one latent benchmark check that compared the read wrapper instead of its document with null. Benchmarks: - Target HTTP clients get the same 1 MiB response-header bound as document clients; the OpenSearch update-by-query backfill runs on the target client and returns about 230 KB of task headers. - The MongoDB client runs on the host, where replica-set member names (container aliases) do not resolve, so it connects directly to the endpoints Aspire publishes for the primary and for each secondary. - Neo4j cleanup deletes a million-node namespace in 10,000-node transactions within a 10-minute bound instead of one transaction. - KeyLoad cleanup reads every identifier in one cursor pass and then deletes in batches; restarting the scan after each batch re-read every earlier tombstone. - Build and Tests uploads TRX results for every suite and bounds the Aspire suite at 100 minutes so a slow run reports instead of being cancelled. Verification: solution build with -warnaserror, dotnet format verify and the governance check pass. The full unit project ran locally with ten parallel tests before the oracle fixes (3641 cases, 135 failed, all known oracle, analyzer-contract or load cases); after the fixes the previously failing 68 classes leave 10 failures at ten parallel tests, and all 10 pass when run sequentially (MCP catalog build queueing and timing-sensitive ANN budget cases under load). Integration, recovery and benchmark suites are left to CI; the heavy-load gate was not rerun locally. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 32aea11 commit 336e6b5

401 files changed

Lines changed: 1518 additions & 8661 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/build-and-tests.yml‎

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,21 @@ jobs:
2727
shell: pwsh
2828
run: tests/KeyLoad.IntegrationTests/bin/Debug/net10.0/playwright.ps1 install --with-deps chromium
2929
- name: Test code analyzers
30-
run: dotnet test --project tests/KeyLoad.Analyzers.Tests/KeyLoad.Analyzers.Tests.csproj --no-build --output Detailed
30+
run: dotnet test --project tests/KeyLoad.Analyzers.Tests/KeyLoad.Analyzers.Tests.csproj --no-build --output Detailed --report-trx --results-directory "$GITHUB_WORKSPACE/TestResults/analyzers"
3131
- name: Test units
3232
if: ${{ !cancelled() }}
33-
run: dotnet test --project tests/KeyLoad.UnitTests/KeyLoad.UnitTests.csproj --no-build --output Detailed --maximum-parallel-tests "$(nproc)"
33+
run: dotnet test --project tests/KeyLoad.UnitTests/KeyLoad.UnitTests.csproj --no-build --output Detailed --maximum-parallel-tests "$(nproc)" --report-trx --results-directory "$GITHUB_WORKSPACE/TestResults/units"
3434
- name: Test process recovery
3535
if: ${{ !cancelled() }}
36-
run: dotnet test --project tests/KeyLoad.RecoveryTests/KeyLoad.RecoveryTests.csproj --no-build --output Detailed
36+
run: dotnet test --project tests/KeyLoad.RecoveryTests/KeyLoad.RecoveryTests.csproj --no-build --output Detailed --report-trx --results-directory "$GITHUB_WORKSPACE/TestResults/recovery"
3737
- name: Test Aspire topology
3838
if: ${{ !cancelled() }}
39-
run: dotnet test --project tests/KeyLoad.IntegrationTests/KeyLoad.IntegrationTests.csproj --no-build --output Detailed --treenode-filter '/*/*/*/*[Category!=HeavyLoad]'
39+
run: dotnet test --project tests/KeyLoad.IntegrationTests/KeyLoad.IntegrationTests.csproj --no-build --output Detailed --treenode-filter '/*/*/*/*[Category!=HeavyLoad]' --timeout 100m --report-trx --results-directory "$GITHUB_WORKSPACE/TestResults/integration"
40+
- name: Save test results
41+
if: ${{ always() }}
42+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
43+
with:
44+
name: build-and-tests-results
45+
path: TestResults/**
46+
if-no-files-found: warn
47+
retention-days: 30

‎Directory.Packages.props‎

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,18 @@
77
<ItemGroup>
88
<PackageVersion Include="Cartograph" Version="0.1.0-alpha" />
99
<PackageVersion Include="Cartograph.Catalog" Version="0.1.0-alpha" />
10-
<PackageVersion Include="ZoneTree" Version="2.0.2" />
10+
<PackageVersion Include="ZoneTree" Version="2.0.3" />
1111
<PackageVersion Include="ZoneTree.Analytics" Version="1.0.2" />
1212
<PackageVersion Include="ZoneTree.FullTextSearch" Version="1.1.0" />
13-
<PackageVersion Include="ManagedCode.Communication" Version="10.3.11" />
14-
<PackageVersion Include="ManagedCode.Communication.AspNetCore" Version="10.3.11" />
15-
<PackageVersion Include="ManagedCode.Communication.Orleans" Version="10.3.11" />
13+
<PackageVersion Include="ManagedCode.Communication" Version="10.3.15" />
14+
<PackageVersion Include="ManagedCode.Communication.AspNetCore" Version="10.3.15" />
15+
<PackageVersion Include="ManagedCode.Communication.Orleans" Version="10.3.15" />
1616
<PackageVersion Include="ManagedCode.TimeSeries" Version="10.1.2" />
1717
<PackageVersion Include="ManagedCode.Storage.FileSystem" Version="10.1.5" />
1818
<PackageVersion Include="ManagedCode.Storage.Server" Version="10.1.5" />
1919
<PackageVersion Include="ManagedCode.Orleans.Graph" Version="10.4.7" />
2020
<PackageVersion Include="ManagedCode.Orleans.Identity.Core" Version="10.4.2" />
21-
<PackageVersion Include="ManagedCode.MCPGateway" Version="0.4.24" />
21+
<PackageVersion Include="ManagedCode.MCPGateway" Version="2.3.0" />
2222
<PackageVersion Include="ManagedCode.MarkdownLd.Kb" Version="0.2.17" />
2323
<!-- Central transitive dependency used by Aspire and StreamJsonRpc. -->
2424
<PackageVersion Include="MessagePack" Version="3.1.12" />
@@ -29,8 +29,8 @@
2929
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.13" />
3030
<PackageVersion Include="Microsoft.SqlServer.TransactSql.ScriptDom" Version="180.140.0" />
3131
<PackageVersion Include="System.IO.Hashing" Version="10.0.13" />
32-
<PackageVersion Include="ModelContextProtocol.AspNetCore" Version="2.2.0" />
33-
<PackageVersion Include="ModelContextProtocol.Core" Version="2.2.0" />
32+
<PackageVersion Include="ModelContextProtocol.AspNetCore" Version="2.3.0" />
33+
<PackageVersion Include="ModelContextProtocol.Core" Version="2.3.0" />
3434
<PackageVersion Include="Microsoft.Orleans.Server" Version="10.4.0" />
3535
<PackageVersion Include="ManagedCode.Orleans.RapidMembership" Version="10.4.0" />
3636
<PackageVersion Include="Microsoft.Orleans.Streaming" Version="10.4.0" />
@@ -45,30 +45,30 @@
4545
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="5.9.0" />
4646
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="5.9.0" />
4747
<PackageVersion Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="5.9.0" />
48-
<PackageVersion Include="Aspire.Hosting.AppHost" Version="13.6.2" />
49-
<PackageVersion Include="Aspire.Hosting.Testing" Version="13.6.2" />
50-
<PackageVersion Include="Aspire.Hosting.PostgreSQL" Version="13.6.2" />
51-
<PackageVersion Include="Aspire.Hosting.Qdrant" Version="13.6.2" />
52-
<PackageVersion Include="Aspire.Hosting.RabbitMQ" Version="13.6.2" />
53-
<PackageVersion Include="Aspire.Hosting.Redis" Version="13.6.2" />
48+
<PackageVersion Include="Aspire.Hosting.AppHost" Version="13.6.4" />
49+
<PackageVersion Include="Aspire.Hosting.Testing" Version="13.6.4" />
50+
<PackageVersion Include="Aspire.Hosting.PostgreSQL" Version="13.6.4" />
51+
<PackageVersion Include="Aspire.Hosting.Qdrant" Version="13.6.4" />
52+
<PackageVersion Include="Aspire.Hosting.RabbitMQ" Version="13.6.4" />
53+
<PackageVersion Include="Aspire.Hosting.Redis" Version="13.6.4" />
5454
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.11.0" />
5555
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.11.0" />
5656
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.20.1" />
5757
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.20.1" />
58-
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.20.0" />
59-
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.20.0" />
60-
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.20.0" />
61-
<PackageVersion Include="TUnit" Version="1.75.0" />
62-
<PackageVersion Include="TUnit.Aspire" Version="1.75.0" />
63-
<PackageVersion Include="Microsoft.Playwright" Version="1.63.0" />
58+
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.20.1" />
59+
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.20.1" />
60+
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.20.1" />
61+
<PackageVersion Include="TUnit" Version="1.76.0" />
62+
<PackageVersion Include="TUnit.Aspire" Version="1.76.0" />
63+
<PackageVersion Include="Microsoft.Playwright" Version="1.64.1" />
6464
<PackageVersion Include="Microsoft.FluentUI.AspNetCore.Components" Version="5.0.1" />
6565
<!-- One Microsoft engine: MTP collects test processes; the same-version CLI collects owned CLUSTER containers. -->
6666
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.12.0" />
6767
<PackageVersion Include="BenchmarkDotNet" Version="0.15.8" />
6868
<PackageVersion Include="Npgsql" Version="10.0.3" />
6969
<PackageVersion Include="RabbitMQ.Client" Version="7.2.2" />
70-
<PackageVersion Include="StackExchange.Redis" Version="3.4.5" />
71-
<PackageVersion Include="MongoDB.Driver" Version="3.12.0" />
70+
<PackageVersion Include="StackExchange.Redis" Version="3.4.20" />
71+
<PackageVersion Include="MongoDB.Driver" Version="3.13.0" />
7272
<PackageVersion Include="KurrentDB.Client" Version="1.6.0" />
7373
</ItemGroup>
7474
</Project>

‎benchmarks/KeyLoad.BenchmarkScenarios/Benchmarks/EmbeddedBenchmarks.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ private void Submit<T>(OperationKind kind, T payload)
196196
var result = Database.Apply(operation);
197197
if (result.IsFailed)
198198
{
199-
throw Errors.Fail(Errors.Code(result.Problem!)!.Value, result.Problem!.Detail!);
199+
throw Errors.Fail(Errors.Code(result.Problem)!.Value, result.Problem.Detail!);
200200
}
201201
}
202202
}

‎benchmarks/KeyLoad.ComparisonHost/Configuration/ComparisonExecutionRegistration.cs‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,6 @@ internal static IOptions<ComparisonHostExecutionOptions> ReadHost(IConfiguration
5959
});
6060
}
6161

62-
internal static IOptions<IsolatedKeyLoadAdmissionOptions> ReadIsolatedAdmission(IConfiguration configuration)
63-
{
64-
var options = new OptionsManager<IsolatedKeyLoadAdmissionOptions>(new OptionsFactory<IsolatedKeyLoadAdmissionOptions>(
65-
[new ConfigureFromConfigurationOptions<IsolatedKeyLoadAdmissionOptions>(
66-
configuration.GetSection(IsolatedKeyLoadAdmissionOptions.SectionName))], [],
67-
[new ValidateOptions<IsolatedKeyLoadAdmissionOptions>(Options.DefaultName,
68-
value => value.IsValid(), IsolatedKeyLoadAdmissionOptions.ValidationMessage)]));
69-
_ = options.Value;
70-
return options;
71-
}
72-
7362
internal static IOptions<KeyLoadClientExecutionOptions> ReadClient(IConfiguration configuration)
7463
{
7564
var options = new OptionsManager<KeyLoadClientExecutionOptions>(new OptionsFactory<KeyLoadClientExecutionOptions>(

‎benchmarks/KeyLoad.ComparisonHost/Hosting/IsolatedHostTargetOwner.cs‎

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ namespace KeyLoad.ComparisonHost.BenchmarkComparisons;
1010
/// <summary>Owns only one execution target and tracks partial HTTP construction until ownership transfers.</summary>
1111
internal sealed class IsolatedHostTargetOwner(IOptions<ComparisonExecutionOptions> executionOptions,
1212
IOptions<ComparisonDiagnosticOptions> diagnosticOptions,
13-
IOptions<IsolatedKeyLoadAdmissionOptions> admissionOptions,
1413
IOptions<ComparisonLifecycleOptions> lifecycleOptions, IOptions<KeyLoadClientExecutionOptions> clientOptions, IOptions<QueryTranslationOptions> translationOptions, TimeProvider? provider = null) : IAsyncDisposable
1514
{
1615
private const string ExternalImageRequired = "An external database comparison requires its configured container image.";
@@ -20,6 +19,7 @@ internal sealed class IsolatedHostTargetOwner(IOptions<ComparisonExecutionOption
2019
private ComparisonExecutionOptions Policy => execution.Value;
2120
internal IOptions<ComparisonExecutionOptions> ExecutionOptions => execution;
2221
private readonly List<HttpClient> unownedClients = [];
22+
private readonly List<SocketsHttpHandler> clientHandlers = [];
2323
private IComparisonTarget? target;
2424

2525
internal TargetProfile? ObservedProfile => target?.Profile;
@@ -56,7 +56,7 @@ private void InitializeTarget(IsolatedHostSettings settings)
5656
IsolatedHostConstants.Rabbit => new RabbitTarget(execution.Connection!, settings.RunId, RequireExternalImage(execution), lifecycleOptions, topology, CreateClient(execution, PrimaryEndpointIndex), provider: Clock),
5757
IsolatedHostConstants.Redis => new RedisTarget(execution.Connection!, settings.RunId, RequireExternalImage(execution), lifecycleOptions, executionOptions, diagnostics, topology, [.. execution.Replicas], provider: Clock),
5858
IsolatedHostConstants.Neo4j => new Neo4jTarget(CreateClient(execution, PrimaryEndpointIndex), settings.RunId, RequireExternalImage(execution), lifecycleOptions, executionOptions, provider: Clock),
59-
IsolatedHostConstants.Mongo => new MongoTarget(execution.Connection!, settings.RunId, RequireExternalImage(execution), topology, lifecycleOptions, executionOptions, provider: Clock),
59+
IsolatedHostConstants.Mongo => new MongoTarget(execution.Connection!, execution.Endpoints, settings.RunId, RequireExternalImage(execution), topology, lifecycleOptions, executionOptions, provider: Clock),
6060
IsolatedHostConstants.OpenSearch => new OpenSearchTarget(CreateClient(execution, PrimaryEndpointIndex), settings.RunId, RequireExternalImage(execution), topology, lifecycleOptions, executionOptions, provider: Clock),
6161
IsolatedHostConstants.Kurrent => new KurrentTarget(execution.Connection!, CreateClients(execution), settings.RunId, RequireExternalImage(execution), topology, lifecycleOptions, diagnostics, provider: Clock),
6262
_ => throw new InvalidOperationException(IsolatedHostConstants.Failure)
@@ -73,10 +73,7 @@ private KeyLoadTarget CreateKeyLoad(IsolatedHostSettings settings, RuntimeIsolat
7373
const int ClientsFirstIndex = 0;
7474

7575
var clients = CreateClients(execution);
76-
return new(clients[ClientsFirstIndex], execution.AdminKey!, settings.RunId, lifecycleOptions, executionOptions, diagnostics, admissionOptions, clientOptions, translationOptions, execution.Image, clients, settings.Selection.NodeCount, provider: Clock)
77-
{
78-
RequireIsolatedAdmission = true
79-
};
76+
return new(clients[ClientsFirstIndex], execution.AdminKey!, settings.RunId, lifecycleOptions, executionOptions, diagnostics, clientOptions, translationOptions, execution.Image, clients, settings.Selection.NodeCount, provider: Clock);
8077
}
8178

8279
private QdrantTarget CreateQdrant(IsolatedHostSettings settings, RuntimeIsolatedHostSettings execution)
@@ -101,7 +98,16 @@ private HttpClient[] CreateClients(RuntimeIsolatedHostSettings execution)
10198

10299
private HttpClient CreateClient(RuntimeIsolatedHostSettings execution, int index)
103100
{
104-
var client = new HttpClient { BaseAddress = execution.Endpoints[index], Timeout = Timeout.InfiniteTimeSpan };
101+
var handler = new SocketsHttpHandler
102+
{
103+
MaxResponseHeadersLength = this.execution.Value.DocumentClientMaxResponseHeadersKilobytes
104+
};
105+
clientHandlers.Add(handler);
106+
var client = new HttpClient(handler, disposeHandler: false)
107+
{
108+
BaseAddress = execution.Endpoints[index],
109+
Timeout = Timeout.InfiniteTimeSpan
110+
};
105111
unownedClients.Add(client);
106112
if (execution.User is not null)
107113
{
@@ -134,6 +140,11 @@ public async ValueTask DisposeAsync()
134140
client.Dispose();
135141
}
136142
unownedClients.Clear();
143+
foreach (var handler in clientHandlers)
144+
{
145+
handler.Dispose();
146+
}
147+
clientHandlers.Clear();
137148
}
138149
}
139150

‎benchmarks/KeyLoad.ComparisonHost/Session/Fixtures/BenchmarkSessionFixture.cs‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ private void InitializeCore()
6767
{
6868
owner = new(ComparisonExecutionRegistration.Read(input),
6969
ComparisonExecutionRegistration.ReadDiagnostics(input),
70-
ComparisonExecutionRegistration.ReadIsolatedAdmission(input),
7170
ComparisonExecutionRegistration.ReadLifecycle(input),
7271
ComparisonExecutionRegistration.ReadClient(input),
7372
ComparisonExecutionRegistration.ReadTranslation(input), TimeProvider.System);

‎benchmarks/KeyLoad.Comparisons/Configuration/ComparisonExecutionOptions.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public sealed partial class ComparisonExecutionOptions
1010
public int DocumentVerificationConnectionReserve { get; set; } = RequiredDocumentClientConnections;
1111
/// <summary>One actual connection per independently admitted HTTP document client.</summary>
1212
public int DocumentClientMaxConnections { get; set; } = RequiredDocumentClientConnections;
13-
/// <summary>Response header bound of the document HTTP client; OpenSearch answers a synchronous update-by-query with one TASK_RESOURCE_USAGE header per scroll batch, about 230 KB for one million documents.</summary>
13+
/// <summary>Response header bound of every target and document HTTP client; OpenSearch answers a synchronous update-by-query with one TASK_RESOURCE_USAGE header per scroll batch, about 230 KB for one million documents.</summary>
1414
public int DocumentClientMaxResponseHeadersKilobytes { get; set; } = RequiredDocumentClientResponseHeadersKilobytes;
1515
/// <summary>Joined cleanup bound for a complete million-record execution document namespace.</summary>
1616
public TimeSpan DocumentCleanupTimeout { get; set; } = RequiredDocumentCleanupTimeout;

‎benchmarks/KeyLoad.Comparisons/Configuration/ComparisonLifecycleOptions.cs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public sealed class ComparisonLifecycleOptions
2121
private const int DiagnosticSeconds = 2;
2222
private const int ReceiptSeconds = 3;
2323
private const int ProbeExpiryMinutes = 2;
24-
private const int Neo4jCleanupSeconds = 15;
24+
private const int Neo4jCleanupSeconds = 600;
2525
private const int MongoCleanupSeconds = 15;
2626
private const int QdrantCleanupSeconds = 10;
2727
private const int OpenSearchCleanupSeconds = 10;

‎benchmarks/KeyLoad.Comparisons/Configuration/IsolatedKeyLoadAdmissionOptions.cs‎

Lines changed: 0 additions & 82 deletions
This file was deleted.

0 commit comments

Comments
 (0)