This is an automated email from the ASF dual-hosted git repository.

technoboy pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 342ea438da3 [fix][broker]Avoid read a entry that entry id is -1 when 
calling getLastMessagePublishTime (#24579)
342ea438da3 is described below

commit 342ea438da343ed984258214b36940daec41988c
Author: fengyubiao <[email protected]>
AuthorDate: Wed Jul 30 17:23:24 2025 +0800

    [fix][broker]Avoid read a entry that entry id is -1 when calling 
getLastMessagePublishTime (#24579)
---
 .../pulsar/broker/service/persistent/PersistentTopic.java     |  3 ++-
 .../java/org/apache/pulsar/broker/admin/AdminApi2Test.java    | 11 +++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
index 0e2b65b0709..9c9294cc5de 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/service/persistent/PersistentTopic.java
@@ -4848,7 +4848,8 @@ public class PersistentTopic extends AbstractTopic 
implements Topic, AddEntryCal
 
         try {
             Position lastPosition = ledger.getLastConfirmedEntry();
-            if (lastPosition == null) {
+            if (lastPosition == null || lastPosition.getEntryId() < 0
+                    || 
!ledger.getLedgersInfo().containsKey(lastPosition.getLedgerId())) {
                 future.complete(0L);
                 return future;
             }
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
index fcd4845c968..5fdd6fdee07 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/admin/AdminApi2Test.java
@@ -3902,6 +3902,17 @@ public class AdminApi2Test extends 
MockedPulsarServiceBaseTest {
         admin.topics().deletePartitionedTopicAsync(topic, false).get();
     }
 
+    @Test
+    public void testTopicCreationAndLastPublishTimestampsIfNoEntries() throws 
Exception {
+        final String topic = BrokerTestUtil.newUniqueName("persistent://" + 
defaultNamespace + "/tp");
+        admin.topics().createNonPartitionedTopic(topic);
+        TopicStats stats = admin.topics().getStats(topic);
+        assertTrue(stats.getTopicCreationTimeStamp() > 0);
+        assertEquals(stats.getLastPublishTimeStamp(), 0);
+        // cleanup.
+        admin.topics().delete(topic, false);
+    }
+
     @Test
     public void testTopicCreationAndLastPublishTimestamps() throws Exception {
         final String topicName = "timestamp-test-topic";

Reply via email to