diff options
author | Martin Polden <mpolden@mpolden.no> | 2023-05-25 19:16:38 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2023-05-25 19:16:38 +0200 |
commit | ee148dc3631c5cc2fc9843f067f790d7dda817e1 (patch) | |
tree | d90007bde44079801e1200593bbab6fb1a2590a4 /client | |
parent | f47c3e5dee29529ec06254c76f1e9154eb1dc08b (diff) |
Only parse JSON body if trace level is set
Diffstat (limited to 'client')
-rw-r--r-- | client/go/internal/vespa/document/http.go | 27 | ||||
-rw-r--r-- | client/go/internal/vespa/document/http_test.go | 5 | ||||
-rw-r--r-- | client/go/internal/vespa/document/stats.go | 1 |
3 files changed, 14 insertions, 19 deletions
diff --git a/client/go/internal/vespa/document/http.go b/client/go/internal/vespa/document/http.go index 277ef50ab33..28e3c225e34 100644 --- a/client/go/internal/vespa/document/http.go +++ b/client/go/internal/vespa/document/http.go @@ -291,7 +291,7 @@ func (c *Client) Send(document Document) Result { } defer resp.Body.Close() elapsed := c.now().Sub(start) - return resultWithResponse(resp, bodySize, result, elapsed, buf, true) + return c.resultWithResponse(resp, bodySize, result, elapsed) } // Get retrieves document with given ID.nnnnnn @@ -312,7 +312,7 @@ func (c *Client) Get(id Id) Result { } defer resp.Body.Close() elapsed := c.now().Sub(start) - return resultWithResponse(resp, 0, result, elapsed, buf, false) + return c.resultWithResponse(resp, 0, result, elapsed) } func resultWithErr(result Result, err error) Result { @@ -321,7 +321,7 @@ func resultWithErr(result Result, err error) Result { return result } -func resultWithResponse(resp *http.Response, sentBytes int, result Result, elapsed time.Duration, buf *bytes.Buffer, parseBody bool) Result { +func (c *Client) resultWithResponse(resp *http.Response, sentBytes int, result Result, elapsed time.Duration) Result { result.HTTPStatus = resp.StatusCode switch resp.StatusCode { case 200: @@ -333,29 +333,24 @@ func resultWithResponse(resp *http.Response, sentBytes int, result Result, elaps default: result.Status = StatusTransportFailure } - buf.Reset() - written, err := io.Copy(buf, resp.Body) + b, err := io.ReadAll(resp.Body) if err != nil { result = resultWithErr(result, err) } else { - if resp.StatusCode == 200 && parseBody { - var body struct { - Message string `json:"message"` - Trace json.RawValue `json:"trace"` + result.Body = b + if result.HTTPStatus == 200 && c.options.TraceLevel > 0 { + var jsonResponse struct { + Trace json.RawValue `json:"trace"` } - if err := json.Unmarshal(buf.Bytes(), &body); err != nil { + if err := json.Unmarshal(b, &jsonResponse); err != nil { result = resultWithErr(result, fmt.Errorf("failed to decode json response: %w", err)) } else { - result.Message = body.Message - result.Trace = string(body.Trace) + result.Trace = string(jsonResponse.Trace) } - } else { - result.Body = make([]byte, buf.Len()) - copy(result.Body, buf.Bytes()) } } result.Latency = elapsed result.BytesSent = int64(sentBytes) - result.BytesRecv = int64(written) + result.BytesRecv = int64(len(b)) return result } diff --git a/client/go/internal/vespa/document/http_test.go b/client/go/internal/vespa/document/http_test.go index 2382e5f07cb..f8871cb0905 100644 --- a/client/go/internal/vespa/document/http_test.go +++ b/client/go/internal/vespa/document/http_test.go @@ -89,10 +89,11 @@ func TestClientSend(t *testing.T) { Latency: time.Second, } if i < 3 { - httpClient.NextResponseString(200, `{"message":"All good!"}`) + msg := `{"message":"All good!"}` + httpClient.NextResponseString(200, msg) wantRes.Status = StatusSuccess wantRes.HTTPStatus = 200 - wantRes.Message = "All good!" + wantRes.Body = []byte(msg) wantRes.BytesRecv = 23 } else { errMsg := `something went wront` diff --git a/client/go/internal/vespa/document/stats.go b/client/go/internal/vespa/document/stats.go index e1b5520a779..3e647d0f893 100644 --- a/client/go/internal/vespa/document/stats.go +++ b/client/go/internal/vespa/document/stats.go @@ -24,7 +24,6 @@ const ( type Result struct { Err error Id Id - Message string Trace string Body []byte Status Status |