5
0
mirror of https://github.com/cwinfo/yggdrasil-go.git synced 2024-11-22 17:40:26 +00:00

fix sim and tune dht to bootstrap a little faster

This commit is contained in:
Arceliar 2018-11-16 19:32:12 -06:00
parent 289f1ce7c2
commit ef6cece720
2 changed files with 12 additions and 6 deletions

View File

@ -439,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

View File

@ -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 {