@@ -471,6 +471,81 @@ func testQueryDataOverlappingWindowCase(test *testing.T, v3ioConfig *config.V3io
471471 }
472472}
473473
474+ // Calling Seek instead of next for the first time while iterating over data (TSDB-43)
475+ func TestIgnoreNaNWhenSeekingAggSeries (t * testing.T ) {
476+ v3ioConfig , err := tsdbtest .LoadV3ioConfig ()
477+ if err != nil {
478+ t .Fatalf ("unable to load configuration. Error: %v" , err )
479+ }
480+ metricsName := "cpu"
481+ baseTime := int64 (1532940510000 )
482+ userLabels := utils .LabelsFromStrings ("os" , "linux" , "iguaz" , "yesplease" )
483+ data := []tsdbtest.DataPoint {{Time : baseTime , Value : 300.3 },
484+ {Time : baseTime + minuteInMillis , Value : 300.3 },
485+ {Time : baseTime + 2 * minuteInMillis , Value : 100.4 },
486+ {Time : baseTime + 5 * minuteInMillis , Value : 200.0 }}
487+ from := int64 (baseTime - 60 * minuteInMillis )
488+ to := int64 (baseTime + 6 * minuteInMillis )
489+ step := int64 (2 * minuteInMillis )
490+ agg := "avg"
491+ expected := map [string ][]tsdbtest.DataPoint {
492+ "avg" : {{baseTime , 300.3 },
493+ {baseTime + step , 100.4 },
494+ {baseTime + 2 * step , 200 }}}
495+
496+ adapter , teardown := tsdbtest .SetUpWithData (t , v3ioConfig , metricsName , data , userLabels )
497+ defer teardown ()
498+
499+ qry , err := adapter .Querier (nil , from , to )
500+ if err != nil {
501+ t .Fatalf ("Failed to create Querier. reason: %v" , err )
502+ }
503+
504+ set , err := qry .Select (metricsName , agg , step , "" )
505+ if err != nil {
506+ t .Fatalf ("Failed to run Select. reason: %v" , err )
507+ }
508+
509+ var counter int
510+ for counter = 0 ; set .Next (); counter ++ {
511+ if set .Err () != nil {
512+ t .Fatalf ("Failed to query metric. reason: %v" , set .Err ())
513+ }
514+
515+ series := set .At ()
516+ agg := series .Labels ().Get (aggregate .AggregateLabel )
517+ iter := series .Iterator ()
518+ if iter .Err () != nil {
519+ t .Fatalf ("Failed to query data series. reason: %v" , iter .Err ())
520+ }
521+ if ! iter .Seek (0 ) {
522+ t .Fatal ("Seek time returned false, iterator error:" , iter .Err ())
523+ }
524+ var actual []tsdbtest.DataPoint
525+ t0 , v0 := iter .At ()
526+ if iter .Err () != nil {
527+ t .Fatal ("error iterating over series" , iter .Err ())
528+ }
529+ actual = append (actual , tsdbtest.DataPoint {Time : t0 , Value : v0 })
530+ for iter .Next () {
531+ t1 , v1 := iter .At ()
532+
533+ if iter .Err () != nil {
534+ t .Fatal ("error iterating over series" , iter .Err ())
535+ }
536+ actual = append (actual , tsdbtest.DataPoint {Time : t1 , Value : v1 })
537+ }
538+ assert .ElementsMatch (t , expected [agg ], actual )
539+ }
540+
541+ if set .Err () != nil {
542+ t .Fatalf ("Failed to query metric. reason: %v" , set .Err ())
543+ }
544+ if counter == 0 && len (expected ) > 0 {
545+ t .Fatalf ("No data was received" )
546+ }
547+ }
548+
474549func TestCreateTSDB (t * testing.T ) {
475550 v3ioConfig , err := tsdbtest .LoadV3ioConfig ()
476551 if err != nil {
0 commit comments