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";