mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-20 13:37:28 +02:00
[addrman] Ensure collisions eventually get resolved
After 40 minutes, time out a test-before-evict entry and just evict without
testing. Otherwise, if we were unable to test an entry for some reason, we
might break using feelers altogether.
Github-Pull: #15486
Rebased-From: f71fdda3bc
Tree-SHA512: 66c61a9f030b1666e98e4fe66dd6cfc5f1d03b2a1ec01567b195903db6e4412ac778f4464ee9ef35ae6faa1ab7e4b18ef7ecb9a7ced29e6494046990aebf7b76
This commit is contained in:
parent
487f0c3dc9
commit
333be7aabf
2 changed files with 10 additions and 0 deletions
|
|
@ -569,6 +569,13 @@ void CAddrMan::ResolveCollisions_()
|
||||||
Good_(info_new, false, GetAdjustedTime());
|
Good_(info_new, false, GetAdjustedTime());
|
||||||
erase_collision = true;
|
erase_collision = true;
|
||||||
}
|
}
|
||||||
|
} else if (GetAdjustedTime() - info_new.nLastSuccess > ADDRMAN_TEST_WINDOW) {
|
||||||
|
// If the collision hasn't resolved in some reasonable amount of time,
|
||||||
|
// just evict the old entry -- we must not be able to
|
||||||
|
// connect to it for some reason.
|
||||||
|
LogPrint(BCLog::ADDRMAN, "Unable to test; swapping %s for %s in tried table anyway\n", info_new.ToString(), info_old.ToString());
|
||||||
|
Good_(info_new, false, GetAdjustedTime());
|
||||||
|
erase_collision = true;
|
||||||
}
|
}
|
||||||
} else { // Collision is not actually a collision anymore
|
} else { // Collision is not actually a collision anymore
|
||||||
Good_(info_new, false, GetAdjustedTime());
|
Good_(info_new, false, GetAdjustedTime());
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,9 @@ public:
|
||||||
//! the maximum number of tried addr collisions to store
|
//! the maximum number of tried addr collisions to store
|
||||||
#define ADDRMAN_SET_TRIED_COLLISION_SIZE 10
|
#define ADDRMAN_SET_TRIED_COLLISION_SIZE 10
|
||||||
|
|
||||||
|
//! the maximum time we'll spend trying to resolve a tried table collision, in seconds
|
||||||
|
static const int64_t ADDRMAN_TEST_WINDOW = 40*60; // 40 minutes
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stochastical (IP) address manager
|
* Stochastical (IP) address manager
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue