transport: Limit dial concurrency and bound total dialing time#538
Merged
Conversation
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
skunert
reviewed
Feb 20, 2026
| .map_err(|error| (open_address, error.into())) | ||
| } | ||
| })) | ||
| .buffer_unordered(max_parallel_dials); |
There was a problem hiding this comment.
Hmm do we not limit the max adresses already here?
| Err(error) => { | ||
| // Deadline for the overall dial attempt, including all retries. This is to prevent | ||
| // retry attempts from indefinitely delaying the dial result. | ||
| let deadline = tokio::time::sleep(2 * connection_open_timeout); |
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io>
dmitry-markin
approved these changes
Feb 25, 2026
Collaborator
dmitry-markin
left a comment
There was a problem hiding this comment.
Cool! We have parity with libp2p in dialing approach now.
dmitry-markin
added a commit
that referenced
this pull request
Feb 27, 2026
## [0.13.1] - 2026-02-27 This release includes multiple fixes of transports and protocols, fixing connection stability issues with other librariies (specifically, [smoldot](https://github.com/smol-dot/smoldot/)) and increasing success rates of dialing & opening substreams, especially in extreme cases when remote nodes have a lot of private addresses published to the DHT. ### Fixed - ping: Conform to the spec & exclude from connection keep-alive ([#416](#416)) - transport: Make accept async to close the gap on service races ([#525](#525)) - transport: Limit dial concurrency and bound total dialing time ([#538](#538)) - webrtc: Support `FIN`/`FIN_ACK` handshake for substream shutdown ([#513](#513)) - transport: Expose failed addresses to the transport manager ([#529](#529)) ### Changed - manager: Prioritize public addresses for dialing ([#530](#530))
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR ensures that the TCP and WebSocket transport layers use all addresses from the address store.
2 *connection_open_timeout.connection_open_timeout), and at the same time, this cannot stall indefinitely for minutes when dialing a peer with 50+ addresses.Before this PR, the transport manager would give up after the first 8 addresses. This behavior is insufficient in unhealthy test networks where peers / validators have up to 64 addresses.
Part of: