[v10.3.x] Loki: Fix bug duplicating parsed labels across multiple log lines (#80423)

Loki: Fix bug duplicating parsed labels across multiple log lines (#80292)

(cherry picked from commit e1aa8a95d9)

Co-authored-by: Sven Grossmann <sven.grossmann@grafana.com>
This commit is contained in:
grafana-delivery-bot[bot]
2024-01-12 12:19:24 +02:00
committed by GitHub
co-authored by Sven Grossmann
parent aa03b8f8a7
commit be211fbccb
10 changed files with 1808 additions and 7 deletions
+9 -7
View File
@@ -965,7 +965,7 @@ func readCategorizedStream(iter *jsonitere.Iterator) backend.DataResponse {
tsField := data.NewFieldFromFieldType(data.FieldTypeString, 0)
tsField.Name = "TS"
labels := data.Labels{}
indexedLabels := data.Labels{}
for more, err := iter.ReadArray(); more; more, err = iter.ReadArray() {
if err != nil {
@@ -981,8 +981,8 @@ func readCategorizedStream(iter *jsonitere.Iterator) backend.DataResponse {
case "stream":
// we need to clear `labels`, because `iter.ReadVal`
// only appends to it
labels = data.Labels{}
if err = iter.ReadVal(&labels); err != nil {
indexedLabels = data.Labels{}
if err = iter.ReadVal(&indexedLabels); err != nil {
return rspErr(err)
}
@@ -1030,23 +1030,25 @@ func readCategorizedStream(iter *jsonitere.Iterator) backend.DataResponse {
}
typeMap := data.Labels{}
clonedLabels := data.Labels{}
for k := range labels {
for k := range indexedLabels {
typeMap[k] = "I"
clonedLabels[k] = indexedLabels[k]
}
// merge all labels (indexed, parsed, structuredMetadata) into one dataframe field
for k, v := range structuredMetadataMap {
labels[k] = fmt.Sprintf("%s", v)
clonedLabels[k] = fmt.Sprintf("%s", v)
typeMap[k] = "S"
}
for k, v := range parsedLabelsMap {
labels[k] = fmt.Sprintf("%s", v)
clonedLabels[k] = fmt.Sprintf("%s", v)
typeMap[k] = "P"
}
labelJson, err := labelsToRawJson(labels)
labelJson, err := labelsToRawJson(clonedLabels)
if err != nil {
return rspErr(err)
}