From 333be7aabf0b8e6f64dbc8fe141d0aa18dcb6f41 Mon Sep 17 00:00:00 2001 From: Suhas Daftuar Date: Tue, 26 Feb 2019 16:34:26 -0500 Subject: [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: f71fdda3bc2e7acd2a8b74e882364866b8b0f55b Tree-SHA512: 66c61a9f030b1666e98e4fe66dd6cfc5f1d03b2a1ec01567b195903db6e4412ac778f4464ee9ef35ae6faa1ab7e4b18ef7ecb9a7ced29e6494046990aebf7b76 --- src/addrman.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/addrman.cpp') diff --git a/src/addrman.cpp b/src/addrman.cpp index 468618095..45b686e1d 100644 --- a/src/addrman.cpp +++ b/src/addrman.cpp @@ -569,6 +569,13 @@ void CAddrMan::ResolveCollisions_() Good_(info_new, false, GetAdjustedTime()); 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 Good_(info_new, false, GetAdjustedTime()); -- cgit v1.2.3