diff --git a/CHANGELOG.md b/CHANGELOG.md index a917705dd72..b043edcb6bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -110,6 +110,7 @@ We use *breaking :warning:* to mark changes that are not backward compatible (re - [#6592](https://github.com/thanos-io/thanos/pull/6592) Query Frontend: fix bugs in vertical sharding `without` and `union` function to allow more queries to be shardable. - [#6317](https://github.com/thanos-io/thanos/pull/6317) *: Fix internal label deduplication bug, by resorting store response set. - [#6189](https://github.com/thanos-io/thanos/pull/6189) Rule: Fix panic when calling API `/api/v1/rules?type=alert`. +- [#6598](https://github.com/thanos-io/thanos/pull/6598) compact: fix data corruption with "invalid size" error during downsample ### Changed - [#6049](https://github.com/thanos-io/thanos/pull/6049) Compact: *breaking :warning:* Replace group with resolution in compact metrics to avoid cardinality explosion on compact metrics for large numbers of groups. diff --git a/pkg/compact/downsample/downsample.go b/pkg/compact/downsample/downsample.go index 78b615f9047..51d895058ac 100644 --- a/pkg/compact/downsample/downsample.go +++ b/pkg/compact/downsample/downsample.go @@ -372,8 +372,17 @@ func downsampleRawLoop(data []sample, resolution int64, numChunks int) []chunks. for ; j < len(data) && data[j].t <= curW; j++ { } - batch := data[:j] + batch := make([]sample, 0, j) + for _, s := range data[:j] { + if math.IsNaN(s.v) { + continue + } + batch = append(batch, s) + } data = data[j:] + if len(batch) == 0 { + continue + } ab := newAggrChunkBuilder() diff --git a/pkg/compact/downsample/downsample_test.go b/pkg/compact/downsample/downsample_test.go index d1dfaeb9b8e..16cc9246172 100644 --- a/pkg/compact/downsample/downsample_test.go +++ b/pkg/compact/downsample/downsample_test.go @@ -34,6 +34,686 @@ func TestMain(m *testing.M) { goleak.VerifyTestMain(m) } +func TestDownsampleAndReadResultingData(t *testing.T) { + data := []sample{ + {t: 1688526018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526078213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688526138213, v: math.Float64frombits(4607156757263679111)}, + {t: 1688526198213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526438213, v: math.Float64frombits(4607105434191002523)}, + {t: 1688526498213, v: math.Float64frombits(4607143926495509974)}, + {t: 1688526558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526678213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526738213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526798213, v: math.Float64frombits(4607131022513257114)}, + {t: 1688526858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688526978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527038213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527098213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527158213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527398213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527458213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688527518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527638213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527818213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688527878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527938213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688527998213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528178213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528238213, v: math.Float64frombits(4607092603422833380)}, + {t: 1688528298213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528538213, v: math.Float64frombits(4607118264959171663)}, + {t: 1688528598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528778213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528838213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688528898213, v: math.Float64frombits(4607131022513257122)}, + {t: 1688528958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529078213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529138213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529198213, v: math.Float64frombits(4607118264959171672)}, + {t: 1688529258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529378213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529438213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529558213, v: math.Float64frombits(4607169588031848265)}, + {t: 1688529618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529678213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529738213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688529918213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688529978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530038213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530098213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530158213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530398213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530638213, v: math.Float64frombits(4607143926495509973)}, + {t: 1688530698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688530938213, v: math.Float64frombits(4607118264959171663)}, + {t: 1688530998213, v: math.Float64frombits(4607143926495509974)}, + {t: 1688531058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531178213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531238213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531298213, v: math.Float64frombits(4607156757263679111)}, + {t: 1688531358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531538213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531778213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531838213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531898213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688531958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532018213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688532078213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532198213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532378213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532438213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532678213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688532738213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688532798213, v: math.Float64frombits(4607143871584947194)}, + {t: 1688532858213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688532918213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688532978213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688533038213, v: math.Float64frombits(4607143871584947189)}, + {t: 1688533098213, v: math.Float64frombits(4607131022513257122)}, + {t: 1688533158213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533398213, v: math.Float64frombits(4607143926495509968)}, + {t: 1688533458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533638213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533938213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688533998213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534178213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534238213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534298213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688534538213, v: math.Float64frombits(4607131022513257117)}, + {t: 1688534598213, v: math.Float64frombits(4607156720656637259)}, + {t: 1688534658213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688534718213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688534778213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688534838213, v: math.Float64frombits(4607105214234976770)}, + {t: 1688534898213, v: math.Float64frombits(4607156720656637259)}, + {t: 1688534958213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688535018213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688535078213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688535138213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688535198213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688535258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688535318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688535378213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688535438213, v: math.Float64frombits(4607131095727340818)}, + {t: 1688535498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688535558213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688535618213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688535678213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688535738213, v: math.Float64frombits(4607156720656637259)}, + {t: 1688535798213, v: math.Float64frombits(4607143926495509973)}, + {t: 1688535858213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688535918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688535978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536038213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536098213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536158213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688536218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536398213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536638213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536818213, v: math.Float64frombits(4607169588031848266)}, + {t: 1688536878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536938213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688536998213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537178213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688537238213, v: math.Float64frombits(4607131095727340818)}, + {t: 1688537298213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537538213, v: math.Float64frombits(4607079772654664231)}, + {t: 1688537598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537838213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688537898213, v: math.Float64frombits(4607079772654664232)}, + {t: 1688537958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538078213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538138213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538198213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538378213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538438213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538678213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538738213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688538918213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688538978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539038213, v: math.Float64frombits(4607118173441567050)}, + {t: 1688539098213, v: math.Float64frombits(4607131022513257121)}, + {t: 1688539158213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688539218213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688539278213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688539338213, v: math.Float64frombits(4607143871584947195)}, + {t: 1688539398213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539638213, v: math.Float64frombits(4607105434191002518)}, + {t: 1688539758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539938213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688539998213, v: math.Float64frombits(4607118264959171665)}, + {t: 1688540058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540178213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540238213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540298213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540538213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540658213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688540718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688540778213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688540838213, v: math.Float64frombits(4607002531796356391)}, + {t: 1688540898213, v: math.Float64frombits(4607066611952456451)}, + {t: 1688540958213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688541018213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688541078213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688541138213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541198213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541378213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688541438213, v: math.Float64frombits(4607066777154806746)}, + {t: 1688541498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541678213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541738213, v: math.Float64frombits(4607015618813818502)}, + {t: 1688541798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688541978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542038213, v: math.Float64frombits(4607079772654664233)}, + {t: 1688542098213, v: math.Float64frombits(4607054111118325940)}, + {t: 1688542158213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688542218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542338213, v: math.Float64frombits(4607105434191002523)}, + {t: 1688542398213, v: math.Float64frombits(4607053928083116679)}, + {t: 1688542458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542578213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688542638213, v: math.Float64frombits(4607066777154806748)}, + {t: 1688542698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688542938213, v: math.Float64frombits(4607118173441567034)}, + {t: 1688542998213, v: math.Float64frombits(4607143871584947194)}, + {t: 1688543058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543178213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543238213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543298213, v: math.Float64frombits(4607131022513257122)}, + {t: 1688543358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543538213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543778213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543838213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543898213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688543958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544078213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544138213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544198213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544378213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544438213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544678213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688544738213, v: math.Float64frombits(4607092346807469995)}, + {t: 1688544798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688544978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688545038213, v: math.Float64frombits(4607066777154806751)}, + {t: 1688545098213, v: math.Float64frombits(4607066941886495085)}, + {t: 1688545158213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688545218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688545278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688545338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688545398213, v: math.Float64frombits(4607143926495509968)}, + {t: 1688545458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688545518213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688545578213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688545638213, v: math.Float64frombits(4607079772654664233)}, + {t: 1688545698213, v: math.Float64frombits(4607105434191002519)}, + {t: 1688545758213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688545818213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688545878213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688545938213, v: math.Float64frombits(4607092731182971622)}, + {t: 1688545998213, v: math.Float64frombits(4607118356216413265)}, + {t: 1688546058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688546118213, v: math.Float64frombits(4607169606283296587)}, + {t: 1688546178213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688546238213, v: math.Float64frombits(4607054293632809142)}, + {t: 1688546298213, v: math.Float64frombits(4607054293632809140)}, + {t: 1688546358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688546418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688546478213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688546538213, v: math.Float64frombits(4607067106149529966)}, + {t: 1688546598213, v: math.Float64frombits(4607079918666250791)}, + {t: 1688546658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688546718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688546778213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688546838213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688546898213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688546958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547018213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688547078213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688547138213, v: math.Float64frombits(4607092731182971626)}, + {t: 1688547198213, v: math.Float64frombits(4607092731182971619)}, + {t: 1688547258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547378213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547438213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547558213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688547618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547678213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547738213, v: math.Float64frombits(4607156793766575752)}, + {t: 1688547798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688547978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548098213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548158213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688548218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548398213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548578213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688548638213, v: math.Float64frombits(4607105434191002521)}, + {t: 1688548698213, v: math.Float64frombits(4607054111118325939)}, + {t: 1688548758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548938213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688548998213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549118213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688549178213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688549238213, v: math.Float64frombits(4607118356216413266)}, + {t: 1688549298213, v: math.Float64frombits(4607118356216413266)}, + {t: 1688549358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549538213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549598213, v: math.Float64frombits(4607092731182971623)}, + {t: 1688549658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549718213, v: math.Float64frombits(4607169606283296583)}, + {t: 1688549778213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549838213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549898213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688549958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550078213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550138213, v: math.Float64frombits(4607156793766575752)}, + {t: 1688550198213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550438213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550498213, v: math.Float64frombits(4607080064263031713)}, + {t: 1688550558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550678213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550738213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550858213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688550918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688550978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551038213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551098213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551158213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551398213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551638213, v: math.Float64frombits(4607067269945908499)}, + {t: 1688551698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688551938213, v: math.Float64frombits(4607118447214401342)}, + {t: 1688551998213, v: math.Float64frombits(4607092858580154923)}, + {t: 1688552058213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688552118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688552178213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688552238213, v: math.Float64frombits(4607105652897278138)}, + {t: 1688552298213, v: math.Float64frombits(4607105652897278140)}, + {t: 1688552358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688552418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688552478213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688552538213, v: math.Float64frombits(4607080064263031714)}, + {t: 1688552598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688552658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688552718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688552778213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688552838213, v: math.Float64frombits(4607028886994538873)}, + {t: 1688552898213, v: math.Float64frombits(4607092858580154926)}, + {t: 1688552958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553078213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553138213, v: math.Float64frombits(4607118447214401341)}, + {t: 1688553198213, v: math.Float64frombits(4607080064263031710)}, + {t: 1688553258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553378213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688553438213, v: math.Float64frombits(4607067269945908500)}, + {t: 1688553498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553678213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553738213, v: math.Float64frombits(4607092985615927779)}, + {t: 1688553798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688553978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554038213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554098213, v: math.Float64frombits(4607105761785083446)}, + {t: 1688554158213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554638213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688554998213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555298213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555538213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555778213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688555838213, v: math.Float64frombits(4607067269945908499)}, + {t: 1688555898213, v: math.Float64frombits(4607041681311662081)}, + {t: 1688555958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556078213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556138213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556198213, v: math.Float64frombits(4607067269945908504)}, + {t: 1688556258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556318213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556378213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556438213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556678213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556738213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688556978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557038213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557098213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557158213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557218213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688557278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557398213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557638213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688557938213, v: math.Float64frombits(4607092603422833381)}, + {t: 1688557998213, v: math.Float64frombits(4607079918666250794)}, + {t: 1688558058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558178213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558238213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558298213, v: math.Float64frombits(4607092475298186899)}, + {t: 1688558358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558418213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558538213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558778213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558838213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558898213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688558958213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688559018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559138213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559198213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559258213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559318213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688559378213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559438213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559498213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559558213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559618213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559678213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688559738213, v: math.Float64frombits(4607105543699692438)}, + {t: 1688559798213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559858213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559918213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688559978213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560038213, v: math.Float64frombits(4607054293632809136)}, + {t: 1688560098213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560158213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560218213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560278213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560338213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560398213, v: math.Float64frombits(4607092731182971621)}, + {t: 1688560458213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560518213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560578213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560638213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560698213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560758213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560818213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560878213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560938213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688560998213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561058213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561118213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561178213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561238213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561298213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561358213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561418213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688561478213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561538213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561598213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561658213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561718213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561778213, v: math.Float64frombits(4607182418800017408)}, + {t: 1688561838213, v: math.Float64frombits(4607092731182971626)}, + {t: 1688561898213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688561958213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688562018213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688562078213, v: math.Float64frombits(value.NormalNaN)}, + {t: 1688562138213, v: math.Float64frombits(4607028449581987651)}, + {t: 1688562198213, v: math.Float64frombits(4607028668599367493)}, + {t: 1688562258213, v: math.Float64frombits(value.NormalNaN)}, + } + + var ( + reuseIt chunkenc.Iterator + all []sample + aggrChunks []*AggrChunk + ) + + // downsample from raw to 300s + chks := DownsampleRaw(data, ResLevel1) + testutil.Assert(t, chks != nil, "Downsample from raw to 300s") + + for _, c := range chks { + ac, ok := c.Chunk.(*AggrChunk) + if !ok { + if c.Chunk.NumSamples() == 0 { + continue + } else { + testutil.Ok(t, expandChunkIterator(c.Chunk.Iterator(reuseIt), &all), "expand chunk %d", c.Ref) + aggrDataChunks := DownsampleRaw(all, ResLevel1) + for _, cn := range aggrDataChunks { + ac, ok = cn.Chunk.(*AggrChunk) + testutil.Assert(t, ok, "Not able to convert non-empty XOR chunks to 5m downsampled aggregated chunks.") + } + } + } + aggrChunks = append(aggrChunks, ac) + } + + // validate aggrChunks from first downsample iteration + validateAggrChunks(t, aggrChunks, chks, "First downsample iteration") + + // downsample from 300s to 3600s + downsampledChunks, err := downsampleAggr( + aggrChunks, + &all, + chks[0].MinTime, + chks[len(chks)-1].MaxTime, + ResLevel1, + ResLevel2, + ) + testutil.Ok(t, err, "Downsample from 300s to 3600s") + testutil.Assert(t, downsampledChunks != nil) + + aggrChunks = aggrChunks[:0] + for _, c := range downsampledChunks { + ac, ok := c.Chunk.(*AggrChunk) + if !ok { + if c.Chunk.NumSamples() == 0 { + continue + } else { + t.Fatalf("expected downsampled chunk (*downsample.AggrChunk) got a non-empty %T instead", c.Chunk) + } + } + aggrChunks = append(aggrChunks, ac) + } + + // validate arrgChunks from second downsample iteration + validateAggrChunks(t, aggrChunks, chks, "Second downsample iteration") +} + +func validateAggrChunks(t *testing.T, aggrChunks []*AggrChunk, chks []chunks.Meta, d string) { + for j, c := range aggrChunks { + var iters [2]chunkenc.Iterator + // we need only 0th and 1st AggrType for alignment check, + // but we iterate through all 5 to catch error "invalid size" + for i := 0; i < 5; i++ { + ac, err := c.Get(AggrType(i)) + testutil.Ok(t, err, "%s. Get AggrType(%d) from aggrChunk #%d. MinT %d, MaxT %d", d, i, j, chks[j].MinTime, chks[j].MaxTime) + if i < 2 { + iters[i] = ac.Iterator(nil) + } + } + + // create iterator to check samples + ai := NewAverageChunkIterator(iters[0], iters[1]) + // exhaust iterator and... + for ai.Next() != chunkenc.ValNone { + } + // ...check its error + err := ai.Err() + testutil.Ok(t, err, d) + } +} + func TestDownsampleCounterBoundaryReset(t *testing.T) { toAggrChunks := func(t *testing.T, cm []chunks.Meta) (res []*AggrChunk) { for i := range cm { @@ -282,6 +962,25 @@ func TestDownsample(t *testing.T) { expected: realisticChkDataWithCounterResetRes5m, }, + { + name: "three chunks, the first one with NaN values only", + inRaw: [][]sample{ + {{20, math.Float64frombits(value.NormalNaN)}, {40, math.Float64frombits(value.NormalNaN)}, {60, math.Float64frombits(value.NormalNaN)}, {80, math.Float64frombits(value.NormalNaN)}, {100, math.NaN()}, {101, math.Float64frombits(value.StaleNaN)}, {120, math.Float64frombits(value.NormalNaN)}, {180, math.Float64frombits(value.NormalNaN)}, {250, math.Float64frombits(value.NormalNaN)}}, + {{260, 1}, {300, 10}, {340, 15}, {380, 25}, {420, 35}}, + {{460, math.Float64frombits(value.StaleNaN)}, {500, 10}, {540, 3}}, + }, + resolution: 100, + + expected: []map[AggrType][]sample{ + { + AggrCount: {{t: 299, v: 1}, {t: 399, v: 3}, {t: 499, v: 1}, {t: 540, v: 2}}, + AggrSum: {{t: 299, v: 1}, {t: 399, v: 50}, {t: 499, v: 35}, {t: 540, v: 13}}, + AggrMin: {{t: 299, v: 1}, {t: 399, v: 10}, {t: 499, v: 35}, {t: 540, v: 3}}, + AggrMax: {{t: 299, v: 1}, {t: 399, v: 25}, {t: 499, v: 35}, {t: 540, v: 10}}, + AggrCounter: {{t: 260, v: 1}, {t: 299, v: 1}, {t: 399, v: 25}, {t: 499, v: 35}, {t: 540, v: 48}, {t: 540, v: 3}}, + }, + }, + }, // Aggregated -> Downsampled Aggregated. { name: "single aggregated chunks",