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

eolivelli 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 0e149ef0484 [refactor][broker]refactor reflection method in 
loadbalance (#17313)
0e149ef0484 is described below

commit 0e149ef0484755d42e214f03003237299433c89a
Author: Qiang Huang <hqeb...@users.noreply.github.com>
AuthorDate: Mon Aug 29 17:05:17 2022 +0800

    [refactor][broker]refactor reflection method in loadbalance (#17313)
---
 .../apache/pulsar/broker/loadbalance/LoadManager.java    |  5 +++--
 .../broker/loadbalance/impl/ModularLoadManagerImpl.java  | 16 ++++++----------
 2 files changed, 9 insertions(+), 12 deletions(-)

diff --git 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/LoadManager.java
 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/LoadManager.java
index e26b27950ec..fc0b0ddfd35 100644
--- 
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/LoadManager.java
+++ 
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/LoadManager.java
@@ -29,6 +29,7 @@ import 
org.apache.pulsar.broker.loadbalance.impl.ModularLoadManagerWrapper;
 import org.apache.pulsar.broker.loadbalance.impl.SimpleLoadManagerImpl;
 import org.apache.pulsar.common.naming.ServiceUnitId;
 import org.apache.pulsar.common.stats.Metrics;
+import org.apache.pulsar.common.util.Reflections;
 import org.apache.pulsar.policies.data.loadbalancer.LoadManagerReport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -131,9 +132,9 @@ public interface LoadManager {
     static LoadManager create(final PulsarService pulsar) {
         try {
             final ServiceConfiguration conf = pulsar.getConfiguration();
-            final Class<?> loadManagerClass = 
Class.forName(conf.getLoadManagerClassName());
             // Assume there is a constructor with one argument of 
PulsarService.
-            final Object loadManagerInstance = 
loadManagerClass.getDeclaredConstructor().newInstance();
+            final Object loadManagerInstance = 
Reflections.createInstance(conf.getLoadManagerClassName(),
+                    Thread.currentThread().getContextClassLoader());
             if (loadManagerInstance instanceof LoadManager) {
                 final LoadManager casted = (LoadManager) loadManagerInstance;
                 casted.initialize(pulsar);
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 0c86602695a..78d77102392 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
@@ -70,6 +70,7 @@ import org.apache.pulsar.common.policies.data.LocalPolicies;
 import org.apache.pulsar.common.policies.data.ResourceQuota;
 import org.apache.pulsar.common.stats.Metrics;
 import org.apache.pulsar.common.util.FutureUtil;
+import org.apache.pulsar.common.util.Reflections;
 import org.apache.pulsar.common.util.collections.ConcurrentOpenHashMap;
 import org.apache.pulsar.common.util.collections.ConcurrentOpenHashSet;
 import org.apache.pulsar.metadata.api.MetadataCache;
@@ -300,18 +301,13 @@ public class ModularLoadManagerImpl implements 
ModularLoadManager {
 
     private LoadSheddingStrategy createLoadSheddingStrategy() {
         try {
-            Class<?> loadSheddingClass = 
Class.forName(conf.getLoadBalancerLoadSheddingStrategy());
-            Object loadSheddingInstance = 
loadSheddingClass.getDeclaredConstructor().newInstance();
-            if (loadSheddingInstance instanceof LoadSheddingStrategy) {
-                return (LoadSheddingStrategy) loadSheddingInstance;
-            } else {
-                log.error("create load shedding strategy failed. using 
OverloadShedder instead.");
-                return new OverloadShedder();
-            }
+            return 
Reflections.createInstance(conf.getLoadBalancerLoadSheddingStrategy(), 
LoadSheddingStrategy.class,
+                    Thread.currentThread().getContextClassLoader());
         } catch (Exception e) {
-            log.error("Error when trying to create load shedding strategy: ", 
e);
+            log.error("Error when trying to create load shedding strategy: {}",
+                    conf.getLoadBalancerLoadPlacementStrategy(), e);
         }
-
+        log.error("create load shedding strategy failed. using OverloadShedder 
instead.");
         return new OverloadShedder();
     }
 

Reply via email to