From 18fa83ebfa19e1dce2a7f3ed4feeb88d2545d564 Mon Sep 17 00:00:00 2001 From: nityanandagohain Date: Tue, 1 Jul 2025 20:19:22 +0530 Subject: [PATCH] fix: data race while getting cached series --- .../querycache/query_range_cache.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/pkg/query-service/querycache/query_range_cache.go b/pkg/query-service/querycache/query_range_cache.go index 2fdaf3952c4a..7880ce1ed8c1 100644 --- a/pkg/query-service/querycache/query_range_cache.go +++ b/pkg/query-service/querycache/query_range_cache.go @@ -236,7 +236,14 @@ func (q *queryCache) FindMissingTimeRanges(orgID valuer.UUID, start, end, step i func (q *queryCache) getCachedSeriesData(orgID valuer.UUID, cacheKey string) []*CachedSeriesData { cacheableSeriesData := new(CacheableSeriesData) - err := q.cache.Get(context.TODO(), orgID, cacheKey, cacheableSeriesData, true) + tmpcacheableSeriesData := new(CacheableSeriesData) + err := q.cache.Get(context.TODO(), orgID, cacheKey, tmpcacheableSeriesData, true) + data, err := tmpcacheableSeriesData.MarshalBinary() + if err != nil { + zap.L().Error("error marshalling cacheable series data", zap.Error(err)) + } + cacheableSeriesData.UnmarshalBinary(data) + if err != nil && !errors.Ast(err, errors.TypeNotFound) { return nil } @@ -300,11 +307,18 @@ func (q *queryCache) MergeWithCachedSeriesDataV2(orgID valuer.UUID, cacheKey str return newData } + tmpcacheableSeriesData := new(CacheableSeriesData) cacheableSeriesData := new(CacheableSeriesData) - err := q.cache.Get(context.TODO(), orgID, cacheKey, cacheableSeriesData, true) + err := q.cache.Get(context.TODO(), orgID, cacheKey, tmpcacheableSeriesData, true) if err != nil && !errors.Ast(err, errors.TypeNotFound) { return nil } + data, err := tmpcacheableSeriesData.MarshalBinary() + if err != nil { + zap.L().Error("error marshalling cacheable series data", zap.Error(err)) + } + cacheableSeriesData.UnmarshalBinary(data) + allData := append(cacheableSeriesData.Series, newData...) sort.Slice(allData, func(i, j int) bool {