I was trying to test the dead-letter queue functionality using the pub/sub emulator, but noticed that messages were not being routed correctly. The emulator seemed to retry delivery up to the configured max attempt, then hangs.
I tried pulling messages from the subscription after hitting max attempts and I get this error.
Running into
[pubsub] java.lang.NullPointerException
[pubsub] at com.google.cloud.pubsub.testing.v1.MessageBacklog.pull(MessageBacklog.java:302)
[pubsub] at com.google.cloud.pubsub.testing.v1.OrderedMessageBacklog.pullFromBacklogs(OrderedMessageBacklog.java:323)
[pubsub] at com.google.cloud.pubsub.testing.v1.OrderedMessageBacklog.pull(OrderedMessageBacklog.java:181)
[pubsub] at com.google.cloud.pubsub.testing.v1.OrderedMessageBacklog.pull(OrderedMessageBacklog.java:169)
[pubsub] at com.google.cloud.pubsub.testing.v1.FakePubsubServer.pull(FakePubsubServer.java:1482)
[pubsub] at com.google.cloud.pubsub.testing.v1.PubsubGrpcServerAdapter$2.pull(PubsubGrpcServerAdapter.java:349)
[pubsub] at com.google.pubsub.v1.SubscriberGrpc$MethodHandlers.invoke(SubscriberGrpc.java:2037)
[pubsub] at io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:182)
[pubsub] at io.grpc.PartialForwardingServerCallListener.onHalfClose(PartialForwardingServerCallListener.java:35)
[pubsub] at io.grpc.ForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:23)
[pubsub] at io.grpc.ForwardingServerCallListener$SimpleForwardingServerCallListener.onHalfClose(ForwardingServerCallListener.java:40)
[pubsub] at io.grpc.Contexts$ContextualizedServerCallListener.onHalfClose(Contexts.java:86)
[pubsub] at io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:351)
[pubsub] at io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:860)
[pubsub] at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
[pubsub] at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
[pubsub] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[pubsub] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[pubsub] at java.base/java.lang.Thread.run(Thread.java:829)
[pubsub]
[pubsub] Mar 01, 2024 6:08:18 PM io.gapi.emulators.netty.HttpHandler$1 onError
I am expecting messages to be routed to the dead-letter topic set up and for the emulator to not crash when pulling messages.
If the crash is in the emulator itself, then it's likely some kind of edge case that needs to be addressed. You should either enter a support case or put a ticket in the issue tracker with the exact steps to reproduce the issue.