Skip to content

Move QUIC implementation to prototype 🍋 #423

Merged
StefanBratanov merged 7 commits intolibp2p:developfrom
StefanBratanov:beta_quic
Sep 12, 2025
Merged

Move QUIC implementation to prototype 🍋 #423
StefanBratanov merged 7 commits intolibp2p:developfrom
StefanBratanov:beta_quic

Conversation

@StefanBratanov
Copy link
Collaborator

@StefanBratanov StefanBratanov commented Sep 8, 2025

Tested in Teku (doesn't work) on quic branch Consensys/teku#9484 with tech.pegasys.discovery:discovery:develop and publishToMavenLocal for jvm-libp2p

2025-09-08 16:52:51.908 ERROR - Failed to send status to 16Uiu2HAkuvgWScK3ieEYacMaGf7MWppMyVrmXuVVqjNf3iLCNgTZ
tech.pegasys.teku.networking.eth2.rpc.core.Eth2RpcResponseHandler$InvalidRpcResponseException: No response received when single response expected
at tech.pegasys.teku.networking.eth2.rpc.core.Eth2RpcResponseHandler.lambda$expectSingleResponse$1(Eth2RpcResponseHandler.java:70) ~[teku-networking-eth2-develop.jar:25.7.1+88-g5e2a5b82d2]
at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:646) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:510) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2179) ~[?:?]
at tech.pegasys.teku.networking.eth2.rpc.core.Eth2RpcResponseHandler.lambda$onCompleted$5(Eth2RpcResponseHandler.java:118) ~[teku-networking-eth2-develop.jar:25.7.1+88-g5e2a5b82d2]
at java.base/java.util.Optional.ifPresentOrElse(Optional.java:198) ~[?:?]
at tech.pegasys.teku.networking.eth2.rpc.core.Eth2RpcResponseHandler.onCompleted(Eth2RpcResponseHandler.java:118) ~[teku-networking-eth2-develop.jar:25.7.1+88-g5e2a5b82d2]
at tech.pegasys.teku.networking.p2p.rpc.RpcResponseHandler.onCompleted(RpcResponseHandler.java:24) ~[teku-networking-p2p-develop.jar:25.7.1+88-g5e2a5b82d2]
at tech.pegasys.teku.networking.eth2.rpc.core.Eth2OutgoingRequestHandler.lambda$completeRequest$3(Eth2OutgoingRequestHandler.java:214) ~[teku-networking-eth2-develop.jar:25.7.1+88-g5e2a5b82d2]
at java.base/java.util.concurrent.CompletableFuture.uniAcceptNow(CompletableFuture.java:757) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:735) ~[?:?]
at java.base/java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2214) ~[?:?]
at tech.pegasys.teku.infrastructure.async.SafeFuture.thenAccept(SafeFuture.java:613) ~[teku-infrastructure-async-develop.jar:25.7.1+88-g5e2a5b82d2]
at tech.pegasys.teku.networking.eth2.rpc.core.Eth2OutgoingRequestHandler.completeRequest(Eth2OutgoingRequestHandler.java:211) ~[teku-networking-eth2-develop.jar:25.7.1+88-g5e2a5b82d2]
at tech.pegasys.teku.networking.eth2.rpc.core.Eth2OutgoingRequestHandler.readComplete(Eth2OutgoingRequestHandler.java:182) ~[teku-networking-eth2-develop.jar:25.7.1+88-g5e2a5b82d2]
at tech.pegasys.teku.networking.p2p.libp2p.rpc.RpcHandler$Controller.lambda$onRemoteWriteClosed$3(RpcHandler.java:282) ~[teku-networking-p2p-develop.jar:25.7.1+88-g5e2a5b82d2]
at java.base/java.util.Optional.ifPresentOrElse(Optional.java:196) ~[?:?]
at tech.pegasys.teku.networking.p2p.libp2p.rpc.RpcHandler$Controller.runHandler(RpcHandler.java:296) ~[teku-networking-p2p-develop.jar:25.7.1+88-g5e2a5b82d2]
at tech.pegasys.teku.networking.p2p.libp2p.rpc.RpcHandler$Controller.onRemoteWriteClosed(RpcHandler.java:282) ~[teku-networking-p2p-develop.jar:25.7.1+88-g5e2a5b82d2]
at tech.pegasys.teku.networking.p2p.libp2p.rpc.RpcHandler$Controller.onChannelClosed(RpcHandler.java:288) ~[teku-networking-p2p-develop.jar:25.7.1+88-g5e2a5b82d2]
at tech.pegasys.teku.networking.p2p.libp2p.rpc.RpcHandler$Controller.handlerRemoved(RpcHandler.java:269) ~[teku-networking-p2p-develop.jar:25.7.1+88-g5e2a5b82d2]
at io.netty.channel.AbstractChannelHandlerContext.callHandlerRemoved(AbstractChannelHandlerContext.java:1007) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.channel.DefaultChannelPipeline.callHandlerRemoved0(DefaultChannelPipeline.java:586) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.channel.DefaultChannelPipeline.destroyDown(DefaultChannelPipeline.java:841) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.channel.DefaultChannelPipeline.destroyUp(DefaultChannelPipeline.java:809) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.channel.DefaultChannelPipeline.destroy(DefaultChannelPipeline.java:801) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.channel.DefaultChannelPipeline.access$700(DefaultChannelPipeline.java:45) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelUnregistered(DefaultChannelPipeline.java:1411) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelUnregistered(DefaultChannelPipeline.java:780) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.handler.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.lambda$deregister$1(QuicheQuicStreamChannel.java:612) ~[netty-codec-classes-quic-4.2.5.Final.jar:4.2.5.Final]
at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:148) ~[netty-common-4.2.5.Final.jar:4.2.5.Final]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:141) ~[netty-common-4.2.5.Final.jar:4.2.5.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:535) ~[netty-common-4.2.5.Final.jar:4.2.5.Final]
at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:201) ~[netty-transport-4.2.5.Final.jar:4.2.5.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1193) ~[netty-common-4.2.5.Final.jar:4.2.5.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.2.5.Final.jar:4.2.5.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.2.5.Final.jar:4.2.5.Final]
at java.base/java.lang.Thread.run(Thread.java:1570) [?:?]

@StefanBratanov StefanBratanov changed the title Beta QUIC implementation Move QUIC implementation to beta Sep 8, 2025
@StefanBratanov StefanBratanov changed the title Move QUIC implementation to beta Move QUIC implementation to Beta Sep 8, 2025
@Nashatyrev
Copy link
Collaborator

I moved a little bit forward here: StefanBratanov#2
But Teku still disconnects with the same symptoms.
Just for the record: QUIC implementation is pretty raw and untested

@StefanBratanov StefanBratanov marked this pull request as ready for review September 11, 2025 14:42
@StefanBratanov StefanBratanov changed the title Move QUIC implementation to Beta Move QUIC implementation to prototype 🍋 Sep 12, 2025
@StefanBratanov
Copy link
Collaborator Author

StefanBratanov commented Sep 12, 2025

image

Tested in Teku and peers were able to connect and talk to each other

@StefanBratanov StefanBratanov merged commit 8aa477d into libp2p:develop Sep 12, 2025
2 checks passed
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

Successfully merging this pull request may close these issues.

2 participants