From b400be3de20559aa4d06b1d4f5f14896fd3e3b6e Mon Sep 17 00:00:00 2001 From: "guo.kangkang" Date: Tue, 14 Apr 2020 18:37:29 +0800 Subject: [PATCH 1/2] HBASE-24151 The master server aborted for IllegalThreadStateException --- .../hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java index 5e7061a8acc2..332d51960de4 100644 --- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java +++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java @@ -37,6 +37,7 @@ import org.apache.hadoop.hbase.master.LoadBalancer; import org.apache.hadoop.hbase.master.MasterServices; import org.apache.hadoop.hbase.master.RegionPlan; +import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory; import org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer; import org.apache.hadoop.hbase.net.Address; import org.apache.hadoop.hbase.util.Pair; @@ -356,6 +357,11 @@ public void initialize() throws HBaseIOException { // Create the balancer Class balancerKlass = config.getClass(HBASE_RSGROUP_LOADBALANCER_CLASS, StochasticLoadBalancer.class, LoadBalancer.class); + if (balancerKlass.equals(this.getClass())) { + LOG.warn("The internal balancer of RSGroupBasedLoadBalancer cannot be itself, " + + "falling back to the default LoadBalancer class"); + balancerKlass = LoadBalancerFactory.getDefaultLoadBalancerClass(); + } internalBalancer = ReflectionUtils.newInstance(balancerKlass, config); internalBalancer.setMasterServices(masterServices); if (clusterStatus != null) { From fc35e9bb423fdde34b91e106d380033402e55145 Mon Sep 17 00:00:00 2001 From: "guo.kangkang" Date: Thu, 16 Apr 2020 10:51:02 +0800 Subject: [PATCH 2/2] HBASE-24151 use same logic as master --- .../hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java index 332d51960de4..cc163ac199de 100644 --- a/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java +++ b/hbase-rsgroup/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java @@ -355,14 +355,14 @@ public void initialize() throws HBaseIOException { } // Create the balancer - Class balancerKlass = config.getClass(HBASE_RSGROUP_LOADBALANCER_CLASS, + Class balancerClass = config.getClass(HBASE_RSGROUP_LOADBALANCER_CLASS, StochasticLoadBalancer.class, LoadBalancer.class); - if (balancerKlass.equals(this.getClass())) { + if (this.getClass().isAssignableFrom(balancerClass)) { LOG.warn("The internal balancer of RSGroupBasedLoadBalancer cannot be itself, " + "falling back to the default LoadBalancer class"); - balancerKlass = LoadBalancerFactory.getDefaultLoadBalancerClass(); + balancerClass = LoadBalancerFactory.getDefaultLoadBalancerClass(); } - internalBalancer = ReflectionUtils.newInstance(balancerKlass, config); + internalBalancer = ReflectionUtils.newInstance(balancerClass, config); internalBalancer.setMasterServices(masterServices); if (clusterStatus != null) { internalBalancer.setClusterMetrics(clusterStatus);