Skip to content

chromium-rust-v0.53 WASM to jvm-v1.2 WebSocket/mplex timeout #12

@dhuseby

Description

@dhuseby

Repos:

Transport: ws, Secure: noise, Muxer: mplex

Summary

chromium-rust-v0.53 (WASM build running in Chromium) times out when dialing jvm-v1.2 as listener via ws/noise/mplex. The JVM listener starts successfully and publishes its multiaddr, but the WASM dialer never connects. The test hits the 180-second timeout with no output from the dialer container.

The yamux variant of the same test (chromium-rust-v0.53 x jvm-v1.2 (ws, noise, yamux)) passes, confirming the issue is specific to mplex muxer negotiation between these two implementations.

Failing tests (1)

  • chromium-rust-v0.53 x jvm-v1.2 (ws, noise, mplex)

Passing variant

  • chromium-rust-v0.53 x jvm-v1.2 (ws, noise, yamux) — passes in 13s

Error output

Test timed out after 180s

No output from the dialer container. The listener log shows successful Redis connection and multiaddr advertisement:

Connection established to Redis (Jedis{Connection{DefaultJedisSocketFactory{proxy-b7ff7ce3:6379}}})
Starting listener with advertisedAddress: /ip4/172.18.0.5/tcp/12120/ws/p2p/12D3KooWEZT8uKLqgX2tg6vzf9EaSKET9c1sREZiY5PE9zG9hnfv

Root cause analysis

The WASM rust-libp2p v0.53 dialer and JVM jvm-libp2p v1.2 listener fail to negotiate the mplex muxer over a ws/noise connection. Since the yamux variant works, the noise handshake and WebSocket transport are functioning correctly between these implementations. The failure occurs during or after muxer negotiation when mplex is selected.

Possible causes:

  • Incompatible mplex protocol version or framing between rust-libp2p WASM v0.53 and jvm-libp2p v1.2
  • The WASM environment may handle mplex stream initialization differently, causing a deadlock during muxer setup
  • jvm-libp2p's mplex implementation may expect a different multistream-select sequence than what the WASM client sends

Notes

This is distinct from the chromium-rust-v0.53 x python-v0.x (ws, noise, mplex) timeout (see chromium-rust-v053-python-ws-timeout.md), which involves a different listener implementation. The chromium-rust-v0.53 WASM dialer connects successfully to rust and go listeners via ws/noise/mplex, so the issue is specific to the JVM listener's mplex handling.

Metadata

Metadata

Assignees

No one assigned

    Labels

    jvmjvm-libp2p relatedrustrust-libp2p related

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions