aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-05-05 11:22:24 +0200
committerGitHub <noreply@github.com>2023-05-05 11:22:24 +0200
commite0ed2a2f68f470a4348b6ee19c77b4d22eded8de (patch)
tree0906faa6e6e92527b67080158d4db48842263419
parente6772475918985ce58313567854e0c67c19ffc59 (diff)
parentb8bc7ce745af0cac2a0c6a742f3eb1bf03728813 (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.go28
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),