gRPC doc service failure when using `lite` compiled proto files
Steps to reproduce
- Compile a
.protofile using the lite option - Add the stub to a service and run a server
2020-09-28 10:02:08.579 WARN 66543 --- [entExecutor-3-1] com.linecorp.armeria.server.Server : Failed to notify a server listener: com.linecorp.armeria.server.docs.DocService$1@26c8dae7
java.lang.NullPointerException: null
at com.linecorp.armeria.internal.server.grpc.GrpcDocServicePlugin.generateSpecification(GrpcDocServicePlugin.java:188) ~[armeria-grpc-1.1.0.jar:na]
at com.linecorp.armeria.server.docs.DocService.lambda$generate$1(DocService.java:201) ~[armeria-1.1.0.jar:na]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
at com.linecorp.armeria.server.docs.DocService.generate(DocService.java:203) ~[armeria-1.1.0.jar:na]
at com.linecorp.armeria.server.docs.DocService.access$100(DocService.java:88) ~[armeria-1.1.0.jar:na]
at com.linecorp.armeria.server.docs.DocService$1.serverStarting(DocService.java:182) ~[armeria-1.1.0.jar:na]
at com.linecorp.armeria.server.Server$ServerStartStopSupport.notifyStarting(Server.java:652) ~[armeria-1.1.0.jar:na]
at com.linecorp.armeria.server.Server$ServerStartStopSupport.notifyStarting(Server.java:400) ~[armeria-1.1.0.jar:na]
at com.linecorp.armeria.common.util.StartStopSupport.notifyListeners(StartStopSupport.java:371) ~[armeria-1.1.0.jar:na]
at com.linecorp.armeria.common.util.StartStopSupport.lambda$start0$3(StartStopSupport.java:184) ~[armeria-1.1.0.jar:na]
at io.netty.util.concurrent.GlobalEventExecutor$TaskRunner.run(GlobalEventExecutor.java:243) ~[netty-common-4.1.52.Final.jar:4.1.52.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.52.Final.jar:4.1.52.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.52.Final.jar:4.1.52.Final]
at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
If I remember correctly, proto lite removes support for reflection and doesn't include the descriptor in the protos, which are what we use to power the docs service. I think this is similar for gRPC reflection service, which supports some functionality, but nothing that requires the proto definitions, for proto lite.
Since proto lite is mostly for Android users by having the smaller code size, I'd expect servers to always have the full proto - are you able to use full proto with your server? Generally servers should use full proto even when Android uses lite proto I think.
At least we should not raise an exception 😆
are you able to use full proto with your server?
Actually ran into this issue due to a wrong dependency issue 😅 (which generated lite when I wasn't intending to do so)
Like trustin said, the hope is 1) leave a trace so that others can find this issue and diagnose what's going on quickly 2) maybe ignore such services and render DosService