eth/downloader: save the correct delivery time for state sync
This commit is contained in:
		
							parent
							
								
									68754f3931
								
							
						
					
					
						commit
						4b9c0ea76d
					
				| @ -34,13 +34,14 @@ import ( | |||||||
| // stateReq represents a batch of state fetch requests grouped together into
 | // stateReq represents a batch of state fetch requests grouped together into
 | ||||||
| // a single data retrieval network packet.
 | // a single data retrieval network packet.
 | ||||||
| type stateReq struct { | type stateReq struct { | ||||||
| 	nItems   uint16                     // Number of items requested for download (max is 384, so uint16 is sufficient)
 | 	nItems    uint16                     // Number of items requested for download (max is 384, so uint16 is sufficient)
 | ||||||
| 	tasks    map[common.Hash]*stateTask // Download tasks to track previous attempts
 | 	tasks     map[common.Hash]*stateTask // Download tasks to track previous attempts
 | ||||||
| 	timeout  time.Duration              // Maximum round trip time for this to complete
 | 	timeout   time.Duration              // Maximum round trip time for this to complete
 | ||||||
| 	timer    *time.Timer                // Timer to fire when the RTT timeout expires
 | 	timer     *time.Timer                // Timer to fire when the RTT timeout expires
 | ||||||
| 	peer     *peerConnection            // Peer that we're requesting from
 | 	peer      *peerConnection            // Peer that we're requesting from
 | ||||||
| 	response [][]byte                   // Response data of the peer (nil for timeouts)
 | 	delivered time.Time                  // Time when the packet was delivered (independent when we process it)
 | ||||||
| 	dropped  bool                       // Flag whether the peer dropped off early
 | 	response  [][]byte                   // Response data of the peer (nil for timeouts)
 | ||||||
|  | 	dropped   bool                       // Flag whether the peer dropped off early
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // timedOut returns if this request timed out.
 | // timedOut returns if this request timed out.
 | ||||||
| @ -148,6 +149,7 @@ func (d *Downloader) runStateSync(s *stateSync) *stateSync { | |||||||
| 			// Finalize the request and queue up for processing
 | 			// Finalize the request and queue up for processing
 | ||||||
| 			req.timer.Stop() | 			req.timer.Stop() | ||||||
| 			req.response = pack.(*statePack).states | 			req.response = pack.(*statePack).states | ||||||
|  | 			req.delivered = time.Now() | ||||||
| 
 | 
 | ||||||
| 			finished = append(finished, req) | 			finished = append(finished, req) | ||||||
| 			delete(active, pack.PeerId()) | 			delete(active, pack.PeerId()) | ||||||
| @ -349,7 +351,6 @@ func (s *stateSync) loop() (err error) { | |||||||
| 			return errCanceled | 			return errCanceled | ||||||
| 
 | 
 | ||||||
| 		case req := <-s.deliver: | 		case req := <-s.deliver: | ||||||
| 			deliveryTime := time.Now() |  | ||||||
| 			// Response, disconnect or timeout triggered, drop the peer if stalling
 | 			// Response, disconnect or timeout triggered, drop the peer if stalling
 | ||||||
| 			log.Trace("Received node data response", "peer", req.peer.id, "count", len(req.response), "dropped", req.dropped, "timeout", !req.dropped && req.timedOut()) | 			log.Trace("Received node data response", "peer", req.peer.id, "count", len(req.response), "dropped", req.dropped, "timeout", !req.dropped && req.timedOut()) | ||||||
| 			if req.nItems <= 2 && !req.dropped && req.timedOut() { | 			if req.nItems <= 2 && !req.dropped && req.timedOut() { | ||||||
| @ -376,7 +377,7 @@ func (s *stateSync) loop() (err error) { | |||||||
| 			} | 			} | ||||||
| 			// Process all the received blobs and check for stale delivery
 | 			// Process all the received blobs and check for stale delivery
 | ||||||
| 			delivered, err := s.process(req) | 			delivered, err := s.process(req) | ||||||
| 			req.peer.SetNodeDataIdle(delivered, deliveryTime) | 			req.peer.SetNodeDataIdle(delivered, req.delivered) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				log.Warn("Node data write error", "err", err) | 				log.Warn("Node data write error", "err", err) | ||||||
| 				return err | 				return err | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user