HomePhabricator

Protect onion+localhost peers in ProtectEvictionCandidatesByRatio()

Description

Protect onion+localhost peers in ProtectEvictionCandidatesByRatio()

Summary:
https://github.com/bitcoin/bitcoin/pull/20197/commits/8b1e156143740a5548dc7b601d40fb141e6aae1c

Add m_inbound_onion to AttemptToEvictConnection() and an m_is_onion struct member to NodeEvictionCandidate and tests.

We'll use these in the peer eviction logic to protect inbound onion peers
in addition to the existing protection of localhost peers.

https://github.com/bitcoin/bitcoin/pull/20197/commits/caa21f586f951d626a67f391050c3644f1057f57

Now that we have a reliable way to detect inbound onion peers, this commit
updates our existing eviction protection of 1/4 localhost peers to instead
protect up to 1/4 onion peers (connected via our tor control service), sorted by
longest uptime. Any remaining slots of the 1/4 are then allocated to protect
localhost peers, or 2 localhost peers if no slots remain and 2 or more onion
peers are protected, sorted by longest uptime.

The goal is to avoid penalizing onion peers, due to their higher min ping times
relative to IPv4 and IPv6 peers, and improve our diversity of peer connections.

Thank you to Gregory Maxwell, Suhas Daftuar, Vasil Dimov and Pieter Wuille
for valuable review feedback that shaped the direction.

https://github.com/bitcoin/bitcoin/pull/20197/commits/0cca08a8ee33b4e05ff586ae4fd914f5ea860cea

Add unit test coverage for our onion peer eviction protectioni

Note: the commits are squashed to have the feature and corresponding test at the same time

This concludes backport of core#20197

Test Plan: ninja all check-all

Reviewers: #bitcoin_abc, Fabien

Reviewed By: #bitcoin_abc, Fabien

Subscribers: Fabien

Differential Revision: https://reviews.bitcoinabc.org/D10980

Details

Provenance
Jon Atack <jon@atack.com>Authored on Dec 25 2020, 22:56
PiRKCommitted on Feb 4 2022, 10:59
PiRKPushed on Feb 4 2022, 10:59
Reviewer
Restricted Project
Differential Revision
D10980: Protect onion+localhost peers in ProtectEvictionCandidatesByRatio()
Parents
rABC443b5d94aef2: Refactor EraseLastKElements to be a special case of EraseLastKElementsIf
Branches
Unknown
Tags
Unknown