aboutsummaryrefslogtreecommitdiff
path: root/src/net/http
diff options
context:
space:
mode:
authorMarcus Weiner <marcus.weiner@gmail.com>2022-11-09 10:37:28 +0000
committerGopher Robot <gobot@golang.org>2022-11-10 18:45:41 +0000
commit531ba0c8aae9efe25e33bf0bfa40f4941d8c5ab8 (patch)
treee431253e695778da0d91679014f71b4ea4d6f13d /src/net/http
parenteca7754148613dfbf542bbfac5392b5f0d85ea6a (diff)
downloadgo-531ba0c8aae9efe25e33bf0bfa40f4941d8c5ab8.tar.xz
net/http: build error chains in transport that can be unwrapped
In some places of the HTTP transport errors were constructed that wrapped other errors without providing the ability to call `errors.Unwrap` on them to get the underlying error. These places have been fixed to use `%w` when using `fmt.Errorf` or to implement `Unwrap() error`. Fixes #56435 Change-Id: Ieed3359281574485c8d0b18298e25e5f1e14555c GitHub-Last-Rev: 504efbc507a50bd2cf63001511733e232927089f GitHub-Pull-Request: golang/go#56451 Reviewed-on: https://go-review.googlesource.com/c/go/+/445775 Reviewed-by: Damien Neil <dneil@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Damien Neil <dneil@google.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> Run-TryBot: Damien Neil <dneil@google.com>
Diffstat (limited to 'src/net/http')
-rw-r--r--src/net/http/transport.go10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/net/http/transport.go b/src/net/http/transport.go
index 2a508ec41b..184cf27518 100644
--- a/src/net/http/transport.go
+++ b/src/net/http/transport.go
@@ -2057,7 +2057,7 @@ func (pc *persistConn) mapRoundTripError(req *transportRequest, startBytesWritte
if pc.nwrite == startBytesWritten {
return nothingWrittenError{err}
}
- return fmt.Errorf("net/http: HTTP/1.x transport connection broken: %v", err)
+ return fmt.Errorf("net/http: HTTP/1.x transport connection broken: %w", err)
}
return err
}
@@ -2264,7 +2264,7 @@ func (pc *persistConn) readLoopPeekFailLocked(peekErr error) {
// common case.
pc.closeLocked(errServerClosedIdle)
} else {
- pc.closeLocked(fmt.Errorf("readLoopPeekFailLocked: %v", peekErr))
+ pc.closeLocked(fmt.Errorf("readLoopPeekFailLocked: %w", peekErr))
}
}
@@ -2398,6 +2398,10 @@ type nothingWrittenError struct {
error
}
+func (nwe nothingWrittenError) Unwrap() error {
+ return nwe.error
+}
+
func (pc *persistConn) writeLoop() {
defer close(pc.writeLoopDone)
for {
@@ -2635,7 +2639,7 @@ func (pc *persistConn) roundTrip(req *transportRequest) (resp *Response, err err
req.logf("writeErrCh resv: %T/%#v", err, err)
}
if err != nil {
- pc.close(fmt.Errorf("write error: %v", err))
+ pc.close(fmt.Errorf("write error: %w", err))
return nil, pc.mapRoundTripError(req, startBytesWritten, err)
}
if d := pc.t.ResponseHeaderTimeout; d > 0 {