diff --git a/pkg/dataobj/metastore/object.go b/pkg/dataobj/metastore/object.go index 13d0c2754c..a2dcd1651f 100644 --- a/pkg/dataobj/metastore/object.go +++ b/pkg/dataobj/metastore/object.go @@ -649,10 +649,6 @@ func (m *ObjectMetastore) estimateSectionsForPredicates(ctx context.Context, ind return sectionDescriptors, nil } -func fetchObject(ctx context.Context, bucket objstore.Bucket, path string) (*dataobj.Object, error) { - return dataobj.FromBucket(ctx, bucket, path) -} - func addLabels(mtx *sync.Mutex, streams map[uint64][]*labels.Labels, newLabels *labels.Labels) { mtx.Lock() defer mtx.Unlock() diff --git a/pkg/dataobj/sections/pointers/row_reader.go b/pkg/dataobj/sections/pointers/row_reader.go index fac5c3f5df..ec896330c0 100644 --- a/pkg/dataobj/sections/pointers/row_reader.go +++ b/pkg/dataobj/sections/pointers/row_reader.go @@ -270,11 +270,11 @@ func convertBloomExistenceRowPredicate(p BloomExistenceRowPredicate, nameColumn, func convertTimeRangeRowPredicate(p TimeRangeRowPredicate, startColumn, endColumn dataset.Column) dataset.Predicate { return dataset.AndPredicate{ Left: dataset.GreaterThanPredicate{ - Column: startColumn, + Column: endColumn, Value: dataset.Int64Value(p.Start.UnixNano() - 1), }, Right: dataset.LessThanPredicate{ - Column: endColumn, + Column: startColumn, Value: dataset.Int64Value(p.End.UnixNano() + 1), }, } diff --git a/pkg/dataobj/sections/pointers/row_reader_test.go b/pkg/dataobj/sections/pointers/row_reader_test.go index e632fc3b2c..93f2961a0d 100644 --- a/pkg/dataobj/sections/pointers/row_reader_test.go +++ b/pkg/dataobj/sections/pointers/row_reader_test.go @@ -28,6 +28,66 @@ func TestRowReader(t *testing.T) { require.Equal(t, pointerTestData, actual) } +func TestRowReaderTimeRange(t *testing.T) { + var streamTestData []SectionPointer + for _, d := range pointerTestData { + if d.PointerKind == PointerKindStreamIndex { + streamTestData = append(streamTestData, d) + } + } + + tests := []struct { + name string + predicate TimeRangeRowPredicate + want []SectionPointer + }{ + { + name: "no match", + predicate: TimeRangeRowPredicate{Start: unixTime(100), End: unixTime(200)}, + want: nil, + }, + { + name: "all match", + predicate: TimeRangeRowPredicate{Start: unixTime(0), End: unixTime(20)}, + want: streamTestData, + }, + { + name: "partial match", + predicate: TimeRangeRowPredicate{Start: unixTime(16), End: unixTime(18)}, + want: []SectionPointer{ + streamTestData[1], + streamTestData[2], + }, + }, + { + name: "end predicate equal start of stream", + predicate: TimeRangeRowPredicate{Start: unixTime(0), End: unixTime(10)}, + want: []SectionPointer{ + streamTestData[0], + }, + }, + { + name: "start predicate equal end of stream", + predicate: TimeRangeRowPredicate{Start: unixTime(18), End: unixTime(100)}, + want: []SectionPointer{ + streamTestData[1], + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + dec := buildPointersDecoder(t, 0, 2) + r := NewRowReader(dec) + err := r.SetPredicate(tt.predicate) + require.NoError(t, err) + actual, err := readAllPointers(context.Background(), r) + require.NoError(t, err) + require.Equal(t, tt.want, actual) + }) + } +} + func unixTime(sec int64) time.Time { return time.Unix(sec, 0) } func buildPointersDecoder(t *testing.T, pageSize, pageRows int) *Section {