cryostatio / cryostat

Secure JDK Flight Recorder management for containerized JVMs
https://cryostat.io
Other
8 stars 8 forks source link

[Bug] KubernetesApi Discovery NPE #416

Closed andrewazores closed 2 months ago

andrewazores commented 2 months ago

Current Behavior

2024-04-25 19:01:49,399 WARN [io.cry.dis.KubeApiDiscovery] (executor-thread-5) Endpoint handler exception: java.lang.NullPointerException
at java.base/java.util.ImmutableCollections$ListN.indexOf(ImmutableCollections.java:716)
at java.base/java.util.ImmutableCollections$AbstractImmutableList.contains(ImmutableCollections.java:329)
at io.cryostat.discovery.KubeApiDiscovery.isCompatiblePort(KubeApiDiscovery.java:191)
at io.cryostat.discovery.KubeApiDiscovery.lambda$getTargetTuplesFrom$1(KubeApiDiscovery.java:199)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at io.cryostat.discovery.KubeApiDiscovery.getTargetTuplesFrom(KubeApiDiscovery.java:201)
at io.cryostat.discovery.KubeApiDiscovery.lambda$handleEndpointEvent$4(KubeApiDiscovery.java:239)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at io.cryostat.discovery.KubeApiDiscovery.lambda$handleEndpointEvent$10(KubeApiDiscovery.java:242)
at io.quarkus.narayana.jta.TransactionRunnerImpl.lambda$run$0(TransactionRunnerImpl.java:27)
at io.quarkus.narayana.jta.QuarkusTransactionImpl.callInOurTx(QuarkusTransactionImpl.java:136)
at io.quarkus.narayana.jta.QuarkusTransactionImpl.callJoinExisting(QuarkusTransactionImpl.java:79)
at io.quarkus.narayana.jta.QuarkusTransactionImpl.call(QuarkusTransactionImpl.java:33)

Expected Behavior

No response

Steps To Reproduce

No response

Environment

No response

Anything else?

No response

tthvo commented 2 months ago

Looks like EndpointPort.getName returns null and List.of does not allow checking null. https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html#contains(java.lang.Object)