|
|
@@ -665,30 +665,32 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header)
|
|
|
localHeight = d.lightchain.CurrentHeader().Number.Uint64()
|
|
|
}
|
|
|
p.log.Debug("Looking for common ancestor", "local", localHeight, "remote", remoteHeight)
|
|
|
+
|
|
|
+ // Recap floor value for binary search
|
|
|
if localHeight >= MaxForkAncestry {
|
|
|
// We're above the max reorg threshold, find the earliest fork point
|
|
|
floor = int64(localHeight - MaxForkAncestry)
|
|
|
-
|
|
|
- // If we're doing a light sync, ensure the floor doesn't go below the CHT, as
|
|
|
- // all headers before that point will be missing.
|
|
|
- if d.mode == LightSync {
|
|
|
- // If we dont know the current CHT position, find it
|
|
|
- if d.genesis == 0 {
|
|
|
- header := d.lightchain.CurrentHeader()
|
|
|
- for header != nil {
|
|
|
- d.genesis = header.Number.Uint64()
|
|
|
- if floor >= int64(d.genesis)-1 {
|
|
|
- break
|
|
|
- }
|
|
|
- header = d.lightchain.GetHeaderByHash(header.ParentHash)
|
|
|
+ }
|
|
|
+ // If we're doing a light sync, ensure the floor doesn't go below the CHT, as
|
|
|
+ // all headers before that point will be missing.
|
|
|
+ if d.mode == LightSync {
|
|
|
+ // If we dont know the current CHT position, find it
|
|
|
+ if d.genesis == 0 {
|
|
|
+ header := d.lightchain.CurrentHeader()
|
|
|
+ for header != nil {
|
|
|
+ d.genesis = header.Number.Uint64()
|
|
|
+ if floor >= int64(d.genesis)-1 {
|
|
|
+ break
|
|
|
}
|
|
|
- }
|
|
|
- // We already know the "genesis" block number, cap floor to that
|
|
|
- if floor < int64(d.genesis)-1 {
|
|
|
- floor = int64(d.genesis) - 1
|
|
|
+ header = d.lightchain.GetHeaderByHash(header.ParentHash)
|
|
|
}
|
|
|
}
|
|
|
+ // We already know the "genesis" block number, cap floor to that
|
|
|
+ if floor < int64(d.genesis)-1 {
|
|
|
+ floor = int64(d.genesis) - 1
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
from, count, skip, max := calculateRequestSpan(remoteHeight, localHeight)
|
|
|
|
|
|
p.log.Trace("Span searching for common ancestor", "count", count, "from", from, "skip", skip)
|