diag(quic-interop): log TESTCASE + parallel branch entry

Hypothesis: the [interop] / [batch] logs are missing because we're
hitting the SERIAL branch (parallel=false), not the parallel one —
which would explain perfectly the writer trace pattern:
  - streamsView grows by 1 every 2-3 drains
  - active stays at 6 or 7 (3 H3 init + at most 4 chunk streams)
  - one stream per RTT cadence on the wire

That's exactly what client.get(authority, path) looks like in
sequence. parallel=true would call prepareRequests for chunks of 64.

Two new unconditional log lines (low-volume, control-flow only,
NOT in hot paths):

  1. [boot] now includes TESTCASE and ROLE — to verify the runner
     is sending TESTCASE=multiplexing as expected
  2. [boot] transfer mode: parallel=BOOL urls=N — confirms which
     branch we took

If parallel=false despite TESTCASE=multiplexing, the bug is in our
testcase-to-parallel mapping (line 192 of InteropClient.kt).

If parallel=true but [interop]/[batch] still missing, the bug is
elsewhere.
This commit is contained in:
Claude
2026-05-07 14:19:08 +00:00
parent f13d1ae1eb
commit a9dc927cc6
2 changed files with 8 additions and 2 deletions
@@ -90,7 +90,9 @@ fun main() {
com.vitorpamplona.quic.connection.writerDebugEnabled = true
System.err.println(
"[boot] DEBUG=1; writerDebugEnabled=true; build_id=" +
"${com.vitorpamplona.quic.connection.WRITER_DEBUG_BUILD_ID}",
"${com.vitorpamplona.quic.connection.WRITER_DEBUG_BUILD_ID}; " +
"TESTCASE=${System.getenv("TESTCASE") ?: "(unset)"}; " +
"ROLE=${System.getenv("ROLE") ?: "(unset)"}",
)
} else {
System.err.println("[boot] DEBUG=${debugEnv ?: "(unset)"} writerDebugEnabled=false")
@@ -320,6 +322,10 @@ private fun runTransferTest(
}
val authority = if (port == 443) host else "$host:$port"
// Unconditional one-shot log so we can confirm which branch
// runs even when DEBUG=0 — this is a control-flow boundary,
// not a hot-path trace.
System.err.println("[boot] transfer mode: parallel=$parallel urls=${urls.size}")
val outcome =
withTimeoutOrNull(TRANSFER_TIMEOUT_SEC * 1_000L) {
val responses =
@@ -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-batch-log-v1"
const val WRITER_DEBUG_BUILD_ID: String = "2026-05-07-parallel-branch-v1"