This is an automated email from the ASF dual-hosted git repository. lhotari pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 306b4ce78ee535d2dfdf65dd9a6307c68bec8c80 Author: 道君- Tao Jiuming <[email protected]> AuthorDate: Mon Jul 21 14:16:04 2025 +0800 [fix][client] Fix ClientCnx handleSendError NPE (#24517) (cherry picked from commit bb3b6a4e081c63e13afaff6c05169219c0002011) --- .../main/java/org/apache/pulsar/client/impl/ClientCnx.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ClientCnx.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ClientCnx.java index f798980c299..90bc351ee24 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ClientCnx.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ClientCnx.java @@ -765,16 +765,21 @@ public class ClientCnx extends PulsarHandler { long producerId = sendError.getProducerId(); long sequenceId = sendError.getSequenceId(); + ProducerImpl<?> producer = producers.get(producerId); + if (producer == null) { + log.warn("{} Producer with id {} not found while handling send error", ctx.channel(), producerId); + return; + } + switch (sendError.getError()) { case ChecksumError: - producers.get(producerId).recoverChecksumError(this, sequenceId); + producer.recoverChecksumError(this, sequenceId); break; - case TopicTerminatedError: - producers.get(producerId).terminated(this); + producer.terminated(this); break; case NotAllowedError: - producers.get(producerId).recoverNotAllowedError(sequenceId, sendError.getMessage()); + producer.recoverNotAllowedError(sequenceId, sendError.getMessage()); break; default:
