From eaa53f2533808523570ee78abe9f9baa1aa8ed6b Mon Sep 17 00:00:00 2001 From: Ulric Qin Date: Fri, 8 Jul 2022 11:48:44 +0800 Subject: [PATCH] check duplicate label key --- src/server/router/router_prom.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/server/router/router_prom.go b/src/server/router/router_prom.go index c8f3a4e9..ff5ecdc6 100644 --- a/src/server/router/router_prom.go +++ b/src/server/router/router_prom.go @@ -52,6 +52,24 @@ func queryPromql(c *gin.Context) { c.JSON(200, conv.ConvertVectors(value)) } +func duplicateLabelKey(series *prompb.TimeSeries) bool { + if series == nil { + return false + } + + labelKeys := make(map[string]struct{}) + + for j := 0; j < len(series.Labels); j++ { + if _, has := labelKeys[series.Labels[j].Name]; has { + return true + } else { + labelKeys[series.Labels[j].Name] = struct{}{} + } + } + + return false +} + func remoteWrite(c *gin.Context) { req, err := DecodeWriteRequest(c.Request.Body) if err != nil { @@ -74,6 +92,10 @@ func remoteWrite(c *gin.Context) { ) for i := 0; i < count; i++ { + if duplicateLabelKey(req.Timeseries[i]) { + continue + } + ident = "" // find ident label