mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
core/filtermaps: document addRenderedRange internals
This commit is contained in:
parent
fb43ee6bf1
commit
2951d4c141
1 changed files with 21 additions and 9 deletions
|
|
@ -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,28 +591,35 @@ 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.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue