diff options
author | Martin Polden <mpolden@mpolden.no> | 2023-05-05 11:22:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-05 11:22:24 +0200 |
commit | e0ed2a2f68f470a4348b6ee19c77b4d22eded8de (patch) | |
tree | 0906faa6e6e92527b67080158d4db48842263419 | |
parent | e6772475918985ce58313567854e0c67c19ffc59 (diff) | |
parent | b8bc7ce745af0cac2a0c6a742f3eb1bf03728813 (diff) |
Merge pull request #26988 from vespa-engine/mpolden/increase-buf-size
Increase buffer size of document decoder
-rw-r--r-- | client/go/internal/vespa/document/document.go | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/client/go/internal/vespa/document/document.go b/client/go/internal/vespa/document/document.go index 15cd8c43de5..8bc897d49b3 100644 --- a/client/go/internal/vespa/document/document.go +++ b/client/go/internal/vespa/document/document.go @@ -159,22 +159,25 @@ func (d *Decoder) guessMode() error { if err := d.buf.UnreadByte(); err != nil { return err } - if d.array { - // prepare for decoding objects inside array - if _, err := d.dec.Token(); err != nil { - return err - } + if err := d.readArrayToken(true); err != nil { + return err } } return nil } -func (d *Decoder) readCloseToken() error { +func (d *Decoder) readArrayToken(open bool) error { if !d.array { return nil } - _, err := d.dec.Token() - return err + t, err := d.dec.Token() + if err != nil { + return err + } + if (open && t == json.Delim('[')) || (!open && t == json.Delim(']')) { + return nil + } + return fmt.Errorf("invalid array token: %q", t) } func (d *Decoder) Decode() (Document, error) { @@ -190,11 +193,10 @@ func (d *Decoder) decode() (Document, error) { return Document{}, err } if !d.dec.More() { - err := io.EOF - if tokenErr := d.readCloseToken(); tokenErr != nil { - err = tokenErr + if err := d.readArrayToken(false); err != nil { + return Document{}, err } - return Document{}, err + return Document{}, io.EOF } doc := jsonDocument{} if err := d.dec.Decode(&doc); err != nil { @@ -204,7 +206,7 @@ func (d *Decoder) decode() (Document, error) { } func NewDecoder(r io.Reader) *Decoder { - buf := bufio.NewReader(r) + buf := bufio.NewReaderSize(r, 1<<26) return &Decoder{ buf: buf, dec: json.NewDecoder(buf), |