mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-12-23 08:45:39 +00:00
commit
ae4107a3b2
@ -267,6 +267,7 @@ func pingNodes(store map[[32]byte]*Node) {
|
||||
copy(packet[8:24], sourceAddr)
|
||||
copy(packet[24:40], destAddr)
|
||||
copy(packet[40:], bs)
|
||||
packet[0] = 6 << 4
|
||||
source.send <- packet
|
||||
}
|
||||
destCount := 0
|
||||
@ -438,7 +439,7 @@ func main() {
|
||||
pingNodes(kstore)
|
||||
//pingBench(kstore) // Only after disabling debug output
|
||||
//stressTest(kstore)
|
||||
time.Sleep(120 * time.Second)
|
||||
//time.Sleep(120 * time.Second)
|
||||
dumpDHTSize(kstore) // note that this uses racey functions to read things...
|
||||
if false {
|
||||
// This connects the sim to the local network
|
||||
|
@ -82,10 +82,16 @@ func (t *dht) lookup(nodeID *NodeID, everything bool) []*dhtInfo {
|
||||
for _, info := range t.table {
|
||||
results = append(results, info)
|
||||
}
|
||||
sort.SliceStable(results, func(i, j int) bool {
|
||||
return dht_ordered(nodeID, results[i].getNodeID(), results[j].getNodeID())
|
||||
})
|
||||
if len(results) > dht_lookup_size {
|
||||
// Drop the middle part, so we keep some nodes before and after.
|
||||
// This should help to bootstrap / recover more quickly.
|
||||
sort.SliceStable(results, func(i, j int) bool {
|
||||
return dht_ordered(nodeID, results[i].getNodeID(), results[j].getNodeID())
|
||||
})
|
||||
newRes := make([]*dhtInfo, 0, len(results))
|
||||
newRes = append(newRes, results[len(results)-dht_lookup_size/2:]...)
|
||||
newRes = append(newRes, results[:len(results)-dht_lookup_size/2]...)
|
||||
results = newRes
|
||||
results = results[:dht_lookup_size]
|
||||
}
|
||||
return results
|
||||
@ -168,7 +174,7 @@ func (t *dht) handleReq(req *dhtReq) {
|
||||
coords: req.Coords,
|
||||
}
|
||||
if _, isIn := t.table[*info.getNodeID()]; !isIn && t.isImportant(&info) {
|
||||
t.insert(&info)
|
||||
t.ping(&info, nil)
|
||||
}
|
||||
}
|
||||
|
||||
@ -276,7 +282,7 @@ func (t *dht) doMaintenance() {
|
||||
}
|
||||
for _, info := range t.getImportant() {
|
||||
if now.Sub(info.recv) > info.throttle {
|
||||
t.ping(info, info.getNodeID())
|
||||
t.ping(info, nil)
|
||||
info.pings++
|
||||
info.throttle += time.Second
|
||||
if info.throttle > 30*time.Second {
|
||||
|
Loading…
Reference in New Issue
Block a user