mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 10:01:17 +00:00
Rework priority groups, take 2 (#7700)
* Rework priority groups * Broken tests fix * Fix warning causing CI to fail * [Hack] Try restore backwards-compatibility * Fix peerset bug * Doc fixes and clean up * Error on state mismatch * Try debug CI * CI debugging * [CI debug] Can I please see this line * Revert "[CI debug] Can I please see this line" This reverts commit 4b7cf7c1511f579cd818b21d46bd11642dfac5cb. * Revert "CI debugging" This reverts commit 9011f1f564b860386dc7dd6ffa9fc34ea7107623. * Fix error! which isn't actually an error * Fix Ok() returned when actually Err() * Tweaks and fixes * Fix build * Peerset bugfix * [Debug] Try outbound GrandPa slots * Another bugfix * Revert "[Debug] Try outbound GrandPa slots" This reverts commit d175b9208c088faad77d9f0ce36ff6f48bd92dd3. * [Debug] Try outbound GrandPa slots * Apply suggestions from code review Co-authored-by: Max Inden <mail@max-inden.de> * Use consts for hardcoded peersets * Revert "Try debug CI" This reverts commit 62c4ad5e79c03d561c714a008022ecac463a597e. * Renames * Line widths * Add doc Co-authored-by: Max Inden <mail@max-inden.de>
This commit is contained in:
@@ -17,17 +17,11 @@
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
use libp2p::core::multiaddr::{Multiaddr, Protocol};
|
||||
use rand::seq::SliceRandom;
|
||||
use std::collections::HashMap;
|
||||
|
||||
use sp_authority_discovery::AuthorityId;
|
||||
use sc_network::PeerId;
|
||||
|
||||
/// The maximum number of authority connections initialized through the authority discovery module.
|
||||
///
|
||||
/// In other words the maximum size of the `authority` peerset priority group.
|
||||
const MAX_NUM_AUTHORITY_CONN: usize = 10;
|
||||
|
||||
/// Cache for [`AuthorityId`] -> [`Vec<Multiaddr>`] and [`PeerId`] -> [`AuthorityId`] mappings.
|
||||
pub(super) struct AddrCache {
|
||||
authority_id_to_addresses: HashMap<AuthorityId, Vec<Multiaddr>>,
|
||||
@@ -77,30 +71,6 @@ impl AddrCache {
|
||||
self.peer_id_to_authority_id.get(peer_id)
|
||||
}
|
||||
|
||||
/// Returns a single address for a random subset (maximum of [`MAX_NUM_AUTHORITY_CONN`]) of all
|
||||
/// known authorities.
|
||||
pub fn get_random_subset(&self) -> Vec<Multiaddr> {
|
||||
let mut rng = rand::thread_rng();
|
||||
|
||||
let mut addresses = self
|
||||
.authority_id_to_addresses
|
||||
.iter()
|
||||
.filter_map(|(_authority_id, addresses)| {
|
||||
debug_assert!(!addresses.is_empty());
|
||||
addresses
|
||||
.choose(&mut rng)
|
||||
})
|
||||
.collect::<Vec<&Multiaddr>>();
|
||||
|
||||
addresses.sort_unstable_by(|a, b| a.as_ref().cmp(b.as_ref()));
|
||||
addresses.dedup();
|
||||
|
||||
addresses
|
||||
.choose_multiple(&mut rng, MAX_NUM_AUTHORITY_CONN)
|
||||
.map(|a| (**a).clone())
|
||||
.collect()
|
||||
}
|
||||
|
||||
/// Removes all [`PeerId`]s and [`Multiaddr`]s from the cache that are not related to the given
|
||||
/// [`AuthorityId`]s.
|
||||
pub fn retain_ids(&mut self, authority_ids: &Vec<AuthorityId>) {
|
||||
@@ -192,11 +162,6 @@ mod tests {
|
||||
cache.insert(second.0.clone(), vec![second.1.clone()]);
|
||||
cache.insert(third.0.clone(), vec![third.1.clone()]);
|
||||
|
||||
let subset = cache.get_random_subset();
|
||||
assert!(
|
||||
subset.contains(&first.1) && subset.contains(&second.1) && subset.contains(&third.1),
|
||||
"Expect initial subset to contain all authorities.",
|
||||
);
|
||||
assert_eq!(
|
||||
Some(&vec![third.1.clone()]),
|
||||
cache.get_addresses_by_authority_id(&third.0),
|
||||
@@ -210,12 +175,6 @@ mod tests {
|
||||
|
||||
cache.retain_ids(&vec![first.0, second.0]);
|
||||
|
||||
let subset = cache.get_random_subset();
|
||||
assert!(
|
||||
subset.contains(&first.1) || subset.contains(&second.1),
|
||||
"Expected both first and second authority."
|
||||
);
|
||||
assert!(!subset.contains(&third.1), "Did not expect address from third authority");
|
||||
assert_eq!(
|
||||
None, cache.get_addresses_by_authority_id(&third.0),
|
||||
"Expect `get_addresses_by_authority_id` to not return `None` for third authority."
|
||||
|
||||
Reference in New Issue
Block a user