Conversation
| ) { | ||
| let Some(entries) = self.pending_outbound.remove(&substream_id) else { | ||
| let Some(actions) = self.pending_outbound.remove(&peer) else { | ||
| tracing::warn!(target: LOG_TARGET, ?peer, ?substream_id, "pending outbound entry doesn't exist"); |
There was a problem hiding this comment.
dq: Should we check the pending_dials here? Thinking of cases where we might receive this before on_connection_established but looks unlikely
There was a problem hiding this comment.
TransportManager should deliver events in order, so this should not be possible.
| } | ||
| } | ||
| } | ||
|
|
There was a problem hiding this comment.
dq: Unrelated to these changes, we have an self.inbound.remove(&peer) above. However, there's a high likelyhood that if the inbound is broken, the outboud is as well. Should cleanup the outbound and force a reconnection?
There was a problem hiding this comment.
There may be legitimate cases where inbound fails (i.e., some implementations can close the outbound after sending just one request, like litep2p did before this PR), but outbound is fine.
The current code will fail fast if writing to the outbound fails and request a reconnection, so it shouldn't be a problem anyway.
lexnv
left a comment
There was a problem hiding this comment.
Code looks solid! Left some questions about the bitswap to understand our implementation a bit better 🙏
## [0.13.0] - 2026-01-21 This release brings multiple fixes to both the transport and application-level protocols. Specifically, it enhances WebSocket stability by resolving AsyncWrite errors and ensuring that partial writes during the negotiation phase no longer trigger connection failures. At the same time, Bitswap client functionality is introduced, which makes this release semver breaking. ### Added - Add Bitswap client ([#501](#501)) ### Fixed - notif/fix: Avoid CPU busy loops on litep2p full shutdown ([#521](#521)) - protocol: Ensure transport manager knows about closed connections ([#515](#515)) - substream: Decrement the bytes counter to avoid excessive flushing ([#511](#511)) - crypto/noise: Improve stability of websockets by fixing AsyncWrite implementation ([#518](#518)) - bitswap: Split block responses into batches under 2 MiB ([#516](#516)) - crypto/noise: Fix connection negotiation logic on partial writes ([#519](#519)) - substream/fix: Fix partial reads for ProtocolCodec::Identity ([#512](#512)) - webrtc: Avoid panics returning error instead ([#509](#509)) - bitswap: e2e test & max payload fix ([#508](#508)) - tcp: Exit connections when events fail to propagate to protocols ([#506](#506)) - webrtc: Avoid future being dropped when channel is full ([#483](#483)) --------- Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com>
Implement Bitswap client. This is needed to benchmark data retrieval from transaction storage.
Additionally, outbound substreams are now reused for subsequent messages (there is a limit of one outbound substream per peer).