fix: demote remote QUIC stream NO_ERROR cancels from ERR to debug - #1742
Open
vulragrag-star wants to merge 1 commit into
Open
vulragrag-star wants to merge 1 commit into
vulragrag-star wants to merge 1 commit into
Conversation
Browsers closing long-lived streams (SSE/WebSocket) surface as quic.StreamError with Remote=true and ErrorCode=0. Logging those at ERR and incrementing requestErrors created false positives in monitoring (issue cloudflare#1726). Treat them as debug and skip the error metric.
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.
Summary
Browsers that close long-lived streams (SSE / WebSocket / log follow) cause the edge to cancel the corresponding QUIC stream with error code 0 (
NO_ERROR).quic.StreamErrorwithRemote=trueandErrorCode=0then bubbled up through the proxy and was logged at ERR in two places:proxy.logRequestError— empty ERR line witherror="stream N canceled by remote with error code 0"connection.handleDataStream—Request failedat ERRThat matches the report in #1726 and creates false positives in monitoring (Datadog / Grafana / etc.). Per RFC 9113, RST_STREAM with NO_ERROR is an intentional, non-erroneous close.
Fix
connection.IsBenignRemoteStreamCancel(typederrors.Ason*quic.StreamError).requestErrorsPrometheus increment for the benign case.Real stream errors (non-zero code, or local cancel) still log at ERR and still increment the metric.
Test plan
go test ./connection/ -run TestIsBenignRemoteStreamCancelgo test ./proxy/ -run TestLogRequestErrorFixes #1726