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

daojun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 667780cabcd [improve][admin] Expose per ledger props to 
PersistentTopic.getInternalStats (#24336)
667780cabcd is described below

commit 667780cabcdec8fad4cfee63210aa9dbf5be4095
Author: 道君- Tao Jiuming <[email protected]>
AuthorDate: Sat May 24 16:49:12 2025 +0800

    [improve][admin] Expose per ledger props to 
PersistentTopic.getInternalStats (#24336)
---
 .../apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java |  7 +++++++
 .../pulsar/stats/client/PulsarBrokerStatsClientTest.java  | 15 +++++++++++++++
 .../common/policies/data/ManagedLedgerInternalStats.java  |  1 +
 3 files changed, 23 insertions(+)

diff --git 
a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
 
b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
index bba40eccd39..cb7fb2658c4 100644
--- 
a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
+++ 
b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java
@@ -4577,6 +4577,13 @@ public class ManagedLedgerImpl implements ManagedLedger, 
CreateCallback {
                                 }
                             }
                         }
+                        if (li.getPropertiesCount() > 0) {
+                            Map<String, String> properties = new 
HashMap<>(li.getPropertiesCount());
+                            for (MLDataFormats.KeyValue kv : 
li.getPropertiesList()) {
+                                properties.put(kv.getKey(), kv.getValue());
+                            }
+                            info.properties = properties;
+                        }
                         stats.ledgers.add(info);
                     });
                     statFuture.complete(stats);
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/stats/client/PulsarBrokerStatsClientTest.java
 
b/pulsar-broker/src/test/java/org/apache/pulsar/stats/client/PulsarBrokerStatsClientTest.java
index 27b39f7c1ae..764cc50b49b 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/stats/client/PulsarBrokerStatsClientTest.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/stats/client/PulsarBrokerStatsClientTest.java
@@ -24,11 +24,13 @@ import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 import java.net.URL;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import javax.ws.rs.ClientErrorException;
 import javax.ws.rs.ServerErrorException;
 
 import lombok.Cleanup;
+import org.apache.bookkeeper.mledger.ManagedLedger;
 import org.apache.pulsar.broker.service.persistent.PersistentTopic;
 import org.apache.pulsar.client.admin.PulsarAdmin;
 import org.apache.pulsar.client.admin.PulsarAdminException;
@@ -42,6 +44,7 @@ import org.apache.pulsar.client.api.Consumer;
 import org.apache.pulsar.client.api.Message;
 import org.apache.pulsar.client.api.Producer;
 import org.apache.pulsar.client.api.ProducerConsumerBase;
+import org.apache.pulsar.common.policies.data.ManagedLedgerInternalStats;
 import 
org.apache.pulsar.common.policies.data.ManagedLedgerInternalStats.CursorStats;
 import org.apache.pulsar.common.policies.data.PersistentTopicInternalStats;
 import org.slf4j.Logger;
@@ -123,12 +126,24 @@ public class PulsarBrokerStatsClientTest extends 
ProducerConsumerBase {
         }
 
         PersistentTopic topic = (PersistentTopic) 
pulsar.getBrokerService().getOrCreateTopic(topicName).get();
+        ManagedLedger ledger = topic.getManagedLedger();
+        long firstLedgerId = ledger.getLedgersInfo().firstKey();
+        ledger.asyncAddLedgerProperty(firstLedgerId, "foo", "bar").get();
+
         PersistentTopicInternalStats internalStats = 
topic.getInternalStats(true).get();
         assertNotNull(internalStats.ledgers.get(0).metadata);
         // For the mock test, the default ensembles is 
["192.0.2.1:1234","192.0.2.2:1234","192.0.2.3:1234"]
         // The registered bookie ID is 192.168.1.1:5000
         assertTrue(internalStats.ledgers.get(0).underReplicated);
 
+        for (ManagedLedgerInternalStats.LedgerInfo ledgerInfo : 
internalStats.ledgers) {
+            if (ledgerInfo.ledgerId == firstLedgerId) {
+                Map<String, String> properties = ledgerInfo.properties;
+                assertNotNull(properties);
+                assertEquals(properties.get("foo"), "bar");
+            }
+        }
+
         CursorStats cursor = internalStats.cursors.get(subscriptionName);
         assertTrue(cursor.active);
 
diff --git 
a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/ManagedLedgerInternalStats.java
 
b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/ManagedLedgerInternalStats.java
index b68b6308c8f..87228fa3736 100644
--- 
a/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/ManagedLedgerInternalStats.java
+++ 
b/pulsar-client-admin-api/src/main/java/org/apache/pulsar/common/policies/data/ManagedLedgerInternalStats.java
@@ -81,6 +81,7 @@ public class ManagedLedgerInternalStats {
         public boolean offloaded;
         public String metadata;
         public boolean underReplicated;
+        public Map<String, String> properties;
     }
 
     /**

Reply via email to