You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 2ff93ad
Browse filesBrowse the repository at this point in the historyBrowse files
Join native fixture ownership and port current connection lifecycle checks
Commit the complete current working-tree scope. Give the existing shared cluster native memoized async disposal and explicit port ownership, borrow OrleansNode from DI, and reuse the same real two-silo hosts from connection, persisted outcome and generic application-disposal checks. Preserve original failures, native signing/stream calls, canonical versus provider cuts, file release and cold continuations.
Validation: current product dependencies passed strict Release builds; RecoveryTests strict Release build passed with 0 warnings/errors; focused source syntax and diff checks passed. The existing real analytics process recovery case failed before its startup acknowledgement, with all child cleanup joined; startup diagnosis remains open. Full Unit/Integration/solution and distributed qualification remain pending.
# Generic application disposal after native partial startup
2
2
3
-
This native regression covers [ADR-136](../../ADR/ADR-136-native-orleans-partition-ownership.md) and the ownership contract in [StorageRecovery](../StorageRecovery.md). Existing signed connection semantics remain [ADR-125](../../ADR/ADR-125-connection-owned-execution.md); native TUnit ownership follows [ADR-117](../../ADR/ADR-117-native-tunit-ci-entry.md).
3
+
This native case covers [ADR-136](../../ADR/ADR-136-native-orleans-partition-ownership.md) and the ownership contract in [StorageRecovery](../StorageRecovery.md). Connection ownership follows [ADR-125](../../ADR/ADR-125-connection-owned-execution.md), and native TUnit ownership follows [ADR-117](../../ADR/ADR-117-native-tunit-ci-entry.md).
4
4
5
5
## Operation and independent oracles
6
6
7
-
The case calls the existing production `ServerConfiguration.BuildAsync` with the original native localhost selection and physical-owner settings. It creates no alternate host builder, provider or transport. The same native ApplicationServices observation performs the real second `node.owner.lock` acquisition after successful native storage Init. The original startup task must fail with that exact actual IOException. Before/after complete bounded canonical records, full native identity and physical position are compared inside the same original store read gate. Unexpected startup errors are preserved before proof errors; they are not replaced by a missing-observation assertion.
7
+
The case calls production `ServerConfiguration.BuildAsync` with the shared `RequestCqrsHostedProfile` and native localhost membership. One silo and one persisted copy are configured. The original arguments, native identities, physical directory and port are frozen for all applications. The native ApplicationServices participant performs a real second `node.owner.lock` acquisition after successful storage Init. The original startup task must fail with that exact IOException. Complete bounded canonical records, full storage identity and physical position are compared before and after the refusal under the same storage read gate. Unexpected startup errors remain before proof errors.
8
8
9
-
Before invalidating the provider, the test captures the actual owner, borrowed node, registry and the three actual native grain services. Two authoritative files—`identity.json` and `commands.wal`—are read with an aggregate bound derived from the original native database profile. Actual FileStream reads allocate only their bounded declared lengths, reject an additional byte, retain the original token, and record read and separate disposal failures in order. Private bytes are compared as booleans, never emitted in assertions. Disposable native tree files are not an invariant.
9
+
Before invalidating the provider, the test captures the actual physical owner, nodeand connection registry. The canonical store's `identity.json` and `commands.wal`are read with one aggregate byte bound from the actual database profile. FileStream reads allocate only their bounded declared lengths, reject an additional byte, retain the caller token, and preserve read and independent reader-disposal failures. Private bytes are compared as booleans and never emitted in assertions. Derived native tree files are not an invariant.
10
10
11
-
The only shutdown call initiating cleanup is the original `WebApplication.DisposeAsync`. There is no preceding application Stop, borrowed-node Stop, registry shutdown, producer join or fixture wrapper close. The terminal owner must perform registry → node → three native producers → physical host cleanup. The test requires its captured original Closing and node Closing to succeed, full actual `CanReleaseRoot` and joined node work, and exactly three retained original task references. Only after completed disposal does it compare these references with each actual native service's already-fenced JoinStorageProducerAsync result. It does not invoke registry methods to repair missing cleanup. Actual release is additionally tested by reacquiring the original OS node lock, with the returned handle disposed independently; both authoritative files must remain byte-identical.
11
+
The only shutdown operation initiating cleanup is the original `WebApplication.DisposeAsync`. No application Stop, node Stop, registry shutdownor storage-lifecycle call precedes it. Actual owner Closing and node Closing must succeed, native request work and the complete node lifetime must be joined, and `CanReleaseRoot` must be true. The test does not invoke registry methods to repair missing cleanup. After successful disposal and release permission, it reacquires the existing OS node lock and disposes that handle independently. Both canonical authority files must remain byte-identical.
12
12
13
-
The same original root/settings then enter the existing native multi-node fixture. Unchanged reviewed helpers perform a genuine signed ConfigureResource and Batch write, signed minimum-token read, full independent process-durable receipt, empty private CompositionReferences, exact replay and two actual same-root restarts. Full identity and whole literal document/receipt oracles repeat after both restarts. Original body, filereader, directdisposal and assertion errors retain ordering. Unknown ownership or any failure retains the directory and attaches the existing bounded failure-root evidence; no cleanup success is inferred from a faulted task.
13
+
The same original arguments and root then enter the shared native healthy-operation helper. Native ConfigureResource and Batch commands, a connection-grain CQRS minimum read and exact replay must preserve the independent complete `ProcessDurable`receipt, one persisted copy, empty private CompositionReferences, whole literal document and raw persisted StoredOutcome bytes. Replay cannot advance the canonical or physical cut. Two actual cold applications repeat full storage identity, receipt, outcome, minimum-read and release assertions. Original body, file-reader, direct-disposal and assertion errors remain observable. Any failure retains the directory and attaches its bounded root path to the original failure; a faulted cleanup task never implies release.
14
14
15
15
```mermaid
16
16
sequenceDiagram
17
17
participant App as Same production application
18
18
participant GS as Native storage Init
19
19
participant Trial as Test observation at ApplicationServices
20
20
participant Owner as Actual terminal physical owner
21
-
participant FreshCohort as Fresh same-root native cluster applications
21
+
participant Fresh as Same-root native applications
The fault occurs at stage10000 before Active20000. Native GrainService.Start/background producers have not started; the three genuine retained join results may therefore be CompletedTask for never-started producers. This case does **not** qualify LIVE producer shutdown; the distinct `PartitionStorageNativeProducerDispose*` family owns that gate. Nor does this prove native `SiloTerminated`: pinned native Silo.Dispose suppresses the Starting-state Stop refusal, unlike explicit hosted application Stop. The separate wrapper partial-start case owns its original native Stop-error oracle.
38
+
The fault occurs during ApplicationServices before Active. The case does not prove shutdown of active background stateless-worker work; the distinct `PartitionStorageNativeProducerDispose*` family owns that gate. Native silo termination is also separate from the physical-owner release permit. The explicit partial-start Stop case in [PartitionStorageNativeStartup](PartitionStorageNativeStartup.md)owns the exact native Starting-state Stop-error oracle. This case observes only the original generic disposal and its real terminal outcomes.
39
39
40
-
These are real in-process native server/physical-group operations, not Aspire Docker cluster or public SDK/official MCP qualification. Linux runtime, native OS behavior, deadline fit and the broader recovery/endurance gates are separate. Original tokens, limits, resource ownership and the existing native restart/shutdown budgets are unchanged.
40
+
This source adaptation has not yet been compiled or run. It describes native single-silo production composition and physical-file checks. Aspire cluster operations, public SDK/official MCP interoperability, abrupt process recovery, power loss, Linux runtime, native OS behavior, deadline fit and broader recovery/endurance remain independent open gates. The configured startup timing, original cancellation, resource limits and joined cleanup remain required.
Copy file name to clipboardExpand all lines: tests/KeyLoad.RecoveryTests/ClusterRouting/Fixtures/RequestExecution/Activation/RequestCqrsHostedRuntimeFixture.cs
0 commit comments