eth: disable fast sync after pivot is committed
This commit is contained in:
		@@ -1170,7 +1170,7 @@ func (d *Downloader) processHeaders(origin uint64, td *big.Int) error {
 | 
			
		||||
 | 
			
		||||
			// If we're already past the pivot point, this could be an attack, thread carefully
 | 
			
		||||
			if rollback[len(rollback)-1].Number.Uint64() > pivot {
 | 
			
		||||
				// If we didn't ever fail, lock in te pivot header (must! not! change!)
 | 
			
		||||
				// If we didn't ever fail, lock in the pivot header (must! not! change!)
 | 
			
		||||
				if atomic.LoadUint32(&d.fsPivotFails) == 0 {
 | 
			
		||||
					for _, header := range rollback {
 | 
			
		||||
						if header.Number.Uint64() == pivot {
 | 
			
		||||
@@ -1392,7 +1392,6 @@ func (d *Downloader) processFastSyncContent(latest *types.Header) error {
 | 
			
		||||
			stateSync.Cancel()
 | 
			
		||||
			if err := d.commitPivotBlock(P); err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if err := d.importBlockResults(afterP); err != nil {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								eth/sync.go
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								eth/sync.go
									
									
									
									
									
								
							@@ -188,7 +188,17 @@ func (pm *ProtocolManager) synchronise(peer *peer) {
 | 
			
		||||
		atomic.StoreUint32(&pm.fastSync, 1)
 | 
			
		||||
		mode = downloader.FastSync
 | 
			
		||||
	}
 | 
			
		||||
	if err := pm.downloader.Synchronise(peer.id, pHead, pTd, mode); err != nil {
 | 
			
		||||
	// Run the sync cycle, and disable fast sync if we've went past the pivot block
 | 
			
		||||
	err := pm.downloader.Synchronise(peer.id, pHead, pTd, mode)
 | 
			
		||||
 | 
			
		||||
	if atomic.LoadUint32(&pm.fastSync) == 1 {
 | 
			
		||||
		// Disable fast sync if we indeed have something in our chain
 | 
			
		||||
		if pm.blockchain.CurrentBlock().NumberU64() > 0 {
 | 
			
		||||
			log.Info("Fast sync complete, auto disabling")
 | 
			
		||||
			atomic.StoreUint32(&pm.fastSync, 0)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	atomic.StoreUint32(&pm.acceptTxs, 1) // Mark initial sync done
 | 
			
		||||
@@ -201,12 +211,4 @@ func (pm *ProtocolManager) synchronise(peer *peer) {
 | 
			
		||||
		// more reliably update peers or the local TD state.
 | 
			
		||||
		go pm.BroadcastBlock(head, false)
 | 
			
		||||
	}
 | 
			
		||||
	// If fast sync was enabled, and we synced up, disable it
 | 
			
		||||
	if atomic.LoadUint32(&pm.fastSync) == 1 {
 | 
			
		||||
		// Disable fast sync if we indeed have something in our chain
 | 
			
		||||
		if pm.blockchain.CurrentBlock().NumberU64() > 0 {
 | 
			
		||||
			log.Info("Fast sync complete, auto disabling")
 | 
			
		||||
			atomic.StoreUint32(&pm.fastSync, 0)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user