From 62bedf1372fdbff0e0566a6974b6b9ce1854fa0a Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 4 May 2026 14:05:03 +0000 Subject: [PATCH] =?UTF-8?q?debug(nests):=20log=20QUIC=E2=86=94moq=20seam?= =?UTF-8?q?=20in=20pumpUniStreams=20+=20pumpInboundBidis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Splits the diagnosis into "QUIC delivered streams" vs "moq routed them". Without this seam log, a silent NestRx trace after SUBSCRIBE_OK gives no signal whether the relay is forwarding (and :quic isn't delivering streams to the moq pump) or moq is dropping frames. Also surfaces the prior `_: Throwable` swallow in both pumps — those hid transport-close exceptions which are exactly the kind of clue we want when the listener silently stalls. https://claude.ai/code/session_01PYYez8a6sjiakyjAxsfCEQ --- .../nestsclient/moq/lite/MoqLiteSession.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/nestsClient/src/commonMain/kotlin/com/vitorpamplona/nestsclient/moq/lite/MoqLiteSession.kt b/nestsClient/src/commonMain/kotlin/com/vitorpamplona/nestsclient/moq/lite/MoqLiteSession.kt index 23b023581..5979f190a 100644 --- a/nestsClient/src/commonMain/kotlin/com/vitorpamplona/nestsclient/moq/lite/MoqLiteSession.kt +++ b/nestsClient/src/commonMain/kotlin/com/vitorpamplona/nestsclient/moq/lite/MoqLiteSession.kt @@ -444,13 +444,17 @@ class MoqLiteSession internal constructor( // sibling on the outer [scope] until the transport's flow // independently errors out. kotlinx.coroutines.coroutineScope { + var seen = 0L transport.incomingUniStreams().collect { stream -> + val n = ++seen + Log.d("NestRx") { "transport delivered uni stream #$n (QUIC→moq seam)" } launch { drainOneGroup(stream) } } } } catch (ce: CancellationException) { throw ce - } catch (_: Throwable) { + } catch (t: Throwable) { + Log.w("NestRx") { "pumpUniStreams ended with ${t::class.simpleName}: ${t.message}" } // Transport closed — subscriptions will surface end-of-flow // via their own bidi pumps as well. } @@ -574,13 +578,17 @@ class MoqLiteSession internal constructor( // [pumpUniStreams]'s identical comment) so they don't outlive // bidiPump.cancelAndJoin() in [close]. kotlinx.coroutines.coroutineScope { + var seen = 0L transport.incomingBidiStreams().collect { bidi -> + val n = ++seen + Log.d("NestTx") { "transport delivered inbound bidi #$n (QUIC→moq seam)" } launch { handleInboundBidi(bidi) } } } } catch (ce: CancellationException) { throw ce - } catch (_: Throwable) { + } catch (t: Throwable) { + Log.w("NestTx") { "pumpInboundBidis ended with ${t::class.simpleName}: ${t.message}" } // Transport closed. } }