-
Notifications
You must be signed in to change notification settings - Fork 23
Open
Description
I ran into a strange issue while working on a litep2p traffic generator tool. In nutshell I wanted to create a lot of connections to a node and leave them in half complete state. Concretely - dial a node and poll litep2p until ConnectionClosed event is received. Then I break out from the loop and move on:
pub async fn do_connect(
network: Networking,
validator_multiaddr: Multiaddr,
para_id: ParaId,
) {
let Networking {
mut identify_handle,
mut block_announce_handle,
mut collation_handle,
mut req_collation_handle,
instance: mut litep2p,
} = network;
let local_peer_id = litep2p.local_peer_id().clone();
tracing::info!("peer id {:?}", local_peer_id);
tracing::info!("Dialing {:?}", validator_multiaddr);
litep2p.dial_address(validator_multiaddr).await.unwrap();
tracing::info!("Waiting for connection to be established...");
// Wait for connection:
let validator_peer_id = loop {
let event = litep2p.next_event().await.unwrap();
tracing::info!("Event litep2p (waiting for connection): {:?}", event);
if let Litep2pEvent::ConnectionEstablished { peer, .. } = event {
break peer;
}
};
tracing::info!("Connection established");
// Litep2p needs to be polled to drive internal state.
loop {
let event = litep2p.next_event().await.unwrap();
if let Litep2pEvent::ConnectionClosed { .. } = event {
tracing::info!("Connection closed");
break;
} else {
tracing::info!("Event litep2p: {:?}", event);
}
}
tracing::info!("after loop");
}The code is called in a loop:
loop {
let n = networking::Networking::new(&genesis_hash);
tracing::info!("before do_connect");
do_connection_spam(n, validator_multiaddr.clone(), para_id).await;
tracing::info!("after do_connect");
}The output from this code is:
2025-10-31T10:00:22.546793Z INFO malus_collator::networking: peer id PeerId("12D3KooWBcsj7ELhW861fTciFfweUxsXjSK1vm8dwApgFmSTyaL3")
2025-10-31T10:00:22.546867Z INFO malus_collator::networking: Dialing "/ip4/127.0.0.1/tcp/55120/ws/p2p/12D3KooWQxLRH6mMorYJEL1ohnqx1uMDd3Z7HytYhGXwr9W7EoNj"
2025-10-31T10:00:22.547072Z INFO malus_collator::networking: Waiting for connection to be established...
2025-10-31T10:00:22.551572Z INFO malus_collator::networking: Event litep2p (waiting for connection): ConnectionEstablished { peer: PeerId("12D3KooWQxLRH6mMorYJEL1ohnqx1uMDd3Z7HytYhGXwr9W7EoNj"), endpoint: Dialer { address: "/ip4/127.0.0.1/tcp/55120/ws/p2p/12D3KooWQxLRH6mMorYJEL1ohnqx1uMDd3Z7HytYhGXwr9W7EoNj", connection_id: ConnectionId(0) } }
2025-10-31T10:00:22.551616Z INFO malus_collator::networking: Connection established
2025-10-31T10:00:27.555192Z INFO malus_collator::networking: Connection closed
2025-10-31T10:00:27.555317Z INFO malus_collator::networking: after loop
2025-10-31T10:00:27.555924Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.555903Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556009Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556053Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556075Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556092Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556095Z WARN litep2p::ipfs::identify: transport service stream ended, terminating identify event loop
2025-10-31T10:00:27.556110Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556224Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556334Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556374Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556392Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556409Z WARN litep2p::transport-service: transport service closed
2025-10-31T10:00:27.556425Z WARN litep2p::transport-service: transport service closed
Where WARN litep2p::transport-service: transport service closed is logged indefinitely. Also I noteed that "after loop" is logged but "after do_connect" is never logged.
For sure what I do is incorrect but probably shouldn't end up in a infinite loop?
lexnv
Metadata
Metadata
Assignees
Labels
No labels