if bucket doesnt have enough peers, grab more elsewhere
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Nov 13, 2015 at 14:36 UTC
18099abb939c1014e816dcf5568d8b966a24d925
2 files changed
+4
-9
routing/kbucket/sorting.go
-4
@@ -32,10 +32,6 @@ func copyPeersFromList(target ID, peerArr peerSorterArr, peerList *list.List) pe
32
distance: xor(target, pID),
33
}
34
peerArr = append(peerArr, &pd)
35
- if e == nil {
36
- log.Debug("list element was nil")
37
- return peerArr
38
- }
35
}
36
return peerArr
37
}
routing/kbucket/table.go
+4
-5
@@ -155,9 +155,10 @@ func (rt *RoutingTable) NearestPeers(id ID, count int) []peer.ID {
155
bucket = rt.Buckets[cpl]
156
157
var peerArr peerSorterArr
158
- if bucket.Len() == 0 {
159
- // In the case of an unusual split, one bucket may be empty.
160
- // if this happens, search both surrounding buckets for nearest peer
158
+ peerArr = copyPeersFromList(id, peerArr, bucket.list)
159
+ if len(peerArr) < count {
160
+ // In the case of an unusual split, one bucket may be short or empty.
161
+ // if this happens, search both surrounding buckets for nearby peers
162
if cpl > 0 {
163
plist := rt.Buckets[cpl-1].list
164
peerArr = copyPeersFromList(id, peerArr, plist)
@@ -167,8 +168,6 @@ func (rt *RoutingTable) NearestPeers(id ID, count int) []peer.ID {
168
plist := rt.Buckets[cpl+1].list
169
peerArr = copyPeersFromList(id, peerArr, plist)
170
}
170
- } else {
171
- peerArr = copyPeersFromList(id, peerArr, bucket.list)
171
}
172
173
// Sort by distance to local peer