From 7bf37de72beb1a92f799dab93e6268f8325fbbc8 Mon Sep 17 00:00:00 2001 From: dmitryk-dk Date: Thu, 24 Oct 2024 14:52:38 +0200 Subject: [PATCH] issue-91: fix comments, simplify code a bit. --- pkg/plugin/response.go | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/pkg/plugin/response.go b/pkg/plugin/response.go index 6c6e214..1c4b1ac 100644 --- a/pkg/plugin/response.go +++ b/pkg/plugin/response.go @@ -42,23 +42,25 @@ func parseStreamResponse(reader io.Reader) backend.DataResponse { lineField := data.NewFieldFromFieldType(data.FieldTypeString, 0) lineField.Name = gLineField - sc := bufio.NewReader(reader) + // aligns with -insert.maxLineSizeBytes + br := bufio.NewReaderSize(reader, 256*1024) + var parser fastjson.Parser + var finishedReading bool - finishedReading := false - n := -1 - for !finishedReading { + for n := 0; !finishedReading; n++ { n++ - b, err := sc.ReadBytes('\n') + b, err := br.ReadBytes('\n') if err != nil { - if !errors.Is(err, io.EOF) && !errors.Is(err, bufio.ErrBufferFull) { - return newResponseError(fmt.Errorf("cannot read line in response: %s", err), backend.StatusInternal) - } if errors.Is(err, bufio.ErrBufferFull) { - // Skip the line if it's too long. backend.Logger.Info("skipping line number #%d: line too long", n) continue } - finishedReading = true + if errors.Is(err, io.EOF) { + // b can be != nil when EOF is returned, so we need to process it + finishedReading = true + } else { + return newResponseError(fmt.Errorf("cannot read line in response: %s", err), backend.StatusInternal) + } } if len(b) == 0 { @@ -66,7 +68,7 @@ func parseStreamResponse(reader io.Reader) backend.DataResponse { } b = bytes.Trim(b, "\n") - value, err := fastjson.ParseBytes(b) + value, err := parser.ParseBytes(b) if err != nil { return newResponseError(fmt.Errorf("error decode response: %s", err), backend.StatusInternal) }