Incorporate sc-peerset into sc-network (#14236)

This commit is contained in:
Dmitry Markin
2023-05-29 20:56:57 +03:00
committed by GitHub
parent b8bca85e9d
commit d4b2bf7394
40 changed files with 306 additions and 337 deletions
@@ -17,6 +17,7 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>.
use crate::{
peerset::DropReason,
protocol::notifications::handler::{
self, NotificationsSink, NotifsHandler, NotifsHandlerIn, NotifsHandlerOut,
},
@@ -38,7 +39,6 @@ use libp2p::{
use log::{debug, error, info, trace, warn};
use parking_lot::RwLock;
use rand::distributions::{Distribution as _, Uniform};
use sc_peerset::DropReason;
use smallvec::SmallVec;
use std::{
cmp,
@@ -108,10 +108,10 @@ pub struct Notifications {
notif_protocols: Vec<handler::ProtocolConfig>,
/// Receiver for instructions about who to connect to or disconnect from.
peerset: sc_peerset::Peerset,
peerset: crate::peerset::Peerset,
/// List of peers in our state.
peers: FnvHashMap<(PeerId, sc_peerset::SetId), PeerState>,
peers: FnvHashMap<(PeerId, crate::peerset::SetId), PeerState>,
/// The elements in `peers` occasionally contain `Delay` objects that we would normally have
/// to be polled one by one. In order to avoid doing so, as an optimization, every `Delay` is
@@ -121,7 +121,7 @@ pub struct Notifications {
/// By design, we never remove elements from this list. Elements are removed only when the
/// `Delay` triggers. As such, this stream may produce obsolete elements.
delays: stream::FuturesUnordered<
Pin<Box<dyn Future<Output = (DelayId, PeerId, sc_peerset::SetId)> + Send>>,
Pin<Box<dyn Future<Output = (DelayId, PeerId, crate::peerset::SetId)> + Send>>,
>,
/// [`DelayId`] to assign to the next delay.
@@ -133,7 +133,7 @@ pub struct Notifications {
/// We generate indices to identify incoming connections. This is the next value for the index
/// to use when a connection is incoming.
next_incoming_index: sc_peerset::IncomingIndex,
next_incoming_index: crate::peerset::IncomingIndex,
/// Events to produce from `poll()`.
events: VecDeque<ToSwarm<NotificationsOut, NotifsHandlerIn>>,
@@ -232,7 +232,7 @@ enum PeerState {
backoff_until: Option<Instant>,
/// Incoming index tracking this connection.
incoming_index: sc_peerset::IncomingIndex,
incoming_index: crate::peerset::IncomingIndex,
/// List of connections with this peer, and their state.
connections: SmallVec<[(ConnectionId, ConnectionState); crate::MAX_CONNECTIONS_PER_PEER]>,
@@ -296,12 +296,12 @@ struct IncomingPeer {
/// Id of the remote peer of the incoming substream.
peer_id: PeerId,
/// Id of the set the incoming substream would belong to.
set_id: sc_peerset::SetId,
set_id: crate::peerset::SetId,
/// If true, this "incoming" still corresponds to an actual connection. If false, then the
/// connection corresponding to it has been closed or replaced already.
alive: bool,
/// Id that the we sent to the peerset.
incoming_id: sc_peerset::IncomingIndex,
incoming_id: crate::peerset::IncomingIndex,
}
/// Event that can be emitted by the `Notifications`.
@@ -312,7 +312,7 @@ pub enum NotificationsOut {
/// Id of the peer we are connected to.
peer_id: PeerId,
/// Peerset set ID the substream is tied to.
set_id: sc_peerset::SetId,
set_id: crate::peerset::SetId,
/// If `Some`, a fallback protocol name has been used rather the main protocol name.
/// Always matches one of the fallback names passed at initialization.
negotiated_fallback: Option<ProtocolName>,
@@ -332,7 +332,7 @@ pub enum NotificationsOut {
/// Id of the peer we are connected to.
peer_id: PeerId,
/// Peerset set ID the substream is tied to.
set_id: sc_peerset::SetId,
set_id: crate::peerset::SetId,
/// Replacement for the previous [`NotificationsSink`].
notifications_sink: NotificationsSink,
},
@@ -343,7 +343,7 @@ pub enum NotificationsOut {
/// Id of the peer we were connected to.
peer_id: PeerId,
/// Peerset set ID the substream was tied to.
set_id: sc_peerset::SetId,
set_id: crate::peerset::SetId,
},
/// Receives a message on a custom protocol substream.
@@ -353,7 +353,7 @@ pub enum NotificationsOut {
/// Id of the peer the message came from.
peer_id: PeerId,
/// Peerset set ID the substream is tied to.
set_id: sc_peerset::SetId,
set_id: crate::peerset::SetId,
/// Message that has been received.
message: BytesMut,
},
@@ -362,7 +362,7 @@ pub enum NotificationsOut {
impl Notifications {
/// Creates a `CustomProtos`.
pub fn new(
peerset: sc_peerset::Peerset,
peerset: crate::peerset::Peerset,
notif_protocols: impl Iterator<Item = ProtocolConfig>,
) -> Self {
let notif_protocols = notif_protocols
@@ -383,7 +383,7 @@ impl Notifications {
delays: Default::default(),
next_delay_id: DelayId(0),
incoming: SmallVec::new(),
next_incoming_index: sc_peerset::IncomingIndex(0),
next_incoming_index: crate::peerset::IncomingIndex(0),
events: VecDeque::new(),
}
}
@@ -391,7 +391,7 @@ impl Notifications {
/// Modifies the handshake of the given notifications protocol.
pub fn set_notif_protocol_handshake(
&mut self,
set_id: sc_peerset::SetId,
set_id: crate::peerset::SetId,
handshake_message: impl Into<Vec<u8>>,
) {
if let Some(p) = self.notif_protocols.get_mut(usize::from(set_id)) {
@@ -413,18 +413,18 @@ impl Notifications {
}
/// Returns true if we have an open substream to the given peer.
pub fn is_open(&self, peer_id: &PeerId, set_id: sc_peerset::SetId) -> bool {
pub fn is_open(&self, peer_id: &PeerId, set_id: crate::peerset::SetId) -> bool {
self.peers.get(&(*peer_id, set_id)).map(|p| p.is_open()).unwrap_or(false)
}
/// Disconnects the given peer if we are connected to it.
pub fn disconnect_peer(&mut self, peer_id: &PeerId, set_id: sc_peerset::SetId) {
pub fn disconnect_peer(&mut self, peer_id: &PeerId, set_id: crate::peerset::SetId) {
trace!(target: "sub-libp2p", "External API => Disconnect({}, {:?})", peer_id, set_id);
self.disconnect_peer_inner(peer_id, set_id);
}
/// Inner implementation of `disconnect_peer`.
fn disconnect_peer_inner(&mut self, peer_id: &PeerId, set_id: sc_peerset::SetId) {
fn disconnect_peer_inner(&mut self, peer_id: &PeerId, set_id: crate::peerset::SetId) {
let mut entry = if let Entry::Occupied(entry) = self.peers.entry((*peer_id, set_id)) {
entry
} else {
@@ -541,7 +541,7 @@ impl Notifications {
/// Returns the list of reserved peers.
pub fn reserved_peers(
&self,
set_id: sc_peerset::SetId,
set_id: crate::peerset::SetId,
pending_response: oneshot::Sender<Vec<PeerId>>,
) {
self.peerset.reserved_peers(set_id, pending_response);
@@ -553,7 +553,7 @@ impl Notifications {
}
/// Function that is called when the peerset wants us to connect to a peer.
fn peerset_report_connect(&mut self, peer_id: PeerId, set_id: sc_peerset::SetId) {
fn peerset_report_connect(&mut self, peer_id: PeerId, set_id: crate::peerset::SetId) {
// If `PeerId` is unknown to us, insert an entry, start dialing, and return early.
let mut occ_entry = match self.peers.entry((peer_id, set_id)) {
Entry::Occupied(entry) => entry,
@@ -731,7 +731,7 @@ impl Notifications {
}
/// Function that is called when the peerset wants us to disconnect from a peer.
fn peerset_report_disconnect(&mut self, peer_id: PeerId, set_id: sc_peerset::SetId) {
fn peerset_report_disconnect(&mut self, peer_id: PeerId, set_id: crate::peerset::SetId) {
let mut entry = match self.peers.entry((peer_id, set_id)) {
Entry::Occupied(entry) => entry,
Entry::Vacant(entry) => {
@@ -839,7 +839,7 @@ impl Notifications {
/// Function that is called when the peerset wants us to accept a connection
/// request from a peer.
fn peerset_report_accept(&mut self, index: sc_peerset::IncomingIndex) {
fn peerset_report_accept(&mut self, index: crate::peerset::IncomingIndex) {
let incoming = if let Some(pos) = self.incoming.iter().position(|i| i.incoming_id == index)
{
self.incoming.remove(pos)
@@ -925,7 +925,7 @@ impl Notifications {
}
/// Function that is called when the peerset wants us to reject an incoming peer.
fn peerset_report_reject(&mut self, index: sc_peerset::IncomingIndex) {
fn peerset_report_reject(&mut self, index: crate::peerset::IncomingIndex) {
let incoming = if let Some(pos) = self.incoming.iter().position(|i| i.incoming_id == index)
{
self.incoming.remove(pos)
@@ -1059,7 +1059,7 @@ impl NetworkBehaviour for Notifications {
connection_id,
..
}) => {
for set_id in (0..self.notif_protocols.len()).map(sc_peerset::SetId::from) {
for set_id in (0..self.notif_protocols.len()).map(crate::peerset::SetId::from) {
match self.peers.entry((peer_id, set_id)).or_insert(PeerState::Poisoned) {
// Requested | PendingRequest => Enabled
st @ &mut PeerState::Requested |
@@ -1113,7 +1113,7 @@ impl NetworkBehaviour for Notifications {
}
},
FromSwarm::ConnectionClosed(ConnectionClosed { peer_id, connection_id, .. }) => {
for set_id in (0..self.notif_protocols.len()).map(sc_peerset::SetId::from) {
for set_id in (0..self.notif_protocols.len()).map(crate::peerset::SetId::from) {
let mut entry = if let Entry::Occupied(entry) =
self.peers.entry((peer_id, set_id))
{
@@ -1406,7 +1406,7 @@ impl NetworkBehaviour for Notifications {
if let Some(peer_id) = peer_id {
trace!(target: "sub-libp2p", "Libp2p => Dial failure for {:?}", peer_id);
for set_id in (0..self.notif_protocols.len()).map(sc_peerset::SetId::from) {
for set_id in (0..self.notif_protocols.len()).map(crate::peerset::SetId::from) {
if let Entry::Occupied(mut entry) = self.peers.entry((peer_id, set_id)) {
match mem::replace(entry.get_mut(), PeerState::Poisoned) {
// The peer is not in our list.
@@ -1485,7 +1485,7 @@ impl NetworkBehaviour for Notifications {
) {
match event {
NotifsHandlerOut::OpenDesiredByRemote { protocol_index } => {
let set_id = sc_peerset::SetId::from(protocol_index);
let set_id = crate::peerset::SetId::from(protocol_index);
trace!(target: "sub-libp2p",
"Handler({:?}, {:?}]) => OpenDesiredByRemote({:?})",
@@ -1675,7 +1675,7 @@ impl NetworkBehaviour for Notifications {
},
NotifsHandlerOut::CloseDesired { protocol_index } => {
let set_id = sc_peerset::SetId::from(protocol_index);
let set_id = crate::peerset::SetId::from(protocol_index);
trace!(target: "sub-libp2p",
"Handler({}, {:?}) => CloseDesired({:?})",
@@ -1775,7 +1775,7 @@ impl NetworkBehaviour for Notifications {
},
NotifsHandlerOut::CloseResult { protocol_index } => {
let set_id = sc_peerset::SetId::from(protocol_index);
let set_id = crate::peerset::SetId::from(protocol_index);
trace!(target: "sub-libp2p",
"Handler({}, {:?}) => CloseResult({:?})",
@@ -1814,7 +1814,7 @@ impl NetworkBehaviour for Notifications {
notifications_sink,
..
} => {
let set_id = sc_peerset::SetId::from(protocol_index);
let set_id = crate::peerset::SetId::from(protocol_index);
trace!(target: "sub-libp2p",
"Handler({}, {:?}) => OpenResultOk({:?})",
peer_id, connection_id, set_id);
@@ -1880,7 +1880,7 @@ impl NetworkBehaviour for Notifications {
},
NotifsHandlerOut::OpenResultErr { protocol_index } => {
let set_id = sc_peerset::SetId::from(protocol_index);
let set_id = crate::peerset::SetId::from(protocol_index);
trace!(target: "sub-libp2p",
"Handler({:?}, {:?}) => OpenResultErr({:?})",
peer_id, connection_id, set_id);
@@ -1969,7 +1969,7 @@ impl NetworkBehaviour for Notifications {
},
NotifsHandlerOut::Notification { protocol_index, message } => {
let set_id = sc_peerset::SetId::from(protocol_index);
let set_id = crate::peerset::SetId::from(protocol_index);
if self.is_open(&peer_id, set_id) {
trace!(
target: "sub-libp2p",
@@ -2015,16 +2015,16 @@ impl NetworkBehaviour for Notifications {
// Note that the peerset is a *best effort* crate, and we have to use defensive programming.
loop {
match futures::Stream::poll_next(Pin::new(&mut self.peerset), cx) {
Poll::Ready(Some(sc_peerset::Message::Accept(index))) => {
Poll::Ready(Some(crate::peerset::Message::Accept(index))) => {
self.peerset_report_accept(index);
},
Poll::Ready(Some(sc_peerset::Message::Reject(index))) => {
Poll::Ready(Some(crate::peerset::Message::Reject(index))) => {
self.peerset_report_reject(index);
},
Poll::Ready(Some(sc_peerset::Message::Connect { peer_id, set_id, .. })) => {
Poll::Ready(Some(crate::peerset::Message::Connect { peer_id, set_id, .. })) => {
self.peerset_report_connect(peer_id, set_id);
},
Poll::Ready(Some(sc_peerset::Message::Drop { peer_id, set_id, .. })) => {
Poll::Ready(Some(crate::peerset::Message::Drop { peer_id, set_id, .. })) => {
self.peerset_report_disconnect(peer_id, set_id);
},
Poll::Ready(None) => {
@@ -2105,9 +2105,8 @@ impl NetworkBehaviour for Notifications {
#[allow(deprecated)]
mod tests {
use super::*;
use crate::protocol::notifications::handler::tests::*;
use crate::{peerset::IncomingIndex, protocol::notifications::handler::tests::*};
use libp2p::swarm::AddressRecord;
use sc_peerset::IncomingIndex;
use std::{collections::HashSet, iter};
impl PartialEq for ConnectionState {
@@ -2153,11 +2152,11 @@ mod tests {
}
}
fn development_notifs() -> (Notifications, sc_peerset::PeersetHandle) {
fn development_notifs() -> (Notifications, crate::peerset::PeersetHandle) {
let (peerset, peerset_handle) = {
let mut sets = Vec::with_capacity(1);
sets.push(sc_peerset::SetConfig {
sets.push(crate::peerset::SetConfig {
in_peers: 25,
out_peers: 25,
bootnodes: Vec::new(),
@@ -2165,7 +2164,7 @@ mod tests {
reserved_only: false,
});
sc_peerset::Peerset::from_config(sc_peerset::PeersetConfig { sets })
crate::peerset::Peerset::from_config(crate::peerset::PeersetConfig { sets })
};
(
@@ -2311,7 +2310,7 @@ mod tests {
assert!(std::matches!(
notif.incoming.pop(),
Some(IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }),
Some(IncomingPeer { alive: true, incoming_id: crate::peerset::IncomingIndex(0), .. }),
));
}
@@ -2354,7 +2353,7 @@ mod tests {
#[test]
fn peerset_report_connect_backoff() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -2421,7 +2420,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -2455,7 +2454,7 @@ mod tests {
#[test]
fn peerset_disconnect_disable_pending_enable() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -2504,7 +2503,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -2539,7 +2538,7 @@ mod tests {
fn peerset_disconnect_requested() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
// Set peer into `Requested` state.
notif.peerset_report_connect(peer, set_id);
@@ -2553,7 +2552,7 @@ mod tests {
#[test]
fn peerset_disconnect_pending_request() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -2608,7 +2607,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -2635,17 +2634,17 @@ mod tests {
assert!(std::matches!(
notif.incoming[0],
IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. },
IncomingPeer { alive: true, incoming_id: crate::peerset::IncomingIndex(0), .. },
));
notif.disconnect_peer(&peer, set_id);
assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. })));
assert!(std::matches!(
notif.incoming[0],
IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. },
IncomingPeer { alive: false, incoming_id: crate::peerset::IncomingIndex(0), .. },
));
notif.peerset_report_accept(sc_peerset::IncomingIndex(0));
notif.peerset_report_accept(crate::peerset::IncomingIndex(0));
assert_eq!(notif.incoming.len(), 0);
assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(PeerState::Disabled { .. })));
}
@@ -2656,7 +2655,7 @@ mod tests {
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let conn2 = ConnectionId::new_unchecked(1);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -2710,7 +2709,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -2744,7 +2743,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -2780,7 +2779,7 @@ mod tests {
assert!(notif.peers.get(&(peer, set_id)).is_none());
assert!(std::matches!(
notif.incoming[0],
IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. },
IncomingPeer { alive: false, incoming_id: crate::peerset::IncomingIndex(0), .. },
));
}
@@ -2790,7 +2789,7 @@ mod tests {
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let conn1 = ConnectionId::new_unchecked(1);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -2858,7 +2857,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -2886,7 +2885,7 @@ mod tests {
// We rely on the implementation detail that incoming indices are counted
// from 0 to not mock the `Peerset`.
notif.peerset_report_accept(sc_peerset::IncomingIndex(0));
notif.peerset_report_accept(crate::peerset::IncomingIndex(0));
assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. })));
// open new substream
@@ -2913,7 +2912,7 @@ mod tests {
let peer = PeerId::random();
let conn1 = ConnectionId::new_unchecked(0);
let conn2 = ConnectionId::new_unchecked(1);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -3006,7 +3005,7 @@ mod tests {
fn dial_failure_for_requested_peer() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
// Set peer into `Requested` state.
notif.peerset_report_connect(peer, set_id);
@@ -3030,7 +3029,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -3077,7 +3076,7 @@ mod tests {
#[test]
fn peerset_report_connect_backoff_expired() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -3126,7 +3125,7 @@ mod tests {
fn peerset_report_disconnect_disabled() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
@@ -3151,7 +3150,7 @@ mod tests {
#[test]
fn peerset_report_disconnect_backoff() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -3197,7 +3196,7 @@ mod tests {
#[test]
fn peer_is_backed_off_if_both_connections_get_closed_while_peer_is_disabled_with_back_off() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn1 = ConnectionId::new_unchecked(0);
let conn2 = ConnectionId::new_unchecked(1);
@@ -3271,7 +3270,7 @@ mod tests {
fn inject_connection_closed_incoming_with_backoff() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
@@ -3324,7 +3323,7 @@ mod tests {
let peer = PeerId::random();
let conn1 = ConnectionId::new_unchecked(0);
let conn2 = ConnectionId::new_unchecked(1);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -3379,7 +3378,7 @@ mod tests {
let peer = PeerId::random();
let conn1 = ConnectionId::new_unchecked(0);
let conn2 = ConnectionId::new_unchecked(1);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -3437,7 +3436,7 @@ mod tests {
let peer = PeerId::random();
let conn1 = ConnectionId::new_unchecked(0);
let conn2 = ConnectionId::new_unchecked(1);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -3502,7 +3501,7 @@ mod tests {
#[test]
fn inject_dial_failure_for_pending_request() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -3566,7 +3565,7 @@ mod tests {
fn peerstate_incoming_open_desired_by_remote() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let conn1 = ConnectionId::new_unchecked(0);
let conn2 = ConnectionId::new_unchecked(1);
let connected = ConnectedPoint::Listener {
@@ -3620,7 +3619,7 @@ mod tests {
async fn remove_backoff_peer_after_timeout() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
@@ -3699,7 +3698,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -3817,7 +3816,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -3865,7 +3864,7 @@ mod tests {
#[cfg(debug_assertions)]
fn peerset_report_connect_with_disabled_pending_enable_peer() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -3912,7 +3911,7 @@ mod tests {
fn peerset_report_connect_with_requested_peer() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
// Set peer into `Requested` state.
notif.peerset_report_connect(peer, set_id);
@@ -3927,7 +3926,7 @@ mod tests {
#[cfg(debug_assertions)]
fn peerset_report_connect_with_pending_requested() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -3985,7 +3984,7 @@ mod tests {
fn peerset_report_connect_with_incoming_peer() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
@@ -4020,7 +4019,7 @@ mod tests {
fn peerset_report_disconnect_with_incoming_peer() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
@@ -4057,7 +4056,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -4084,11 +4083,11 @@ mod tests {
assert!(std::matches!(
notif.incoming[0],
IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. },
IncomingPeer { alive: true, incoming_id: crate::peerset::IncomingIndex(0), .. },
));
notif.peers.remove(&(peer, set_id));
notif.peerset_report_accept(sc_peerset::IncomingIndex(0));
notif.peerset_report_accept(crate::peerset::IncomingIndex(0));
}
#[test]
@@ -4098,7 +4097,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -4126,7 +4125,7 @@ mod tests {
assert!(std::matches!(
notif.incoming[0],
IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. },
IncomingPeer { alive: true, incoming_id: crate::peerset::IncomingIndex(0), .. },
));
notif.peerset_report_connect(peer, set_id);
@@ -4137,7 +4136,7 @@ mod tests {
assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. })));
notif.incoming[0].alive = true;
notif.peerset_report_accept(sc_peerset::IncomingIndex(0));
notif.peerset_report_accept(crate::peerset::IncomingIndex(0));
}
#[test]
@@ -4166,7 +4165,7 @@ mod tests {
fn disconnect_non_existent_peer() {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
notif.peerset_report_disconnect(peer, set_id);
@@ -4199,7 +4198,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -4237,7 +4236,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -4263,7 +4262,7 @@ mod tests {
assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. })));
assert!(std::matches!(
notif.incoming[0],
IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. },
IncomingPeer { alive: true, incoming_id: crate::peerset::IncomingIndex(0), .. },
));
notif.peers.remove(&(peer, set_id));
@@ -4277,7 +4276,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -4318,7 +4317,7 @@ mod tests {
#[cfg(debug_assertions)]
fn inject_non_existent_connection_closed_for_disabled_peer() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -4353,7 +4352,7 @@ mod tests {
#[cfg(debug_assertions)]
fn inject_non_existent_connection_closed_for_disabled_pending_enable() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -4406,7 +4405,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -4450,7 +4449,7 @@ mod tests {
let (mut notif, _peerset) = development_notifs();
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let connected = ConnectedPoint::Listener {
local_addr: Multiaddr::empty(),
send_back_addr: Multiaddr::empty(),
@@ -4495,7 +4494,7 @@ mod tests {
#[cfg(debug_assertions)]
fn inject_connection_closed_for_backoff_peer() {
let (mut notif, _peerset) = development_notifs();
let set_id = sc_peerset::SetId::from(0);
let set_id = crate::peerset::SetId::from(0);
let peer = PeerId::random();
let conn = ConnectionId::new_unchecked(0);
let connected = ConnectedPoint::Listener {
@@ -65,19 +65,24 @@ fn build_nodes() -> (Swarm<CustomProtoWithAddr>, Swarm<CustomProtoWithAddr>) {
.timeout(Duration::from_secs(20))
.boxed();
let (peerset, _) = sc_peerset::Peerset::from_config(sc_peerset::PeersetConfig {
sets: vec![sc_peerset::SetConfig {
in_peers: 25,
out_peers: 25,
bootnodes: if index == 0 {
keypairs.iter().skip(1).map(|keypair| keypair.public().to_peer_id()).collect()
} else {
vec![]
},
reserved_nodes: Default::default(),
reserved_only: false,
}],
});
let (peerset, handle) =
crate::peerset::Peerset::from_config(crate::peerset::PeersetConfig {
sets: vec![crate::peerset::SetConfig {
in_peers: 25,
out_peers: 25,
bootnodes: if index == 0 {
keypairs
.iter()
.skip(1)
.map(|keypair| keypair.public().to_peer_id())
.collect()
} else {
vec![]
},
reserved_nodes: Default::default(),
reserved_only: false,
}],
});
let behaviour = CustomProtoWithAddr {
inner: Notifications::new(
@@ -89,6 +94,7 @@ fn build_nodes() -> (Swarm<CustomProtoWithAddr>, Swarm<CustomProtoWithAddr>) {
max_notification_size: 1024 * 1024,
}),
),
_peerset_handle: handle,
addrs: addrs
.iter()
.enumerate()
@@ -124,6 +130,8 @@ fn build_nodes() -> (Swarm<CustomProtoWithAddr>, Swarm<CustomProtoWithAddr>) {
/// Wraps around the `CustomBehaviour` network behaviour, and adds hardcoded node addresses to it.
struct CustomProtoWithAddr {
inner: Notifications,
// We need to keep `PeersetHandle` for `Peerset` not to shut down.
_peerset_handle: crate::peerset::PeersetHandle,
addrs: Vec<(PeerId, Multiaddr)>,
}
@@ -266,7 +274,7 @@ fn reconnect_after_disconnect() {
if service2_state == ServiceState::FirstConnec {
service1.behaviour_mut().disconnect_peer(
Swarm::local_peer_id(&service2),
sc_peerset::SetId::from(0),
crate::peerset::SetId::from(0),
);
}
},
@@ -289,7 +297,7 @@ fn reconnect_after_disconnect() {
if service1_state == ServiceState::FirstConnec {
service1.behaviour_mut().disconnect_peer(
Swarm::local_peer_id(&service2),
sc_peerset::SetId::from(0),
crate::peerset::SetId::from(0),
);
}
},