swarm/network: kaddb.findBest does not get stuck on empty row but finds an actual missing node

This commit is contained in:
zelig 2016-06-15 10:50:55 +01:00
parent df5c8f3ab5
commit f72d3b26a2
2 changed files with 5 additions and 7 deletions

View file

@ -131,7 +131,8 @@ func (self *Hive) Start(id discover.NodeID, listenAddr func() string, connectPee
// enode or any lower level connection address is unnecessary in future
// discovery table is used to look it up.
connectPeer(node.Url)
} else if need {
}
if need {
// a random peer is taken from the table
peers := self.kad.FindClosest(kademlia.RandomAddressAt(self.addr, rand.Intn(self.kad.MaxProx)), 1)
if len(peers) > 0 {
@ -342,7 +343,7 @@ func (self *Hive) peers(req *retrieveRequestMsgData) {
for _, peer := range self.getPeers(key, int(req.MaxPeers)) {
addrs = append(addrs, peer.remoteAddr)
}
glog.V(logger.Debug).Infof("[BZZ] Hive sending %d peer addresses to %v. req.Id: %v, req.Key: %x", len(addrs), req.from, req.Id, req.Key.Log())
glog.V(logger.Debug).Infof("[BZZ] Hive sending %d peer addresses to %v. req.Id: %v, req.Key: %v", len(addrs), req.from, req.Id, req.Key.Log())
peersData := &peersMsgData{
Peers: addrs,

View file

@ -228,15 +228,12 @@ func (self *KadDb) findBest(maxBinSize int, binSize func(int) int) (node *NodeRe
self.cursors[po] = cursor
self.delete(po, purge)
if found {
return node, true, proxLimit
return node, need, proxLimit
}
} // ROUND
if need {
return nil, true, proxLimit
}
} // ROUNDS
return nil, false, proxLimit
return nil, need, proxLimit
}
// deletes the noderecords of a kaddb row corresponding to the indexes