summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-05-25 19:16:38 +0200
committerMartin Polden <mpolden@mpolden.no>2023-05-25 19:16:38 +0200
commitee148dc3631c5cc2fc9843f067f790d7dda817e1 (patch)
treed90007bde44079801e1200593bbab6fb1a2590a4 /client
parentf47c3e5dee29529ec06254c76f1e9154eb1dc08b (diff)
Only parse JSON body if trace level is set
Diffstat (limited to 'client')
-rw-r--r--client/go/internal/vespa/document/http.go27
-rw-r--r--client/go/internal/vespa/document/http_test.go5
-rw-r--r--client/go/internal/vespa/document/stats.go1
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