Skip to content

Commit 66256ef

Browse files
authored
fix: potential wrong total time in trace info when the request is invalid (#1017)
1 parent 036c589 commit 66256ef

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

request.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,13 +1251,16 @@ func (r *Request) TraceInfo() TraceInfo {
12511251
RequestAttempt: r.Attempt,
12521252
}
12531253

1254-
// Calculate the total time accordingly,
1255-
// when connection is reused
1256-
if ct.gotConnInfo.Reused {
1257-
ti.TotalTime = ct.endTime.Sub(ct.getConn)
1258-
} else {
1259-
ti.TotalTime = ct.endTime.Sub(ct.dnsStart)
1254+
// Calculate the total time accordingly when connection is reused,
1255+
// and DNS start and get conn time may be zero if the request is invalid.
1256+
// See issue #1016.
1257+
requestStartTime := r.Time
1258+
if ct.gotConnInfo.Reused && !ct.getConn.IsZero() {
1259+
requestStartTime = ct.getConn
1260+
} else if !ct.dnsStart.IsZero() {
1261+
requestStartTime = ct.dnsStart
12601262
}
1263+
ti.TotalTime = ct.endTime.Sub(requestStartTime)
12611264

12621265
// Only calculate on successful connections
12631266
if !ct.connectDone.IsZero() {

request_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1830,6 +1830,18 @@ func TestTraceInfo(t *testing.T) {
18301830

18311831
})
18321832

1833+
t.Run("enable trace on invalid request, issue #1016", func(t *testing.T) {
1834+
resp, err := client.R().EnableTrace().Get("unknown://url.com")
1835+
assertNotNil(t, err)
1836+
tr := resp.Request.TraceInfo()
1837+
assertEqual(t, true, tr.DNSLookup == 0)
1838+
assertEqual(t, true, tr.ConnTime == 0)
1839+
assertEqual(t, true, tr.TLSHandshake == 0)
1840+
assertEqual(t, true, tr.ServerTime == 0)
1841+
assertEqual(t, true, tr.ResponseTime == 0)
1842+
assertEqual(t, true, tr.TotalTime > 0 && tr.TotalTime < time.Second)
1843+
})
1844+
18331845
t.Run("enable trace and debug on request", func(t *testing.T) {
18341846
c, logBuf := dcldb()
18351847
c.SetBaseURL(ts.URL)

0 commit comments

Comments
 (0)