summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-04-27 09:09:22 +0200
committerMartin Polden <mpolden@mpolden.no>2023-04-27 09:51:49 +0200
commitb8c6598b34646bc08fd97ffa2df036ed74e22c8a (patch)
tree5be74dc16725471168fd23685bb9f921da30fad8 /client
parent8859e32474d22c9295cccd5c1f4b851519b9f42d (diff)
Reduce allocations when creating result
Diffstat (limited to 'client')
-rw-r--r--client/go/internal/vespa/document/http.go25
1 files changed, 9 insertions, 16 deletions
diff --git a/client/go/internal/vespa/document/http.go b/client/go/internal/vespa/document/http.go
index 8bc9499df87..98f5795f653 100644
--- a/client/go/internal/vespa/document/http.go
+++ b/client/go/internal/vespa/document/http.go
@@ -57,17 +57,6 @@ func (c *countingHTTPClient) Do(req *http.Request, timeout time.Duration) (*http
return c.client.Do(req, timeout)
}
-type countingReader struct {
- reader io.Reader
- bytesRead int64
-}
-
-func (r *countingReader) Read(p []byte) (int, error) {
- n, err := r.reader.Read(p)
- r.bytesRead += int64(n)
- return n, err
-}
-
func NewClient(options ClientOptions, httpClients []util.HTTPClient) *Client {
if len(httpClients) < 1 {
panic("need at least one HTTP client")
@@ -246,16 +235,20 @@ func resultWithResponse(resp *http.Response, result Result, document Document, e
Message string `json:"message"`
Trace json.RawMessage `json:"trace"`
}
- cr := countingReader{reader: resp.Body}
- jsonDec := json.NewDecoder(&cr)
- if err := jsonDec.Decode(&body); err != nil {
+ b, err := io.ReadAll(resp.Body)
+ if err != nil {
result.Status = StatusVespaFailure
- result.Err = fmt.Errorf("failed to decode json response: %w", err)
+ result.Err = err
+ } else {
+ if err := json.Unmarshal(b, &body); err != nil {
+ result.Status = StatusVespaFailure
+ result.Err = fmt.Errorf("failed to decode json response: %w", err)
+ }
}
result.Message = body.Message
result.Trace = string(body.Trace)
result.Stats.BytesSent = int64(len(document.Body))
- result.Stats.BytesRecv = cr.bytesRead
+ result.Stats.BytesRecv = int64(len(b))
if !result.Success() {
result.Stats.Errors++
}