@@ -777,7 +777,8 @@ object DiscoveryService {
777
777
def loop (
778
778
local : Node ,
779
779
closest : SortedSet [Node ],
780
- asked : Set [Node ]
780
+ asked : Set [Node ],
781
+ neighbors : Set [Node ]
781
782
): Task [SortedSet [Node ]] = {
782
783
// Contact the alpha closest nodes to the target that we haven't asked before.
783
784
val contacts = closest
@@ -787,24 +788,31 @@ object DiscoveryService {
787
788
.toList
788
789
789
790
if (contacts.isEmpty) {
790
- Task (logger.debug(s " Lookup finished for $target after asking ${asked.size} nodes. " )).as(closest)
791
+ Task (
792
+ logger.debug(s " Lookup for $target finished; asked ${asked.size} nodes, found ${neighbors.size} neighbors. " )
793
+ ).as(closest)
791
794
} else {
792
- Task (logger.debug(s " Lookup for $target contacting ${contacts.size} nodes. " )) >>
795
+ Task (
796
+ logger.debug(s " Lookup for $target contacting ${contacts.size} new nodes; asked ${asked.size} nodes so far. " )
797
+ ) >>
793
798
Task
794
799
.parTraverseUnordered(contacts)(fetchNeighbors)
795
800
.map(_.flatten.distinct)
796
801
.flatMap(bondNeighbors)
797
802
.flatMap { newNeighbors =>
798
- val newClosest = (closest ++ newNeighbors).take(config.kademliaBucketSize)
799
- val newAsked = asked ++ contacts
800
- loop(local, newClosest, newAsked)
803
+ val nextClosest = (closest ++ newNeighbors).take(config.kademliaBucketSize)
804
+ val nextAsked = asked ++ contacts
805
+ val nextNeighbors = neighbors ++ newNeighbors
806
+ val newClosest = nextClosest diff closest
807
+ Task (logger.debug(s " Lookup for $target found ${newClosest.size} neighbors closer than before. " )) >>
808
+ loop(local, nextClosest, nextAsked, nextNeighbors)
801
809
}
802
810
}
803
811
}
804
812
805
813
init.flatMap {
806
814
case (localNode, closestNodes) =>
807
- loop(localNode, closest = SortedSet (closestNodes : _* ), asked = Set (localNode))
815
+ loop(localNode, closest = SortedSet (closestNodes : _* ), asked = Set (localNode), neighbors = closestNodes.toSet )
808
816
}
809
817
}
810
818
0 commit comments