mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 03:05:07 +03: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
					
				
					 2 changed files with 13 additions and 6 deletions
				
			
		| 
						 | 
					@ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue