Merge pull request #627 from ethersphere/frontier/blockpool
Frontier/blockpool BUGFIX
This commit is contained in:
		@@ -133,13 +133,10 @@ func (self *peer) addError(code int, format string, params ...interface{}) {
 | 
				
			|||||||
	self.addToBlacklist(self.id)
 | 
						self.addToBlacklist(self.id)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// caller must hold peer lock
 | 
				
			||||||
func (self *peer) setChainInfo(td *big.Int, c common.Hash) {
 | 
					func (self *peer) setChainInfo(td *big.Int, c common.Hash) {
 | 
				
			||||||
	self.lock.Lock()
 | 
					 | 
				
			||||||
	defer self.lock.Unlock()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	self.td = td
 | 
						self.td = td
 | 
				
			||||||
	self.currentBlockHash = c
 | 
						self.currentBlockHash = c
 | 
				
			||||||
 | 
					 | 
				
			||||||
	self.currentBlock = nil
 | 
						self.currentBlock = nil
 | 
				
			||||||
	self.parentHash = common.Hash{}
 | 
						self.parentHash = common.Hash{}
 | 
				
			||||||
	self.headSection = nil
 | 
						self.headSection = nil
 | 
				
			||||||
@@ -171,7 +168,7 @@ func (self *peers) requestBlocks(attempts int, hashes []common.Hash) {
 | 
				
			|||||||
	defer self.lock.RUnlock()
 | 
						defer self.lock.RUnlock()
 | 
				
			||||||
	peerCount := len(self.peers)
 | 
						peerCount := len(self.peers)
 | 
				
			||||||
	// on first attempt use the best peer
 | 
						// on first attempt use the best peer
 | 
				
			||||||
	if attempts == 0 {
 | 
						if attempts == 0 && self.best != nil {
 | 
				
			||||||
		plog.DebugDetailf("request %v missing blocks from best peer <%s>", len(hashes), self.best.id)
 | 
							plog.DebugDetailf("request %v missing blocks from best peer <%s>", len(hashes), self.best.id)
 | 
				
			||||||
		self.best.requestBlocks(hashes)
 | 
							self.best.requestBlocks(hashes)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -219,10 +216,12 @@ func (self *peers) addPeer(
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	self.lock.Lock()
 | 
						self.lock.Lock()
 | 
				
			||||||
 | 
						defer self.lock.Unlock()
 | 
				
			||||||
	p, found := self.peers[id]
 | 
						p, found := self.peers[id]
 | 
				
			||||||
	if found {
 | 
						if found {
 | 
				
			||||||
		// when called on an already connected peer, it means a newBlockMsg is received
 | 
							// when called on an already connected peer, it means a newBlockMsg is received
 | 
				
			||||||
		// peer head info is updated
 | 
							// peer head info is updated
 | 
				
			||||||
 | 
							p.lock.Lock()
 | 
				
			||||||
		if p.currentBlockHash != currentBlockHash {
 | 
							if p.currentBlockHash != currentBlockHash {
 | 
				
			||||||
			previousBlockHash = p.currentBlockHash
 | 
								previousBlockHash = p.currentBlockHash
 | 
				
			||||||
			plog.Debugf("addPeer: Update peer <%s> with td %v and current block %s (was %v)", id, td, hex(currentBlockHash), hex(previousBlockHash))
 | 
								plog.Debugf("addPeer: Update peer <%s> with td %v and current block %s (was %v)", id, td, hex(currentBlockHash), hex(previousBlockHash))
 | 
				
			||||||
@@ -232,6 +231,7 @@ func (self *peers) addPeer(
 | 
				
			|||||||
			self.status.values.NewBlocks++
 | 
								self.status.values.NewBlocks++
 | 
				
			||||||
			self.status.lock.Unlock()
 | 
								self.status.lock.Unlock()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							p.lock.Unlock()
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		p = self.newPeer(td, currentBlockHash, id, requestBlockHashes, requestBlocks, peerError)
 | 
							p = self.newPeer(td, currentBlockHash, id, requestBlockHashes, requestBlocks, peerError)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -243,7 +243,6 @@ func (self *peers) addPeer(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		plog.Debugf("addPeer: add new peer <%v> with td %v and current block %s", id, td, hex(currentBlockHash))
 | 
							plog.Debugf("addPeer: add new peer <%v> with td %v and current block %s", id, td, hex(currentBlockHash))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	self.lock.Unlock()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// check if peer's current head block is known
 | 
						// check if peer's current head block is known
 | 
				
			||||||
	if self.bp.hasBlock(currentBlockHash) {
 | 
						if self.bp.hasBlock(currentBlockHash) {
 | 
				
			||||||
@@ -269,7 +268,10 @@ func (self *peers) addPeer(
 | 
				
			|||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		// baseline is our own TD
 | 
							// baseline is our own TD
 | 
				
			||||||
		currentTD := self.bp.getTD()
 | 
							currentTD := self.bp.getTD()
 | 
				
			||||||
		if self.best != nil {
 | 
							bestpeer := self.best
 | 
				
			||||||
 | 
							if bestpeer != nil {
 | 
				
			||||||
 | 
								bestpeer.lock.Lock()
 | 
				
			||||||
 | 
								defer bestpeer.lock.Unlock()
 | 
				
			||||||
			currentTD = self.best.td
 | 
								currentTD = self.best.td
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if td.Cmp(currentTD) > 0 {
 | 
							if td.Cmp(currentTD) > 0 {
 | 
				
			||||||
@@ -277,11 +279,12 @@ func (self *peers) addPeer(
 | 
				
			|||||||
			self.status.bestPeers[p.id]++
 | 
								self.status.bestPeers[p.id]++
 | 
				
			||||||
			self.status.lock.Unlock()
 | 
								self.status.lock.Unlock()
 | 
				
			||||||
			plog.Debugf("addPeer: peer <%v> (td: %v > current td %v) promoted best peer", id, td, currentTD)
 | 
								plog.Debugf("addPeer: peer <%v> (td: %v > current td %v) promoted best peer", id, td, currentTD)
 | 
				
			||||||
			self.bp.switchPeer(self.best, p)
 | 
								self.bp.switchPeer(bestpeer, p)
 | 
				
			||||||
			self.best = p
 | 
								self.best = p
 | 
				
			||||||
			best = true
 | 
								best = true
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user