diff options
author | Martin Polden <mpolden@mpolden.no> | 2023-05-08 11:21:53 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2023-05-08 11:33:10 +0200 |
commit | 8515d43086a8ed624941773176dacf893ab797ba (patch) | |
tree | 642c108bee6a5dcad6108b9aea05b50219370c4a | |
parent | 3b4d93a502d855558ccf1225de34f6b1a2832aff (diff) |
Count sent bytes correctly for compressed requests
-rw-r--r-- | client/go/internal/vespa/document/http.go | 9 | ||||
-rw-r--r-- | client/go/internal/vespa/document/http_test.go | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/client/go/internal/vespa/document/http.go b/client/go/internal/vespa/document/http.go index 6e7c2219e8f..e9e6d36ff11 100644 --- a/client/go/internal/vespa/document/http.go +++ b/client/go/internal/vespa/document/http.go @@ -188,6 +188,7 @@ func (c *Client) createRequest(method, url string, body []byte) (*http.Request, bytes.NewReader(body), strings.NewReader(fieldsSuffix), ) + contentLength := int64(len(fieldsPrefix) + len(body) + len(fieldsSuffix)) useGzip := c.options.Compression == CompressionGzip || (c.options.Compression == CompressionAuto && len(body) > 512) if useGzip { var buf bytes.Buffer @@ -201,6 +202,7 @@ func (c *Client) createRequest(method, url string, body []byte) (*http.Request, } c.gzippers.Put(w) r = &buf + contentLength = int64(buf.Len()) } req, err := http.NewRequest(method, url, r) if err != nil { @@ -210,6 +212,7 @@ func (c *Client) createRequest(method, url string, body []byte) (*http.Request, req.Header.Set("Content-Encoding", "gzip") } req.Header.Set("Content-Type", "application/json; charset=utf-8") + req.ContentLength = contentLength return req, nil } @@ -235,7 +238,7 @@ func (c *Client) Send(document Document) Result { } defer resp.Body.Close() elapsed := c.now().Sub(start) - return c.resultWithResponse(resp, result, document, elapsed) + return c.resultWithResponse(resp, req.ContentLength, result, document, elapsed) } func resultWithErr(result Result, err error) Result { @@ -245,7 +248,7 @@ func resultWithErr(result Result, err error) Result { return result } -func (c *Client) resultWithResponse(resp *http.Response, result Result, document Document, elapsed time.Duration) Result { +func (c *Client) resultWithResponse(resp *http.Response, sentBytes int64, result Result, document Document, elapsed time.Duration) Result { result.HTTPStatus = resp.StatusCode result.Stats.Responses++ result.Stats.ResponsesByCode = map[int]int64{resp.StatusCode: 1} @@ -277,7 +280,7 @@ func (c *Client) resultWithResponse(resp *http.Response, result Result, document } result.Message = body.Message result.Trace = string(body.Trace) - result.Stats.BytesSent = int64(len(document.Fields) + len(fieldsPrefix) + len(fieldsSuffix)) + result.Stats.BytesSent = sentBytes result.Stats.BytesRecv = int64(written) if !result.Success() { result.Stats.Errors++ diff --git a/client/go/internal/vespa/document/http_test.go b/client/go/internal/vespa/document/http_test.go index da7f264e8d8..928a457568e 100644 --- a/client/go/internal/vespa/document/http_test.go +++ b/client/go/internal/vespa/document/http_test.go @@ -123,6 +123,9 @@ func TestClientSend(t *testing.T) { if !bytes.Equal(body, wantBody.Bytes()) { t.Errorf("got r.Body = %q, want %q", string(body), wantBody.String()) } + if r.ContentLength != int64(len(body)) { + t.Errorf("got r.ContentLength=%d, want %d", r.ContentLength, len(body)) + } } want := Stats{ Requests: 3, @@ -187,6 +190,9 @@ func assertCompressedRequest(t *testing.T, want bool, request *http.Request) { if err != nil { t.Fatal(err) } + if request.ContentLength != int64(len(body)) { + t.Errorf("got ContentLength=%d, want %d", request.ContentLength, len(body)) + } compressed := bytes.HasPrefix(body, []byte{0x1f, 0x8b}) if compressed != want { t.Errorf("got compressed=%t, want %t", compressed, want) |