MCPcopy Create free account
hub / github.com/cortexproject/cortex / newMergeIterator

Function newMergeIterator

pkg/querier/batch/merge.go:26–62  ·  view source on GitHub ↗
(it iterator, cs []GenericChunk)

Source from the content-addressed store, hash-verified

24}
25
26func newMergeIterator(it iterator, cs []GenericChunk) *mergeIterator {
27 css := partitionChunks(cs)
28
29 var c *mergeIterator
30
31 if mIterator, ok := it.(*mergeIterator); ok && cap(mIterator.its) >= len(css) {
32 c = mIterator.Reset(len(css))
33 } else {
34 c = &mergeIterator{
35 h: make(iteratorHeap, 0, len(css)),
36 batches: make(batchStream, 0, len(css)),
37 batchesBuf: make(batchStream, len(css)),
38 }
39 }
40
41 if cap(c.its) < len(css) {
42 c.its = make([]*nonOverlappingIterator, 0, len(css))
43 }
44
45 for _, cs := range css {
46 c.its = append(c.its, newNonOverlappingIterator(cs))
47 }
48
49 for _, iter := range c.its {
50 if iter.Next(1) != chunkenc.ValNone {
51 c.h = append(c.h, iter)
52 continue
53 }
54
55 if err := iter.Err(); err != nil {
56 c.currErr = err
57 }
58 }
59
60 heap.Init(&c.h)
61 return c
62}
63
64func (c *mergeIterator) Reset(size int) *mergeIterator {
65 c.its = c.its[:0]

Callers 4

TestMergeIterFunction · 0.85
BenchmarkMergeIteratorFunction · 0.85
TestMergeHarderFunction · 0.85

Calls 5

partitionChunksFunction · 0.85
NextMethod · 0.65
ErrMethod · 0.65
ResetMethod · 0.45

Tested by 3

TestMergeIterFunction · 0.68
BenchmarkMergeIteratorFunction · 0.68
TestMergeHarderFunction · 0.68