Procházet zdrojové kódy

Merge pull request #19534 from karalabe/downloader-delay-fix

eth/downloader: fix header delays during chain dedup
Péter Szilágyi před 6 roky
rodič
revize
78477e4118
1 změnil soubory, kde provedl 7 přidání a 0 odebrání
  1. 7 0
      eth/downloader/downloader.go

+ 7 - 0
eth/downloader/downloader.go

@@ -892,6 +892,7 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64)
 		}
 	}
 	// Start pulling the header chain skeleton until all is done
+	ancestor := from
 	getHeaders(from)
 
 	for {
@@ -962,6 +963,12 @@ func (d *Downloader) fetchHeaders(p *peerConnection, from uint64, pivot uint64)
 							head = full
 						}
 					}
+					// If the head is below the common ancestor, we're actually deduplicating
+					// already existing chain segments, so use the ancestor as the fake head.
+					// Otherwise we might end up delaying header deliveries pointlessly.
+					if head < ancestor {
+						head = ancestor
+					}
 					// If the head is way older than this batch, delay the last few headers
 					if head+uint64(reorgProtThreshold) < headers[n-1].Number.Uint64() {
 						delay := reorgProtHeaderDelay