vert-x3 / vertx-grpc

gRPC for Vert.x
78 stars 49 forks source link

IllegalStateException when starting io.vertx.grpc.VertxServer #91

Closed theangrydev closed 3 years ago

theangrydev commented 3 years ago

Version

4.0.2

Context

Upgrading to vertx-grpc 4.x seems to have broken support for gRPC verticles.

In the stack trace below, I can see that in the constructor of ActualServer a NettyServer is built that expects the VertxEventLoopGroup to have an EventLoop available.

However, VertxServer only seems to add an EventLoop to VertxEventLoopGroup after the ActualServer is created and so it blows up.

Am I missing something here?

java.lang.IllegalStateException
    at io.vertx.core.net.impl.VertxEventLoopGroup.next(VertxEventLoopGroup.java:37)
    at io.grpc.netty.NettyServer.<init>(NettyServer.java:141)
    at io.grpc.netty.NettyServerBuilder.buildTransportServers(NettyServerBuilder.java:640)
    at io.grpc.netty.NettyServerBuilder$NettyClientTransportServersBuilder.buildClientTransportServers(NettyServerBuilder.java:169)
    at io.grpc.internal.ServerImplBuilder.build(ServerImplBuilder.java:231)
    at io.grpc.internal.AbstractServerImplBuilder.build(AbstractServerImplBuilder.java:166)
    at io.vertx.grpc.VertxServer$ActualServer.<init>(VertxServer.java:98)
    at io.vertx.grpc.VertxServer$ActualServer.<init>(VertxServer.java:57)
    at io.vertx.grpc.VertxServer.lambda$start$1(VertxServer.java:170)
    at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
    at io.vertx.grpc.VertxServer.start(VertxServer.java:170)
pmlopes commented 3 years ago

This seems to be same issue preventing the current master to be upgraded to the latest grpc-java

vietj commented 3 years ago

do you have a reproducer @theangrydev ?

pmlopes commented 3 years ago

A easy way to get the same ISE is:

  1. edit vertx-grpc/pom.xml bump the version to 1.36.0
  2. put a breakpoint on VertxServer line 98 (.build())

Run the unit tests, the 1st one to reach there will throw the same ISE which in my case prints:

java.lang.IllegalStateException
    at io.vertx.core.net.impl.VertxEventLoopGroup.next(VertxEventLoopGroup.java:37)
    at io.grpc.netty.NettyServer.<init>(NettyServer.java:141)
    at io.grpc.netty.NettyServerBuilder.buildTransportServers(NettyServerBuilder.java:640)
    at io.grpc.netty.NettyServerBuilder$NettyClientTransportServersBuilder.buildClientTransportServers(NettyServerBuilder.java:169)
    at io.grpc.internal.ServerImplBuilder.build(ServerImplBuilder.java:231)
    at io.grpc.internal.AbstractServerImplBuilder.build(AbstractServerImplBuilder.java:166)
    at io.vertx.grpc.VertxServer$ActualServer.<init>(VertxServer.java:98)
    at io.vertx.grpc.VertxServer$ActualServer.<init>(VertxServer.java:57)
    at io.vertx.grpc.VertxServer.lambda$start$1(VertxServer.java:170)
    at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
    at io.vertx.grpc.VertxServer.start(VertxServer.java:170)
    at io.vertx.ext.grpc.GrpcTestBase.startServer(GrpcTestBase.java:91)
    at io.vertx.ext.grpc.GrpcTestBase.startServer(GrpcTestBase.java:84)
    at io.vertx.ext.grpc.GrpcTestBase.startServer(GrpcTestBase.java:73)
    at io.vertx.ext.grpc.ContextTest.testBlocking(ContextTest.java:135)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at io.vertx.ext.unit.junit.VertxUnitRunner.invokeTestMethod(VertxUnitRunner.java:95)
    at io.vertx.ext.unit.junit.VertxUnitRunner.lambda$invokeExplosively$0(VertxUnitRunner.java:114)
    at io.vertx.ext.unit.impl.TestContextImpl.run(TestContextImpl.java:90)
    at io.vertx.ext.unit.junit.VertxUnitRunner.lambda$invokeExplosively$1(VertxUnitRunner.java:127)
    at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:96)
    at io.vertx.core.impl.AbstractContext.dispatch(AbstractContext.java:59)
    at io.vertx.core.impl.EventLoopContext.lambda$runOnContext$0(EventLoopContext.java:39)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:164)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:834)