diff --git a/quic/interop/src/main/kotlin/com/vitorpamplona/quic/interop/runner/InteropClient.kt b/quic/interop/src/main/kotlin/com/vitorpamplona/quic/interop/runner/InteropClient.kt index fe8a68137..12ed601d6 100644 --- a/quic/interop/src/main/kotlin/com/vitorpamplona/quic/interop/runner/InteropClient.kt +++ b/quic/interop/src/main/kotlin/com/vitorpamplona/quic/interop/runner/InteropClient.kt @@ -198,7 +198,21 @@ fun main() { initialVersion = initialVersion, keyLogPath = keyLogPath, qlogDir = qlogDir, - parallel = (testcase == "multiplexing"), + // The runner reuses TESTCASE_CLIENT=transfer for the + // multiplexing testcase — discrimination is by URL + // count, not testcase name. We were checking + // testcase == "multiplexing" which is NEVER true + // (we'd see TESTCASE=multiplexing only on a + // hypothetical client where the runner explicitly + // sets it). Symptom: 60s timeout with 1421/2000 + // files at 1 stream / RTT — exactly the serial + // client.get(...) path. Confirmed via the boot log: + // [boot] TESTCASE=transfer; transfer mode: + // parallel=false urls=1999 + // + // Cheap whitespace tokenization here just counts; + // runTransferTest re-parses into URI[] inside. + parallel = requests.split(Regex("\\s+")).count { it.isNotBlank() } > 1, ) } diff --git a/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/WriterDebug.kt b/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/WriterDebug.kt index 0fbd586f2..7b5d0facf 100644 --- a/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/WriterDebug.kt +++ b/quic/src/commonMain/kotlin/com/vitorpamplona/quic/connection/WriterDebug.kt @@ -39,4 +39,4 @@ var writerDebugEnabled: Boolean = false * docker layer cache didn't serve a stale jar). Bump when adding new * trace lines to make them traceable from the wire run. */ -const val WRITER_DEBUG_BUILD_ID: String = "2026-05-07-parallel-branch-v1" +const val WRITER_DEBUG_BUILD_ID: String = "2026-05-07-fix-parallel-detection-v1"