From a46314102854315dcc699f8a30a1c31753a1bdf9 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Thu, 6 Aug 2026 04:23:51 -0400 Subject: [PATCH] =?UTF-8?q?test(mesh):=20stampede=20callers=20on=20dedicat?= =?UTF-8?q?ed=20threads=20=E2=80=94=20arrival=20gate=20must=20not=20depend?= =?UTF-8?q?=20on=20thread-pool=20injection?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Communication/MeshPskProviderTests.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests/Communication/MeshPskProviderTests.cs b/tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests/Communication/MeshPskProviderTests.cs index 71b7f887..b87daa32 100644 --- a/tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests/Communication/MeshPskProviderTests.cs +++ b/tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests/Communication/MeshPskProviderTests.cs @@ -296,13 +296,16 @@ public sealed class MeshPskProviderTests var resolver = new FakeSecretResolver { Value = "stored-psk", ResolveDelay = TimeSpan.FromMilliseconds(50) }; var provider = CreateProvider(resolver); - var callers = Enumerable.Range(0, Callers).Select(_ => Task.Run(() => + // LongRunning gives each caller a dedicated thread: reaching the arrival gate must not + // depend on thread-pool injection, which is rate-limited and made this flake on a + // contended box (the gate timed out before all 16 pool threads existed). + var callers = Enumerable.Range(0, Callers).Select(_ => Task.Factory.StartNew(() => { arrived.Signal(); start.Wait(); provider.TryGetPsk("SITE-A", out var psk).ShouldBeTrue(); return psk; - })).ToArray(); + }, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default)).ToArray(); arrived.Wait(TimeSpan.FromSeconds(10)).ShouldBeTrue("all callers should reach the start gate"); start.Set();