debug(nests): log QUIC↔moq seam in pumpUniStreams + pumpInboundBidis

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
This commit is contained in:
Claude
2026-05-04 14:05:03 +00:00
parent 726894362f
commit 62bedf1372
@@ -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.
}
}