mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-22 14:10:28 +00:00
more insertIfNew bugfixes, and add peerOnly to getDHT output (true if a node is in the bucket.peers slice instead of bucket.others--it means they're not regularly pinged, they're only there to make sure DHT lookups include them as a result, for bootstrapping reasons)
This commit is contained in:
parent
fe518f4e3f
commit
ec8fe338d5
@ -344,20 +344,21 @@ func (a *admin) getData_getDHT() []admin_nodeInfo {
|
|||||||
getDHT := func() {
|
getDHT := func() {
|
||||||
for i := 0; i < a.core.dht.nBuckets(); i++ {
|
for i := 0; i < a.core.dht.nBuckets(); i++ {
|
||||||
b := a.core.dht.getBucket(i)
|
b := a.core.dht.getBucket(i)
|
||||||
getInfo := func(vs []*dhtInfo) {
|
getInfo := func(vs []*dhtInfo, isPeer bool) {
|
||||||
for _, v := range vs {
|
for _, v := range vs {
|
||||||
addr := *address_addrForNodeID(v.getNodeID())
|
addr := *address_addrForNodeID(v.getNodeID())
|
||||||
info := admin_nodeInfo{
|
info := admin_nodeInfo{
|
||||||
{"IP", net.IP(addr[:]).String()},
|
{"IP", net.IP(addr[:]).String()},
|
||||||
{"coords", fmt.Sprint(v.coords)},
|
{"coords", fmt.Sprint(v.coords)},
|
||||||
{"bucket", fmt.Sprint(i)},
|
{"bucket", fmt.Sprint(i)},
|
||||||
|
{"peerOnly", fmt.Sprint(isPeer)},
|
||||||
{"lastSeen", fmt.Sprint(now.Sub(v.recv))},
|
{"lastSeen", fmt.Sprint(now.Sub(v.recv))},
|
||||||
}
|
}
|
||||||
infos = append(infos, info)
|
infos = append(infos, info)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getInfo(b.other)
|
getInfo(b.other, false)
|
||||||
getInfo(b.peers)
|
getInfo(b.peers, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
a.core.router.doAdmin(getDHT)
|
a.core.router.doAdmin(getDHT)
|
||||||
|
@ -197,8 +197,14 @@ func (t *dht) nBuckets() int {
|
|||||||
|
|
||||||
func (t *dht) insertIfNew(info *dhtInfo, isPeer bool) {
|
func (t *dht) insertIfNew(info *dhtInfo, isPeer bool) {
|
||||||
//fmt.Println("DEBUG: dht insertIfNew:", info.getNodeID(), info.coords)
|
//fmt.Println("DEBUG: dht insertIfNew:", info.getNodeID(), info.coords)
|
||||||
// Always inserts peers, inserts other nodes if not already present
|
// Insert if no "other" entry already exists
|
||||||
if isPeer || t.shouldInsert(info) {
|
nodeID := info.getNodeID()
|
||||||
|
bidx, isOK := t.getBucketIndex(nodeID)
|
||||||
|
if !isOK {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
b := t.getBucket(bidx)
|
||||||
|
if (isPeer && !b.containsOther(info)) || t.shouldInsert(info) {
|
||||||
// We've never heard this node before
|
// We've never heard this node before
|
||||||
// TODO is there a better time than "now" to set send/recv to?
|
// TODO is there a better time than "now" to set send/recv to?
|
||||||
// (Is there another "natural" choice that bootstraps faster?)
|
// (Is there another "natural" choice that bootstraps faster?)
|
||||||
@ -222,7 +228,7 @@ func (t *dht) insert(info *dhtInfo, isPeer bool) {
|
|||||||
if !isPeer && !b.containsOther(info) {
|
if !isPeer && !b.containsOther(info) {
|
||||||
// This is a new entry, give it an old age so it's pinged sooner
|
// This is a new entry, give it an old age so it's pinged sooner
|
||||||
// This speeds up bootstrapping
|
// This speeds up bootstrapping
|
||||||
info.recv = info.recv.Add(-time.Minute)
|
info.recv = info.recv.Add(-time.Hour)
|
||||||
}
|
}
|
||||||
// First drop any existing entry from the bucket
|
// First drop any existing entry from the bucket
|
||||||
b.drop(&info.key)
|
b.drop(&info.key)
|
||||||
|
Loading…
Reference in New Issue
Block a user