Repository navigation
fix(streamer): carry stop causes and transport state into stream failure reports - #1110
Merged
Merged
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This adds diagnostics only, so stream behaviour is unchanged. Five OpenNOW Reports issues from nightly 866 were triaged as "needs info" because the logs couldn't separate the possible causes. This PR records the missing evidence and carries it into the messages the shell already reports. All error codes stay the same, so the reports backend keeps grouping these issues as it does now.
What the current logs show
nvst_recovery_exhausted(iss_01M44ECWXPR3YJERYFSND0VGYC, 7 players). Ingress stopped at the socket on both legs.inbound=47836and bundleinbound=32010don't change between …964 and …974. Bundle outbound stops too, while hole-punch pings keep rising. br-1597E8 and br-84511F show the same pattern.input-unavailableis logged about 2.1 s after the last video packet, but its reason is dropped. Channel closes and bundle state aren't logged at all.nvst_transport_stopped(iss_01M44QKTG063187MRM5M1PZWTA). All 23 workerreceiver.stop()sites end in the sameLifecycle(Stopped)event. Most of them onlyeprintlntheir error, so it never reaches the file log. In br-A40C8D,input-unavailableand the stop share a millisecond, with nonvst-udperror.webrtc_signaling_failed(iss_01M45GXWMC45NWQW2KXJKN7D9H). "Signaling connection closed" comes from a catch-allErr(_)branch that discards the tungstenite error.media_consumer_closed(iss_01M44GPF7EM3P8MXZ6B7ZPTSXY). Amedia-decode-errorcomes about 600 ms before the closure. The core reporter sends only one report per kind and code per run, so the decoder error's text never reached any report.Change
Typed stop cause (
NvstStopCause). Every stop site now passes a cause: requested, controller closed, upstream gate closed, media consumer closed, input delivery failed, HID output blocked, randomness unavailable,Socket{operation, kind, os_code}, orWebRtc{operation, category}. The terminal message becomes, for example,NVST receiver stopped unexpectedly (cause=socket operation=bundle-receive kind=ConnectionReset os_code=10054), and the code staysnvst-transport-stopped.Input-unavailable reason. It is now logged. The reason is restricted to compile-time
&'static strreasons, so nothing else can reach that line.Bundle liveness (
BundleLiveness). It tracks idle ages for any inbound datagram, peer inbound, outbound transmit and SCTP data, plus the last ICE state, the ICMP-unreachable count and the closed-channel count. It is logged:The video
media-timeoutline gainsrx_idle_msandport_unreachable.peer_rx_idle_ms≈0at channel close means the server closed SCTP, and ≈2000+ means a local teardown after silence.now.Signaling failures now append the I/O kind and OS code, the tungstenite protocol variant, the HTTP status or
tls, the peer close code, or peerRemoved/BYE. Server close-reason text, URLs and addresses are never included.Media consumer closed. The core remembers the last video decoder error, capped at 240 characters. It appends it as
…closed after H264 decoder error: <msg>.Docs.
docs/streamer-comparison/windows-udp-diagnostics.mddocuments every new field.Verification
cargo test --workspace(native/opennow-streamer): 1048 passed.cargo fmt --all --checkand clippy on the transport and core crates: clean.nvst-transport-stopped;Not covered
webrtc_disconnected(iss_01M44EWWTKKDDJ1W1CN667KFVC): fix(streaming): complete WebRTC startup and default alliance accounts to compatibility mode #1098 already logs ICE, DTLS and traffic stages, and these reports predate it. The next nightly should produce a report with that evidence.(cause=…).