Skip to content
This repository was archived by the owner on Aug 23, 2023. It is now read-only.

Commit 79d81bd

Browse files
committed
copy tags as well
1 parent 653c0ba commit 79d81bd

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

expr/func_aspercent.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func (s *FuncAsPercent) Exec(cache map[Req][]models.Series) ([]models.Series, er
9595

9696
for _, serie1 := range metaSeries[key] {
9797
// no total
98-
copyDatapoints(&serie1)
98+
deepCopySerieElements(&serie1)
9999
if _, ok := totalSeries[key]; !ok {
100100
serie1.QueryPatt = fmt.Sprintf("asPercent(%s,MISSING)", serie1.QueryPatt)
101101
serie1.Target = fmt.Sprintf("asPercent(%s,MISSING)", serie1.Target)
@@ -143,7 +143,7 @@ func (s *FuncAsPercent) Exec(cache map[Req][]models.Series) ([]models.Series, er
143143
serie1.QueryPatt = fmt.Sprintf("asPercent(%s,%s)", serie1.QueryPatt, serie2.QueryPatt)
144144
serie1.Target = fmt.Sprintf("asPercent(%s,%s)", serie1.Target, serie2.Target)
145145
serie1.Tags = map[string]string{"name": serie1.Target}
146-
copyDatapoints(&serie1)
146+
deepCopySerieElements(&serie1)
147147
for i := range serie1.Datapoints {
148148
serie1.Datapoints[i].Val = computeAsPercent(serie1.Datapoints[i].Val, serie2.Datapoints[i].Val)
149149
}
@@ -161,7 +161,7 @@ func (s *FuncAsPercent) Exec(cache map[Req][]models.Series) ([]models.Series, er
161161
serie.QueryPatt = fmt.Sprintf("asPercent(%s,%s)", serie.QueryPatt, totalsSerie.QueryPatt)
162162
serie.Target = fmt.Sprintf("asPercent(%s,%s)", serie.Target, totalsSerie.QueryPatt)
163163
serie.Tags = map[string]string{"name": serie.Target}
164-
copyDatapoints(&serie)
164+
deepCopySerieElements(&serie)
165165
for i := range serie.Datapoints {
166166
var totalVal float64
167167
if len(totalsSerie.Datapoints) > i {
@@ -214,7 +214,7 @@ func getTotalSeries(totalSeriesLists map[string][]models.Series) map[string]mode
214214
// Datapoints are always a copy
215215
func sumSeries(series []models.Series) models.Series {
216216
if len(series) == 1 {
217-
copyDatapoints(&series[0])
217+
deepCopySerieElements(&series[0])
218218
return series[0]
219219
}
220220
out := pointSlicePool.Get().([]schema.Point)
@@ -244,10 +244,15 @@ Loop:
244244
}
245245
}
246246

247-
func copyDatapoints(serie *models.Series) {
247+
func deepCopySerieElements(serie *models.Series) {
248248
out := pointSlicePool.Get().([]schema.Point)
249249
for _, p := range serie.Datapoints {
250250
out = append(out, p)
251251
}
252252
serie.Datapoints = out
253+
newTags := make(map[string]string, len(serie.Tags))
254+
for k, v := range serie.Tags {
255+
newTags[k] = v
256+
}
257+
serie.Tags = newTags
253258
}

expr/func_aspercent_test.go

+1-3
Original file line numberDiff line numberDiff line change
@@ -529,9 +529,7 @@ func testAsPercent(name string, in []models.Series, out []models.Series, t *test
529529

530530
originalSeries := make([]models.Series, len(in))
531531
for i, serie := range in {
532-
originalSeries[i].Interval = serie.Interval
533-
originalSeries[i].QueryPatt = serie.QueryPatt
534-
originalSeries[i].Target = serie.Target
532+
originalSeries[i] = serie
535533
originalSeries[i].Datapoints = getCopy(serie.Datapoints)
536534
}
537535
gots, err := f.Exec(make(map[Req][]models.Series))

0 commit comments

Comments
 (0)