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

rdhabalia 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 f7abada  [pulsar-broker] load-balancer support disabling max-session 
for bundle split (#13108)
f7abada is described below

commit f7abada1a5e1e79eee10376940187a6f7dc3cd79
Author: Rajan Dhabalia <[email protected]>
AuthorDate: Mon Dec 20 11:25:40 2021 -0800

    [pulsar-broker] load-balancer support disabling max-session for bundle 
split (#13108)
---
 conf/broker.conf                                                     | 1 +
 .../src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java | 1 +
 .../apache/pulsar/broker/loadbalance/impl/BundleSplitterTask.java    | 3 ++-
 .../apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java | 3 ++-
 .../java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java  | 5 +++++
 5 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/conf/broker.conf b/conf/broker.conf
index 80eb86e..9b67442 100644
--- a/conf/broker.conf
+++ b/conf/broker.conf
@@ -1074,6 +1074,7 @@ loadBalancerAutoUnloadSplitBundlesEnabled=true
 loadBalancerNamespaceBundleMaxTopics=1000
 
 # maximum sessions (producers + consumers) in a bundle, otherwise bundle split 
will be triggered
+# (disable threshold check with value -1)
 loadBalancerNamespaceBundleMaxSessions=1000
 
 # maximum msgRate (in + out) in a bundle, otherwise bundle split will be 
triggered
diff --git 
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java
 
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java
index 21c82b6..ba1db65 100644
--- 
a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java
+++ 
b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/ServiceConfiguration.java
@@ -1953,6 +1953,7 @@ public class ServiceConfiguration implements 
PulsarConfiguration {
     @FieldContext(
         category = CATEGORY_LOAD_BALANCER,
         doc = "maximum sessions (producers + consumers) in a bundle, otherwise 
bundle split will be triggered"
+                + "(disable threshold check with value -1)"
     )
     private int loadBalancerNamespaceBundleMaxSessions = 1000;
     @FieldContext(
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/BundleSplitterTask.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/BundleSplitterTask.java
index fa48618..751203c 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/BundleSplitterTask.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/BundleSplitterTask.java
@@ -84,7 +84,8 @@ public class BundleSplitterTask implements 
BundleSplitStrategy {
                     totalMessageRate = longTermData.totalMsgRate();
                     totalMessageThroughput = longTermData.totalMsgThroughput();
                 }
-                if (stats.topics > maxBundleTopics || stats.consumerCount + 
stats.producerCount > maxBundleSessions
+                if (stats.topics > maxBundleTopics || (maxBundleSessions > 0 
&& (stats.consumerCount
+                        + stats.producerCount > maxBundleSessions))
                         || totalMessageRate > maxBundleMsgRate || 
totalMessageThroughput > maxBundleBandwidth) {
                     final String namespace = 
LoadManagerShared.getNamespaceNameFromBundleName(bundle);
                     try {
diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java
index e1829e6..017a040 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/SimpleLoadManagerImpl.java
@@ -1372,7 +1372,8 @@ public class SimpleLoadManagerImpl implements 
LoadManager, Consumer<Notification
             double totalBandwidth = stats.msgThroughputIn + 
stats.msgThroughputOut;
 
             boolean needSplit = false;
-            if (stats.topics > maxBundleTopics || totalSessions > 
maxBundleSessions || totalMsgRate > maxBundleMsgRate
+            if (stats.topics > maxBundleTopics || (maxBundleSessions > 0
+                    && totalSessions > maxBundleSessions) || totalMsgRate > 
maxBundleMsgRate
                     || totalBandwidth > maxBundleBandwidth) {
                 if (stats.topics <= 1) {
                     log.info("Unable to split hot namespace bundle {} since 
there is only one topic.", bundleName);
diff --git 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java
 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java
index 5a6b784..a64f283 100644
--- 
a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java
+++ 
b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/LoadBalancerTest.java
@@ -662,6 +662,11 @@ public class LoadBalancerTest {
                 isAutoUnooadSplitBundleEnabled, null);
         verify(namespaceAdmin, 
never()).splitNamespaceBundle("pulsar/use/primary-ns-10", 
"0x00000000_0x02000000",
                 isAutoUnooadSplitBundleEnabled, null);
+        // disable max session
+        bundleStats.put("pulsar/use/primary-ns-03/0x00000000_0x80000000",
+                newBundleStats(2, -1, 0, 0, 0, 0, 0));
+        verify(namespaceAdmin, 
times(0)).splitNamespaceBundle("pulsar/use/primary-ns-12", 
"0x00000000_0x80000000",
+                isAutoUnooadSplitBundleEnabled, null);
     }
 
     /*

Reply via email to