mirror of
https://github.com/cwinfo/yggdrasil-go.git
synced 2024-11-10 06:20:26 +00:00
add max pings before timing out a successor
This commit is contained in:
parent
63d6ab4251
commit
d851d9afe7
@ -16,6 +16,7 @@ type dhtInfo struct {
|
|||||||
send time.Time // When we last sent a message
|
send time.Time // When we last sent a message
|
||||||
recv time.Time // When we last received a message
|
recv time.Time // When we last received a message
|
||||||
throttle time.Duration
|
throttle time.Duration
|
||||||
|
pings int // Time out if at least 3 consecutive maintenance pings drop
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the *NodeID associated with dhtInfo.key, calculating it on the fly the first time or from a cache all subsequent times.
|
// Returns the *NodeID associated with dhtInfo.key, calculating it on the fly the first time or from a cache all subsequent times.
|
||||||
@ -314,7 +315,7 @@ func (t *dht) doMaintenance() {
|
|||||||
var successor *dhtInfo
|
var successor *dhtInfo
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
for infoID, info := range t.table {
|
for infoID, info := range t.table {
|
||||||
if now.Sub(info.recv) > time.Minute {
|
if now.Sub(info.recv) > time.Minute || info.pings > 3 {
|
||||||
delete(t.table, infoID)
|
delete(t.table, infoID)
|
||||||
} else if successor == nil || dht_ordered(&t.nodeID, &infoID, successor.getNodeID()) {
|
} else if successor == nil || dht_ordered(&t.nodeID, &infoID, successor.getNodeID()) {
|
||||||
successor = info
|
successor = info
|
||||||
@ -324,5 +325,6 @@ func (t *dht) doMaintenance() {
|
|||||||
now.Sub(successor.recv) > successor.throttle &&
|
now.Sub(successor.recv) > successor.throttle &&
|
||||||
now.Sub(successor.send) > 6*time.Second {
|
now.Sub(successor.send) > 6*time.Second {
|
||||||
t.ping(successor, nil)
|
t.ping(successor, nil)
|
||||||
|
successor.pings++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user