michaeljmarshall commented on issue #15152:
URL: https://github.com/apache/pulsar/issues/15152#issuecomment-1145602240

   Looks like this is fixed by https://github.com/apache/pulsar/pull/15502, 
which is already cherry picked to `branch-2.10`, so it will be released in 
version 2.10.1. I am going to close this since it has a resolution.
   
   Here is some additional research I was about to comment before finding the 
above PR:
   
   The root cause is how the `TopicStatsImpl#getPublishers` method is 
implemented. I modified test 
`AdminApi2Test#testBacklogNoDelayedForPartitionedTopic` so that it'd create two 
producers and then added some extra logging and got this null pointer:
   
   ```
   java.lang.NullPointerException: null
        at 
java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:469) ~[?:?]
        at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[?:?]
        at java.util.TimSort.sort(TimSort.java:220) ~[?:?]
        at java.util.Arrays.sort(Arrays.java:1515) ~[?:?]
        at 
java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:353) ~[?:?]
        at 
java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485) ~[?:?]
        at 
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) 
~[?:?]
        at 
java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)
 ~[?:?]
        at 
java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734) 
~[?:?]
        at 
java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[?:?]
        at 
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) 
~[?:?]
        at 
java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) 
~[?:?]
        at 
java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
        at 
java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[?:?]
        at 
org.apache.pulsar.common.policies.data.stats.TopicStatsImpl.getPublishers(TopicStatsImpl.java:138)
 ~[pulsar-common-2.10.0.jar:2.10.0]
        at 
org.apache.pulsar.broker.admin.impl.PersistentTopicsBase.lambda$internalGetPartitionedStats$86(PersistentTopicsBase.java:1349)
 ~[classes/:?]
        at 
java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930) 
~[?:?]
        at 
java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:907)
 ~[?:?]
        at 
java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) 
~[?:?]
        at 
java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) 
~[?:?]
        at 
org.apache.pulsar.client.admin.internal.TopicsImpl$11.completed(TopicsImpl.java:633)
 ~[pulsar-client-admin-original-2.10.0.jar:2.10.0]
        at 
org.apache.pulsar.client.admin.internal.TopicsImpl$11.completed(TopicsImpl.java:630)
 ~[pulsar-client-admin-original-2.10.0.jar:2.10.0]
        at 
org.glassfish.jersey.client.JerseyInvocation$1.completed(JerseyInvocation.java:861)
 ~[jersey-client-2.34.jar:?]
        at 
org.glassfish.jersey.client.ClientRuntime.processResponse(ClientRuntime.java:229)
 ~[jersey-client-2.34.jar:?]
        at 
org.glassfish.jersey.client.ClientRuntime.access$200(ClientRuntime.java:62) 
~[jersey-client-2.34.jar:?]
        at 
org.glassfish.jersey.client.ClientRuntime$2.lambda$response$0(ClientRuntime.java:173)
 ~[jersey-client-2.34.jar:?]
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) 
~[jersey-common-2.34.jar:?]
        at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244) 
~[jersey-common-2.34.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:292) 
~[jersey-common-2.34.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:274) 
~[jersey-common-2.34.jar:?]
        at org.glassfish.jersey.internal.Errors.process(Errors.java:244) 
~[jersey-common-2.34.jar:?]
        at 
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:288)
 ~[jersey-common-2.34.jar:?]
        at 
org.glassfish.jersey.client.ClientRuntime$2.response(ClientRuntime.java:173) 
~[jersey-client-2.34.jar:?]
        at 
org.apache.pulsar.client.admin.internal.http.AsyncHttpConnector.lambda$apply$1(AsyncHttpConnector.java:228)
 ~[pulsar-client-admin-original-2.10.0.jar:2.10.0]
        at 
java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 ~[?:?]
        at 
java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 ~[?:?]
        at 
java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) 
~[?:?]
        at 
java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) 
~[?:?]
        at 
org.apache.pulsar.client.admin.internal.http.AsyncHttpConnector.lambda$retryOperation$4(AsyncHttpConnector.java:270)
 ~[pulsar-client-admin-original-2.10.0.jar:2.10.0]
        at 
java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859)
 [?:?]
        at 
java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837)
 [?:?]
        at 
java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) 
[?:?]
        at 
java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2073) 
[?:?]
        at 
org.asynchttpclient.netty.NettyResponseFuture.loadContent(NettyResponseFuture.java:222)
 [async-http-client-2.12.1.jar:?]
        at 
org.asynchttpclient.netty.NettyResponseFuture.done(NettyResponseFuture.java:257)
 [async-http-client-2.12.1.jar:?]
        at 
org.asynchttpclient.netty.handler.AsyncHttpClientHandler.finishUpdate(AsyncHttpClientHandler.java:241)
 [async-http-client-2.12.1.jar:?]
        at 
org.asynchttpclient.netty.handler.HttpHandler.handleChunk(HttpHandler.java:114) 
[async-http-client-2.12.1.jar:?]
        at 
org.asynchttpclient.netty.handler.HttpHandler.handleRead(HttpHandler.java:143) 
[async-http-client-2.12.1.jar:?]
        at 
org.asynchttpclient.netty.handler.AsyncHttpClientHandler.channelRead(AsyncHttpClientHandler.java:78)
 [async-http-client-2.12.1.jar:?]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
 [netty-codec-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:327)
 [netty-codec-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:299)
 [netty-codec-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722) 
[netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
 [netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584) 
[netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496) 
[netty-transport-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
 [netty-common-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 
[netty-common-4.1.74.Final.jar:4.1.74.Final]
        at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 [netty-common-4.1.74.Final.jar:4.1.74.Final]
        at java.lang.Thread.run(Thread.java:829) [?:?]
   ```
   
   It looks like the underlying issue results in a 400 because that is how 
Jackson handles the exception.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to