Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bug: webrtc connections fail after relayed connection is closed/expired #74

Open
p-shahi opened this issue Jun 1, 2023 · 7 comments
Open

Comments

@p-shahi
Copy link
Member

p-shahi commented Jun 1, 2023

Users report that webrtc (brower-to-browser) connections fail after connectivity to the relay node is closed/reservation expires

Related: libp2p/js-libp2p-webrtc#173

@DougAnderson444
Copy link
Contributor

I am still seeing this.

In order to aid troubleshooting, how can I determine in JavaScript whether the browser is connected directly to the other browser? Is the other browser listed in the PeerStore or something along those lines?

@maschad
Copy link
Member

maschad commented Jun 15, 2023

In order to aid troubleshooting, how can I determine in JavaScript whether the browser is connected directly to the other browser? Is the other browser listed in the PeerStore or something along those lines?

So in the UI we display info about the transports for connections so that should indicate if a node is connected via webRTC.

This issue may be fixed in v2.0.10 @DougAnderson444 would you be interested in upgrading the webrtc dep and seeing this issue still exists?

@DougAnderson444
Copy link
Contributor

Ok I will take a look at the multiaddrs there, but last I checked was still seeing the issue even with 2.0.10

@DougAnderson444
Copy link
Contributor

I have been troubleshooting this a little bit, and have narrowed it down to a gossipsub issue. It has nothing to do with UV, IPv6 or WebRTC itself.

Once the relay is dropped, the gossipsub also seems to fail for some reason

I've raised an issue here ChainSafe/js-libp2p-gossipsub#448
and a repro here https://github.com/DougAnderson444/libp2p-gossipsub-browser-to-browser

@p-shahi
Copy link
Member Author

p-shahi commented Jul 5, 2023

@DougAnderson444 Thanks for looking into this. Just to confirm, when you isolated to gossipsub, there was a webrtc browser to browser connection established right?

@DougAnderson444
Copy link
Contributor

Yes correct. What happens is we still see the /echo/ messages passed back and forth without the relay, but no longer gossipsub passed back and forth. That's how we know it's a gossip issue and not WebRTC.

I wonder if gossipsub in javascript is looking for either Kad peers or perhaps Server style gossipsub? Which we wouldn't get with the browsers. I don't have a deep enough understanding of how the js-gossipbsub inner workings happen to figure that out

@justin0mcateer
Copy link

I think I may have mentioned this in a different thread, so apologies if I am posting twice. However, I've run into this same issue and I found that GossipSub is ignoring all 'subsequent' connections to a Peer. So, if you allow it to connect on CircuitRelay, it will never connect on WebRTC. See this logic:
https://github.com/ChainSafe/js-libp2p-gossipsub/blob/master/src/index.ts#L745

There is a change that was just applied to libp2p master yesterday that prevents GossipSub (and most other protocols) from connecting over CircuitRelay, so this effectively works around the issue of GossipSub limiting/locking itself to the first connection per peer.
libp2p/js-libp2p@a1ec46b

I believe I am also seeing some issues with GossipSub re-connecting after a disconnection, but I am still investigating that. It could be an issue with the CircuitRelayTransport and I haven't ruled that out.

@maschad maschad removed their assignment Aug 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants