core/filtermaps: document addRenderedRange internals

This commit is contained in:
Felix Lange 2025-03-13 14:27:45 +01:00
parent fb43ee6bf1
commit 2951d4c141

View file

@ -562,6 +562,11 @@ func (fmr *filterMapsRange) addRenderedRange(firstRendered, afterLastRendered, a
if !fmr.initialized { if !fmr.initialized {
return errors.New("log index not initialized") return errors.New("log index not initialized")
} }
// Here we create a slice of endpoints for the rendered sections. There are two endpoints
// for each section: the index of the first map, and the index after the last map in the
// section. We then iterate the endpoints -- adding d values -- to determine whether the
// sections are contiguous or whether they have a gap.
type endpoint struct { type endpoint struct {
m uint32 m uint32
d int d int
@ -586,29 +591,36 @@ func (fmr *filterMapsRange) addRenderedRange(firstRendered, afterLastRendered, a
last = !last last = !last
} }
} }
if len(merged) == 0 {
switch len(merged) {
case 0:
// Initialized database, but no finished maps yet.
fmr.tailPartialEpoch = 0 fmr.tailPartialEpoch = 0
fmr.firstRenderedMap = firstRendered fmr.firstRenderedMap = firstRendered
fmr.afterLastRenderedMap = firstRendered fmr.afterLastRenderedMap = firstRendered
return nil
} case 2:
if len(merged) == 2 { // One rendered section (no partial tail epoch).
fmr.tailPartialEpoch = 0 fmr.tailPartialEpoch = 0
fmr.firstRenderedMap = merged[0] fmr.firstRenderedMap = merged[0]
fmr.afterLastRenderedMap = merged[1] fmr.afterLastRenderedMap = merged[1]
return nil
} case 4:
if len(merged) == 4 { // Two rendered sections (with a gap).
// First section (merged[0]-merged[1]) is for the partial tail epoch,
// and it has to start exactly one epoch before the main section.
if merged[2] != merged[0]+mapsPerEpoch { if merged[2] != merged[0]+mapsPerEpoch {
return fmt.Errorf("invalid tail partial epoch: %v", merged) return fmt.Errorf("invalid tail partial epoch: %v", merged)
} }
fmr.tailPartialEpoch = merged[1] - merged[0] fmr.tailPartialEpoch = merged[1] - merged[0]
fmr.firstRenderedMap = merged[2] fmr.firstRenderedMap = merged[2]
fmr.afterLastRenderedMap = merged[3] fmr.afterLastRenderedMap = merged[3]
return nil
} default:
return fmt.Errorf("invalid number of rendered sections: %v", merged) return fmt.Errorf("invalid number of rendered sections: %v", merged)
} }
return nil
}
// logIterator iterates on the linear log value index range. // logIterator iterates on the linear log value index range.
type logIterator struct { type logIterator struct {