You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by te...@apache.org on 2023/12/03 11:05:19 UTC

(pulsar) branch branch-2.11 updated: [fix][broker] Fix resource_quota_zpath (#21461)

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

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


The following commit(s) were added to refs/heads/branch-2.11 by this push:
     new 5193356d45b [fix][broker] Fix resource_quota_zpath (#21461)
5193356d45b is described below

commit 5193356d45b5c5cf716f81d1e181e4215db0642d
Author: houxiaoyu <ho...@apache.org>
AuthorDate: Thu Nov 16 11:08:47 2023 +0800

    [fix][broker] Fix resource_quota_zpath (#21461)
---
 .../loadbalance/impl/ModularLoadManagerImpl.java   |  2 +-
 .../impl/ModularLoadManagerImplTest.java           | 52 ++++++++++++++++++++++
 .../testclient/LoadSimulationController.java       |  2 +-
 3 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
index 4f7fcc79a0b..c2662ab8505 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
@@ -112,7 +112,7 @@ public class ModularLoadManagerImpl implements ModularLoadManager {
     public static final int NUM_SHORT_SAMPLES = 10;
 
     // Path to ZNode whose children contain ResourceQuota jsons.
-    public static final String RESOURCE_QUOTA_ZPATH = "/loadbalance/resource-quota/namespace";
+    public static final String RESOURCE_QUOTA_ZPATH = "/loadbalance/resource-quota";
 
     // Path to ZNode containing TimeAverageBrokerData jsons for each broker.
     public static final String TIME_AVERAGE_BROKER_ZPATH = "/loadbalance/broker-time-average";
diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImplTest.java
index 1779f1d1fe1..740082d07e9 100644
--- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImplTest.java
+++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImplTest.java
@@ -73,8 +73,10 @@ import org.apache.pulsar.common.naming.NamespaceBundles;
 import org.apache.pulsar.common.naming.NamespaceName;
 import org.apache.pulsar.common.naming.ServiceUnitId;
 import org.apache.pulsar.common.naming.TopicName;
+import org.apache.pulsar.common.policies.data.BundlesData;
 import org.apache.pulsar.common.policies.data.ClusterData;
 import org.apache.pulsar.common.policies.data.NamespaceIsolationDataImpl;
+import org.apache.pulsar.common.policies.data.ResourceQuota;
 import org.apache.pulsar.common.policies.data.TenantInfoImpl;
 import org.apache.pulsar.common.util.ObjectMapperFactory;
 import org.apache.pulsar.metadata.api.MetadataCache;
@@ -95,6 +97,7 @@ import org.mockito.Mockito;
 import org.powermock.reflect.Whitebox;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 @Slf4j
@@ -727,6 +730,55 @@ public class ModularLoadManagerImplTest {
 
     }
 
+    @DataProvider(name = "isV1")
+    public Object[][] isV1() {
+        return new Object[][] {{true}, {false}};
+    }
+
+    @Test(dataProvider = "isV1")
+    public void testBundleDataDefaultValue(boolean isV1) throws Exception {
+        final String cluster = "use";
+        final String tenant = "my-tenant";
+        final String namespace = "my-ns";
+        NamespaceName ns = isV1 ? NamespaceName.get(tenant, cluster, namespace) : NamespaceName.get(tenant, namespace);
+        admin1.clusters().createCluster(cluster, ClusterData.builder().serviceUrl("http://" + pulsar1.getAdvertisedAddress()).build());
+        admin1.tenants().createTenant(tenant,
+                new TenantInfoImpl(Sets.newHashSet("appid1", "appid2"), Sets.newHashSet(cluster)));
+        admin1.namespaces().createNamespace(ns.toString(), 16);
+
+        // set resourceQuota to the first bundle range.
+        BundlesData bundlesData = admin1.namespaces().getBundles(ns.toString());
+        NamespaceBundle namespaceBundle = nsFactory.getBundle(ns,
+                Range.range(Long.decode(bundlesData.getBoundaries().get(0)), BoundType.CLOSED, Long.decode(bundlesData.getBoundaries().get(1)),
+                        BoundType.OPEN));
+        ResourceQuota quota = new ResourceQuota();
+        quota.setMsgRateIn(1024.1);
+        quota.setMsgRateOut(1024.2);
+        quota.setBandwidthIn(1024.3);
+        quota.setBandwidthOut(1024.4);
+        quota.setMemory(1024.0);
+        admin1.resourceQuotas().setNamespaceBundleResourceQuota(ns.toString(), namespaceBundle.getBundleRange(), quota);
+
+        ModularLoadManagerWrapper loadManagerWrapper = (ModularLoadManagerWrapper) pulsar1.getLoadManager().get();
+        ModularLoadManagerImpl lm = (ModularLoadManagerImpl) loadManagerWrapper.getLoadManager();
+
+        // get the bundleData of the first bundle range.
+        // The default value of the bundleData be the same as resourceQuota because the resourceQuota is present.
+        BundleData defaultBundleData = lm.getBundleDataOrDefault(namespaceBundle.toString());
+
+        TimeAverageMessageData shortTermData = defaultBundleData.getShortTermData();
+        TimeAverageMessageData longTermData = defaultBundleData.getLongTermData();
+        assertEquals(shortTermData.getMsgRateIn(), 1024.1);
+        assertEquals(shortTermData.getMsgRateOut(), 1024.2);
+        assertEquals(shortTermData.getMsgThroughputIn(), 1024.3);
+        assertEquals(shortTermData.getMsgThroughputOut(), 1024.4);
+
+        assertEquals(longTermData.getMsgRateIn(), 1024.1);
+        assertEquals(longTermData.getMsgRateOut(), 1024.2);
+        assertEquals(longTermData.getMsgThroughputIn(), 1024.3);
+        assertEquals(longTermData.getMsgThroughputOut(), 1024.4);
+    }
+
 
     @Test
     public void testRemoveNonExistBundleData()
diff --git a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationController.java b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationController.java
index 91ea6e320c6..fbddb7edd16 100644
--- a/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationController.java
+++ b/pulsar-testclient/src/main/java/org/apache/pulsar/testclient/LoadSimulationController.java
@@ -60,7 +60,7 @@ import org.slf4j.LoggerFactory;
  */
 public class LoadSimulationController {
     private static final Logger log = LoggerFactory.getLogger(LoadSimulationController.class);
-    private static final String QUOTA_ROOT = "/loadbalance/resource-quota/namespace";
+    private static final String QUOTA_ROOT = "/loadbalance/resource-quota";
     private static final String BUNDLE_DATA_ROOT = "/loadbalance/bundle-data";
 
     // Input streams for each client to send commands through.