test(historian): bounded-wait durability read; honest nondeterminism notes on the #491 controls
This commit is contained in:
+21
@@ -353,6 +353,18 @@ public sealed class ContinuousHistorizationRecorderTests : TestKit
|
||||
/// The yield is the whole point: every other test here uses an outbox that returns
|
||||
/// <c>ValueTask.CompletedTask</c>, so the continuation runs inline with the context still
|
||||
/// installed and the defect is invisible. The production FasterLog outbox fsyncs per entry.
|
||||
/// The outbox double must therefore complete on a POOL thread
|
||||
/// (<c>Task.Delay(1).ConfigureAwait(false)</c>); a bare <c>Task.Yield()</c> posts back to the
|
||||
/// CAPTURED ActorTaskScheduler context and is just as vacuous as completing synchronously.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// ⚠️ The falsification control is NONDETERMINISTIC UNDER LOAD. Re-introducing the defect is
|
||||
/// only observable when the thread that resumes the continuation happens to carry no Akka
|
||||
/// actor cell in its ThreadStatic slot; on a loaded parallel test sweep the resuming pool
|
||||
/// thread can already be servicing this ActorSystem, the <c>Self</c> read succeeds, and the
|
||||
/// mutation passes. So a SINGLE green run of the intended-red mutation is not proof this
|
||||
/// regression is caught — re-run the mutation several times, ideally on an otherwise idle
|
||||
/// machine, before concluding the test is falsifiable.
|
||||
/// </para>
|
||||
/// </summary>
|
||||
[Fact]
|
||||
@@ -931,6 +943,15 @@ public sealed class ContinuousHistorizationRecorderTests : TestKit
|
||||
/// <c>Task.Yield()</c>, which posts back to the CAPTURED ActorTaskScheduler context — leaves the
|
||||
/// context installed and the defect invisible.
|
||||
/// </para>
|
||||
/// <para>
|
||||
/// ⚠️ The falsification control is NONDETERMINISTIC UNDER LOAD. Re-introducing the defect is
|
||||
/// only observable when the thread that resumes the continuation happens to carry no Akka
|
||||
/// actor cell in its ThreadStatic slot; on a loaded parallel test sweep the resuming pool
|
||||
/// thread can already be servicing this ActorSystem, the <c>Self</c> read succeeds, and the
|
||||
/// mutation passes. So a SINGLE green run of the intended-red mutation is not proof this
|
||||
/// regression is caught — re-run the mutation several times, ideally on an otherwise idle
|
||||
/// machine, before concluding the test is falsifiable.
|
||||
/// </para>
|
||||
/// </remarks>
|
||||
[Fact]
|
||||
public async Task A_yielding_batch_append_neither_faults_the_actor_nor_loses_values()
|
||||
|
||||
Reference in New Issue
Block a user