From 6b12511c79c5aac5a9b8a46c537aee405b466177 Mon Sep 17 00:00:00 2001 From: maxdml Date: Thu, 16 Jul 2026 12:16:02 -0700 Subject: [PATCH] Run ChaosTest's blocked startWorkflow off the common ForkJoinPool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit toxiProxyTest launched dbLossBetweenSteps via a bare CompletableFuture.supplyAsync, so the worker sat blocked in dbRetry for the whole 3s induced network partition. On small CI runners this stalled the entire common pool, starving concurrently running ConductorTests whose WebSocket callbacks dispatch there — causing flaky "message latch timed out" failures. Use a dedicated thread instead. --- .../src/test/java/dev/dbos/transact/database/ChaosTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/transact/src/test/java/dev/dbos/transact/database/ChaosTest.java b/transact/src/test/java/dev/dbos/transact/database/ChaosTest.java index 467e9651..623ade46 100644 --- a/transact/src/test/java/dev/dbos/transact/database/ChaosTest.java +++ b/transact/src/test/java/dev/dbos/transact/database/ChaosTest.java @@ -190,9 +190,12 @@ public void toxiProxyTest() throws Exception { // Scenario 1: proxy disabled — simulates a sustained network partition proxy.disable(); + // Dedicated thread: this blocks in dbRetry while the proxy is down, and must + // not pin a common ForkJoinPool worker (starves unrelated tests' callbacks). var wf1 = CompletableFuture.supplyAsync( - () -> dbos.startWorkflow(() -> svc.dbLossBetweenSteps())); + () -> dbos.startWorkflow(() -> svc.dbLossBetweenSteps()), + r -> new Thread(r, "chaos-wf1").start()); Thread.sleep(3000); proxy.enable(); assertEquals("Hehehe", wf1.get(10, TimeUnit.SECONDS).getResult());