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 // enode or any lower level connection address is unnecessary in future
// discovery table is used to look it up. // discovery table is used to look it up.
connectPeer(node.Url) connectPeer(node.Url)
} else if need { }
if need {
// a random peer is taken from the table // a random peer is taken from the table
peers := self.kad.FindClosest(kademlia.RandomAddressAt(self.addr, rand.Intn(self.kad.MaxProx)), 1) peers := self.kad.FindClosest(kademlia.RandomAddressAt(self.addr, rand.Intn(self.kad.MaxProx)), 1)
if len(peers) > 0 { if len(peers) > 0 {
@ -342,7 +343,7 @@ func (self *Hive) peers(req *retrieveRequestMsgData) {
for _, peer := range self.getPeers(key, int(req.MaxPeers)) { for _, peer := range self.getPeers(key, int(req.MaxPeers)) {
addrs = append(addrs, peer.remoteAddr) 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{ peersData := &peersMsgData{
Peers: addrs, 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.cursors[po] = cursor
self.delete(po, purge) self.delete(po, purge)
if found { if found {
return node, true, proxLimit return node, need, proxLimit
} }
} // ROUND } // ROUND
if need {
return nil, true, proxLimit
}
} // ROUNDS } // ROUNDS
return nil, false, proxLimit return nil, need, proxLimit
} }
// deletes the noderecords of a kaddb row corresponding to the indexes // deletes the noderecords of a kaddb row corresponding to the indexes