github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/querier/batch/non_overlapping.go (about) 1 package batch 2 3 import ( 4 promchunk "github.com/cortexproject/cortex/pkg/chunk/encoding" 5 ) 6 7 type nonOverlappingIterator struct { 8 curr int 9 chunks []GenericChunk 10 iter chunkIterator 11 } 12 13 // newNonOverlappingIterator returns a single iterator over an slice of sorted, 14 // non-overlapping iterators. 15 func newNonOverlappingIterator(chunks []GenericChunk) *nonOverlappingIterator { 16 it := &nonOverlappingIterator{ 17 chunks: chunks, 18 } 19 it.iter.reset(it.chunks[0]) 20 return it 21 } 22 23 func (it *nonOverlappingIterator) Seek(t int64, size int) bool { 24 for { 25 if it.iter.Seek(t, size) { 26 return true 27 } else if it.iter.Err() != nil { 28 return false 29 } else if !it.next() { 30 return false 31 } 32 } 33 } 34 35 func (it *nonOverlappingIterator) Next(size int) bool { 36 for { 37 if it.iter.Next(size) { 38 return true 39 } else if it.iter.Err() != nil { 40 return false 41 } else if !it.next() { 42 return false 43 } 44 } 45 } 46 47 func (it *nonOverlappingIterator) next() bool { 48 it.curr++ 49 if it.curr < len(it.chunks) { 50 it.iter.reset(it.chunks[it.curr]) 51 } 52 return it.curr < len(it.chunks) 53 } 54 55 func (it *nonOverlappingIterator) AtTime() int64 { 56 return it.iter.AtTime() 57 } 58 59 func (it *nonOverlappingIterator) Batch() promchunk.Batch { 60 return it.iter.Batch() 61 } 62 63 func (it *nonOverlappingIterator) Err() error { 64 if it.curr < len(it.chunks) { 65 return it.iter.Err() 66 } 67 return nil 68 }