mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-22 21:10:29 +00:00
commit
ae4107a3b2
@ -267,6 +267,7 @@ func pingNodes(store map[[32]byte]*Node) {
|
|||||||
copy(packet[8:24], sourceAddr)
|
copy(packet[8:24], sourceAddr)
|
||||||
copy(packet[24:40], destAddr)
|
copy(packet[24:40], destAddr)
|
||||||
copy(packet[40:], bs)
|
copy(packet[40:], bs)
|
||||||
|
packet[0] = 6 << 4
|
||||||
source.send <- packet
|
source.send <- packet
|
||||||
}
|
}
|
||||||
destCount := 0
|
destCount := 0
|
||||||
@ -438,7 +439,7 @@ func main() {
|
|||||||
pingNodes(kstore)
|
pingNodes(kstore)
|
||||||
//pingBench(kstore) // Only after disabling debug output
|
//pingBench(kstore) // Only after disabling debug output
|
||||||
//stressTest(kstore)
|
//stressTest(kstore)
|
||||||
time.Sleep(120 * time.Second)
|
//time.Sleep(120 * time.Second)
|
||||||
dumpDHTSize(kstore) // note that this uses racey functions to read things...
|
dumpDHTSize(kstore) // note that this uses racey functions to read things...
|
||||||
if false {
|
if false {
|
||||||
// This connects the sim to the local network
|
// 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 {
|
for _, info := range t.table {
|
||||||
results = append(results, info)
|
results = append(results, info)
|
||||||
}
|
}
|
||||||
|
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 {
|
sort.SliceStable(results, func(i, j int) bool {
|
||||||
return dht_ordered(nodeID, results[i].getNodeID(), results[j].getNodeID())
|
return dht_ordered(nodeID, results[i].getNodeID(), results[j].getNodeID())
|
||||||
})
|
})
|
||||||
if len(results) > dht_lookup_size {
|
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]
|
results = results[:dht_lookup_size]
|
||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
@ -168,7 +174,7 @@ func (t *dht) handleReq(req *dhtReq) {
|
|||||||
coords: req.Coords,
|
coords: req.Coords,
|
||||||
}
|
}
|
||||||
if _, isIn := t.table[*info.getNodeID()]; !isIn && t.isImportant(&info) {
|
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() {
|
for _, info := range t.getImportant() {
|
||||||
if now.Sub(info.recv) > info.throttle {
|
if now.Sub(info.recv) > info.throttle {
|
||||||
t.ping(info, info.getNodeID())
|
t.ping(info, nil)
|
||||||
info.pings++
|
info.pings++
|
||||||
info.throttle += time.Second
|
info.throttle += time.Second
|
||||||
if info.throttle > 30*time.Second {
|
if info.throttle > 30*time.Second {
|
||||||
|
Loading…
Reference in New Issue
Block a user