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

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


The following commit(s) were added to refs/heads/master by this push:
     new ba4cb91  HBASE-25851 Make LoadBalancer not extend Configurable 
interface (#3233)
ba4cb91 is described below

commit ba4cb91211717c6ac808df441616efb1b08c7486
Author: Duo Zhang <[email protected]>
AuthorDate: Thu May 6 16:11:46 2021 +0800

    HBASE-25851 Make LoadBalancer not extend Configurable interface (#3233)
    
    Signed-off-by: Yulin Niu <[email protected]>
---
 .../apache/hadoop/hbase/master/LoadBalancer.java   |  3 +-
 .../hbase/master/balancer/BaseLoadBalancer.java    | 19 +++----
 .../hbase/master/balancer/ClusterInfoProvider.java |  5 ++
 .../master/balancer/DummyClusterInfoProvider.java  | 58 +++++++---------------
 .../master/balancer/TestBaseLoadBalancer.java      | 22 ++++----
 .../TestRegionHDFSBlockLocationFinder.java         | 27 +---------
 .../hbase/favored/FavoredNodeLoadBalancer.java     | 11 +---
 .../org/apache/hadoop/hbase/master/HMaster.java    |  1 -
 .../master/balancer/FavoredStochasticBalancer.java |  6 ++-
 .../hbase/master/balancer/LoadBalancerFactory.java |  4 +-
 .../master/balancer/MaintenanceLoadBalancer.java   |  4 +-
 .../master/balancer/MasterClusterInfoProvider.java |  6 +++
 .../master/balancer/StochasticLoadBalancer.java    |  8 +--
 .../hbase/rsgroup/RSGroupBasedLoadBalancer.java    | 23 ++-------
 .../balancer/RSGroupableBalancerTestBase.java      |  4 ++
 .../balancer/TestRSGroupBasedLoadBalancer.java     |  8 +--
 ...lancerWithStochasticLoadBalancerAsInternal.java |  4 --
 17 files changed, 71 insertions(+), 142 deletions(-)

diff --git 
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java 
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
index a6f5357..e78ad69 100644
--- 
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
+++ 
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/LoadBalancer.java
@@ -22,7 +22,6 @@ import edu.umd.cs.findbugs.annotations.NonNull;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
-import org.apache.hadoop.conf.Configurable;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ServerName;
@@ -45,7 +44,7 @@ import org.apache.yetus.audience.InterfaceAudience;
  * This class produces plans for the {@code AssignmentManager} to execute.
  */
 @InterfaceAudience.Private
-public interface LoadBalancer extends Configurable, Stoppable, 
ConfigurationObserver {
+public interface LoadBalancer extends Stoppable, ConfigurationObserver {
 
   // Used to signal to the caller that the region(s) cannot be assigned
   // We deliberately use 'localhost' so the operation will fail fast
diff --git 
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
 
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
index 93a7331..85c61ff 100644
--- 
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
+++ 
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
@@ -78,7 +78,6 @@ public abstract class BaseLoadBalancer implements 
LoadBalancer {
   protected float slop;
   // overallSlop to control simpleLoadBalancer's cluster level threshold
   protected float overallSlop;
-  protected Configuration config;
   protected RackManager rackManager;
   protected MetricsBalancer metricsBalancer = null;
   protected ClusterMetrics clusterStatus = null;
@@ -100,9 +99,11 @@ public abstract class BaseLoadBalancer implements 
LoadBalancer {
     this.metricsBalancer = (metricsBalancer != null) ? metricsBalancer : new 
MetricsBalancer();
   }
 
-  @Override
-  public void setConf(Configuration conf) {
-    this.config = conf;
+  protected final Configuration getConf() {
+    return provider.getConfiguration();
+  }
+
+  protected void setConf(Configuration conf) {
     setSlop(conf);
     if (slop < 0) {
       slop = 0;
@@ -116,8 +117,8 @@ public abstract class BaseLoadBalancer implements 
LoadBalancer {
       overallSlop = 1;
     }
 
-    this.rackManager = new RackManager(getConf());
-    useRegionFinder = config.getBoolean("hbase.master.balancer.uselocality", 
true);
+    this.rackManager = new RackManager(conf);
+    useRegionFinder = conf.getBoolean("hbase.master.balancer.uselocality", 
true);
     if (useRegionFinder) {
       regionFinder = new RegionHDFSBlockLocationFinder();
       regionFinder.setConf(conf);
@@ -133,11 +134,6 @@ public abstract class BaseLoadBalancer implements 
LoadBalancer {
   }
 
   @Override
-  public Configuration getConf() {
-    return this.config;
-  }
-
-  @Override
   public synchronized void setClusterMetrics(ClusterMetrics st) {
     this.clusterStatus = st;
     if (useRegionFinder) {
@@ -149,6 +145,7 @@ public abstract class BaseLoadBalancer implements 
LoadBalancer {
   @Override
   public void setClusterInfoProvider(ClusterInfoProvider provider) {
     this.provider = provider;
+    setConf(provider.getConfiguration());
     if (useRegionFinder) {
       this.regionFinder.setClusterInfoProvider(provider);
     }
diff --git 
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/ClusterInfoProvider.java
 
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/ClusterInfoProvider.java
index 0686cf8..908bf9c 100644
--- 
a/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/ClusterInfoProvider.java
+++ 
b/hbase-balancer/src/main/java/org/apache/hadoop/hbase/master/balancer/ClusterInfoProvider.java
@@ -39,6 +39,11 @@ import org.apache.yetus.audience.InterfaceAudience;
 public interface ClusterInfoProvider {
 
   /**
+   * Get the configuration.
+   */
+  Configuration getConfiguration();
+
+  /**
    * Get all the regions of this cluster.
    * <p/>
    * Used to refresh region block locations on HDFS.
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MasterClusterInfoProvider.java
 
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/DummyClusterInfoProvider.java
similarity index 57%
copy from 
hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MasterClusterInfoProvider.java
copy to 
hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/DummyClusterInfoProvider.java
index 3f0c618..c56b1b8 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MasterClusterInfoProvider.java
+++ 
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/DummyClusterInfoProvider.java
@@ -27,77 +27,57 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HDFSBlocksDistribution;
 import org.apache.hadoop.hbase.ServerMetrics;
 import org.apache.hadoop.hbase.ServerName;
-import org.apache.hadoop.hbase.TableDescriptors;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.RegionInfo;
 import org.apache.hadoop.hbase.client.TableDescriptor;
-import org.apache.hadoop.hbase.master.MasterServices;
-import org.apache.hadoop.hbase.master.ServerManager;
-import org.apache.hadoop.hbase.master.assignment.AssignmentManager;
-import org.apache.hadoop.hbase.regionserver.HRegion;
-import org.apache.yetus.audience.InterfaceAudience;
 
-/**
- * Master based cluster info provider.
- */
[email protected]
-public class MasterClusterInfoProvider implements ClusterInfoProvider {
+public class DummyClusterInfoProvider implements ClusterInfoProvider {
 
-  private final MasterServices services;
+  private final Configuration conf;
 
-  public MasterClusterInfoProvider(MasterServices services) {
-    this.services = services;
+  public DummyClusterInfoProvider(Configuration conf) {
+    this.conf = conf;
+  }
+
+  @Override
+  public Configuration getConfiguration() {
+    return conf;
   }
 
   @Override
   public List<RegionInfo> getAssignedRegions() {
-    AssignmentManager am = services.getAssignmentManager();
-    return am != null ? am.getAssignedRegions() : Collections.emptyList();
+    return Collections.emptyList();
   }
 
   @Override
   public TableDescriptor getTableDescriptor(TableName tableName) throws 
IOException {
-    TableDescriptors tds = services.getTableDescriptors();
-    return tds != null ? tds.get(tableName) : null;
+    return null;
+  }
+
+  @Override
+  public int getNumberOfTables() throws IOException {
+    return 0;
   }
 
   @Override
   public HDFSBlocksDistribution computeHDFSBlocksDistribution(Configuration 
conf,
     TableDescriptor tableDescriptor, RegionInfo regionInfo) throws IOException 
{
-    return HRegion.computeHDFSBlocksDistribution(conf, tableDescriptor, 
regionInfo);
+    return new HDFSBlocksDistribution();
   }
 
   @Override
   public boolean hasRegionReplica(Collection<RegionInfo> regions) throws 
IOException {
-    TableDescriptors tds = services.getTableDescriptors();
-    if (tds == null) {
-      return false;
-    }
-    for (RegionInfo region : regions) {
-      TableDescriptor td = tds.get(region.getTable());
-      if (td != null && td.getRegionReplication() > 1) {
-        return true;
-      }
-    }
     return false;
   }
 
   @Override
   public List<ServerName> getOnlineServersListWithPredicator(List<ServerName> 
servers,
     Predicate<ServerMetrics> filter) {
-    ServerManager sm = services.getServerManager();
-    return sm != null ? sm.getOnlineServersListWithPredicator(servers, filter) 
:
-      Collections.emptyList();
+    return Collections.emptyList();
   }
 
   @Override
   public Map<ServerName, List<RegionInfo>> 
getSnapShotOfAssignment(Collection<RegionInfo> regions) {
-    AssignmentManager am = services.getAssignmentManager();
-    return am != null ? am.getSnapShotOfAssignment(regions) : 
Collections.emptyMap();
-  }
-
-  @Override
-  public int getNumberOfTables() throws IOException {
-    return services.getTableDescriptors().getAll().size();
+    return Collections.emptyMap();
   }
 }
diff --git 
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
 
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
index a6ae2ac..e515ead 100644
--- 
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
+++ 
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
@@ -20,8 +20,6 @@ package org.apache.hadoop.hbase.master.balancer;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyList;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -34,11 +32,13 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
 import org.apache.hadoop.hbase.HBaseConfiguration;
+import org.apache.hadoop.hbase.ServerMetrics;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
 import org.apache.hadoop.hbase.client.RegionInfo;
@@ -91,9 +91,7 @@ public class TestBaseLoadBalancer extends BalancerTestBase {
     Configuration conf = HBaseConfiguration.create();
     conf.setClass("hbase.util.ip.to.rack.determiner", MockMapping.class, 
DNSToSwitchMapping.class);
     loadBalancer = new MockBalancer();
-    loadBalancer.setConf(conf);
-    ClusterInfoProvider provider = mock(ClusterInfoProvider.class);
-    loadBalancer.setClusterInfoProvider(provider);
+    loadBalancer.setClusterInfoProvider(new DummyClusterInfoProvider(conf));
 
     // Set up the rack topologies (5 machines per rack)
     rackManager = mock(RackManager.class);
@@ -218,12 +216,14 @@ public class TestBaseLoadBalancer extends 
BalancerTestBase {
     LoadBalancer balancer = new MockBalancer();
     Configuration conf = HBaseConfiguration.create();
     conf.setClass("hbase.util.ip.to.rack.determiner", MockMapping.class, 
DNSToSwitchMapping.class);
-    balancer.setConf(conf);
-    ClusterInfoProvider provider = mock(ClusterInfoProvider.class);
-    when(
-      provider.getOnlineServersListWithPredicator(anyList(), any()))
-      .thenReturn(idleServers);
-    balancer.setClusterInfoProvider(provider);
+    balancer.setClusterInfoProvider(new DummyClusterInfoProvider(conf) {
+
+      @Override
+      public List<ServerName> 
getOnlineServersListWithPredicator(List<ServerName> servers,
+        Predicate<ServerMetrics> filter) {
+        return idleServers;
+      }
+    });
     RegionInfo hri1 = 
RegionInfoBuilder.newBuilder(TableName.valueOf(name.getMethodName()))
         .setStartKey(Bytes.toBytes("key1"))
         .setEndKey(Bytes.toBytes("key2"))
diff --git 
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRegionHDFSBlockLocationFinder.java
 
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRegionHDFSBlockLocationFinder.java
index f51764f..8e129e3 100644
--- 
a/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRegionHDFSBlockLocationFinder.java
+++ 
b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRegionHDFSBlockLocationFinder.java
@@ -27,13 +27,10 @@ import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
-import java.util.function.Predicate;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
@@ -97,7 +94,7 @@ public class TestRegionHDFSBlockLocationFinder {
   @Before
   public void setUp() {
     finder = new RegionHDFSBlockLocationFinder();
-    finder.setClusterInfoProvider(new ClusterInfoProvider() {
+    finder.setClusterInfoProvider(new DummyClusterInfoProvider(null) {
 
       @Override
       public TableDescriptor getTableDescriptor(TableName tableName) throws 
IOException {
@@ -114,28 +111,6 @@ public class TestRegionHDFSBlockLocationFinder {
         TableDescriptor tableDescriptor, RegionInfo regionInfo) throws 
IOException {
         return generate(regionInfo);
       }
-
-      @Override
-      public boolean hasRegionReplica(Collection<RegionInfo> regions) throws 
IOException {
-        return false;
-      }
-
-      @Override
-      public List<ServerName> 
getOnlineServersListWithPredicator(List<ServerName> servers,
-        Predicate<ServerMetrics> filter) {
-        return Collections.emptyList();
-      }
-
-      @Override
-      public Map<ServerName, List<RegionInfo>>
-        getSnapShotOfAssignment(Collection<RegionInfo> regions) {
-        return Collections.emptyMap();
-      }
-
-      @Override
-      public int getNumberOfTables() {
-        return 0;
-      }
     });
   }
 
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.java
index 17b2863..cf356ad 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodeLoadBalancer.java
@@ -29,7 +29,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.HBaseInterfaceAudience;
 import org.apache.hadoop.hbase.ServerMetrics;
@@ -72,14 +71,8 @@ public class FavoredNodeLoadBalancer extends 
BaseLoadBalancer implements Favored
 
   private MasterServices services;
   private RackManager rackManager;
-  private Configuration conf;
   private FavoredNodesManager fnm;
 
-  @Override
-  public void setConf(Configuration conf) {
-    this.conf = conf;
-  }
-
   public void setMasterServices(MasterServices services) {
     this.services = services;
   }
@@ -87,10 +80,8 @@ public class FavoredNodeLoadBalancer extends 
BaseLoadBalancer implements Favored
   @Override
   public synchronized void initialize() throws HBaseIOException {
     super.initialize();
-    super.setConf(conf);
     this.fnm = services.getFavoredNodesManager();
-    this.rackManager = new RackManager(conf);
-    super.setConf(conf);
+    this.rackManager = new RackManager(getConf());
   }
 
   @Override
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index b3875be..8ca7370 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -684,7 +684,6 @@ public class HMaster extends HRegionServer implements 
MasterServices {
         LoadBalancer.class);
     }
     this.balancer = new RSGroupBasedLoadBalancer();
-    this.balancer.setConf(conf);
     this.loadBalancerTracker = new LoadBalancerTracker(zooKeeper, this);
     this.loadBalancerTracker.start();
 
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.java
index 742863d..c6081e5 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/FavoredStochasticBalancer.java
@@ -35,6 +35,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.ThreadLocalRandom;
+import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseIOException;
 import org.apache.hadoop.hbase.ServerMetrics;
 import org.apache.hadoop.hbase.ServerName;
@@ -303,10 +304,11 @@ public class FavoredStochasticBalancer extends 
StochasticLoadBalancer implements
 
     metricsBalancer.incrMiscInvocations();
 
+    Configuration conf = getConf();
     List<ServerName> favoredNodes = fnm.getFavoredNodes(regionInfo);
     if (favoredNodes == null || favoredNodes.isEmpty()) {
       // Generate new favored nodes and return primary
-      FavoredNodeAssignmentHelper helper = new 
FavoredNodeAssignmentHelper(servers, getConf());
+      FavoredNodeAssignmentHelper helper = new 
FavoredNodeAssignmentHelper(servers, conf);
       helper.initialize();
       try {
         favoredNodes = helper.generateFavoredNodes(regionInfo);
@@ -323,7 +325,7 @@ public class FavoredStochasticBalancer extends 
StochasticLoadBalancer implements
       destination = 
onlineServers.get(ThreadLocalRandom.current().nextInt(onlineServers.size()));
     }
 
-    boolean alwaysAssign = getConf().getBoolean(FAVORED_ALWAYS_ASSIGN_REGIONS, 
true);
+    boolean alwaysAssign = conf.getBoolean(FAVORED_ALWAYS_ASSIGN_REGIONS, 
true);
     if (destination == null && alwaysAssign) {
       LOG.warn("Can't generate FN for region: " + regionInfo + " falling 
back");
       destination = super.randomAssignment(regionInfo, servers);
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java
index bfda12e..5af0180 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java
@@ -46,8 +46,6 @@ public class LoadBalancerFactory {
     Class<? extends LoadBalancer> balancerKlass =
       conf.getClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, 
getDefaultLoadBalancerClass(),
         LoadBalancer.class);
-    LoadBalancer balancer = ReflectionUtils.newInstance(balancerKlass);
-    balancer.setConf(conf);
-    return balancer;
+    return ReflectionUtils.newInstance(balancerKlass);
   }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MaintenanceLoadBalancer.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MaintenanceLoadBalancer.java
index 11a2102..f9d06ba 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MaintenanceLoadBalancer.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MaintenanceLoadBalancer.java
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.conf.Configured;
 import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
@@ -37,7 +36,7 @@ import org.apache.yetus.audience.InterfaceAudience;
  * a balancer which is only used in maintenance mode.
  */
 @InterfaceAudience.Private
-public class MaintenanceLoadBalancer extends Configured implements 
LoadBalancer {
+public class MaintenanceLoadBalancer implements LoadBalancer {
 
   private volatile boolean stopped = false;
 
@@ -122,5 +121,4 @@ public class MaintenanceLoadBalancer extends Configured 
implements LoadBalancer
   @Override
   public void updateBalancerStatus(boolean status) {
   }
-
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MasterClusterInfoProvider.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MasterClusterInfoProvider.java
index 3f0c618..afcfb34 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MasterClusterInfoProvider.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/MasterClusterInfoProvider.java
@@ -50,6 +50,11 @@ public class MasterClusterInfoProvider implements 
ClusterInfoProvider {
   }
 
   @Override
+  public Configuration getConfiguration() {
+    return services.getConfiguration();
+  }
+
+  @Override
   public List<RegionInfo> getAssignedRegions() {
     AssignmentManager am = services.getAssignmentManager();
     return am != null ? am.getAssignedRegions() : Collections.emptyList();
@@ -100,4 +105,5 @@ public class MasterClusterInfoProvider implements 
ClusterInfoProvider {
   public int getNumberOfTables() throws IOException {
     return services.getTableDescriptors().getAll().size();
   }
+
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
index 9a7823d..74929b5 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java
@@ -170,7 +170,7 @@ public class StochasticLoadBalancer extends 
BaseLoadBalancer {
   }
 
   @Override
-  public synchronized void setConf(Configuration conf) {
+  protected synchronized void setConf(Configuration conf) {
     super.setConf(conf);
     maxSteps = conf.getInt(MAX_STEPS_KEY, maxSteps);
     stepsPerRegion = conf.getInt(STEPS_PER_REGION_KEY, stepsPerRegion);
@@ -221,16 +221,16 @@ public class StochasticLoadBalancer extends 
BaseLoadBalancer {
     curFunctionCosts= new double[costFunctions.size()];
     tempFunctionCosts= new double[costFunctions.size()];
 
-    isBalancerDecisionRecording = getConf()
+    isBalancerDecisionRecording = conf
       .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,
         BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);
-    isBalancerRejectionRecording = getConf()
+    isBalancerRejectionRecording = conf
       .getBoolean(BaseLoadBalancer.BALANCER_REJECTION_BUFFER_ENABLED,
         BaseLoadBalancer.DEFAULT_BALANCER_REJECTION_BUFFER_ENABLED);
 
     if (this.namedQueueRecorder == null && (isBalancerDecisionRecording
       || isBalancerRejectionRecording)) {
-      this.namedQueueRecorder = NamedQueueRecorder.getInstance(getConf());
+      this.namedQueueRecorder = NamedQueueRecorder.getInstance(conf);
     }
 
     LOG.info("Loaded config; maxSteps=" + maxSteps + ", stepsPerRegion=" + 
stepsPerRegion +
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
index fe82e25..f3dc80b 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/rsgroup/RSGroupBasedLoadBalancer.java
@@ -73,7 +73,6 @@ import 
org.apache.hbase.thirdparty.com.google.common.collect.Maps;
 public class RSGroupBasedLoadBalancer implements LoadBalancer {
   private static final Logger LOG = 
LoggerFactory.getLogger(RSGroupBasedLoadBalancer.class);
 
-  private Configuration config;
   private ClusterMetrics clusterStatus;
   private MasterServices masterServices;
   private FavoredNodesManager favoredNodesManager;
@@ -98,19 +97,6 @@ public class RSGroupBasedLoadBalancer implements 
LoadBalancer {
   public RSGroupBasedLoadBalancer() {}
 
   @Override
-  public Configuration getConf() {
-    return config;
-  }
-
-  @Override
-  public void setConf(Configuration conf) {
-    this.config = conf;
-    if(internalBalancer != null) {
-      internalBalancer.setConf(conf);
-    }
-  }
-
-  @Override
   public void setClusterMetrics(ClusterMetrics sm) {
     this.clusterStatus = sm;
     if (internalBalancer != null) {
@@ -347,10 +333,11 @@ public class RSGroupBasedLoadBalancer implements 
LoadBalancer {
     }
 
     // Create the balancer
+    Configuration conf = masterServices.getConfiguration();
     Class<? extends LoadBalancer> balancerClass;
-    String balancerClassName = config.get(HBASE_RSGROUP_LOADBALANCER_CLASS);
+    String balancerClassName = conf.get(HBASE_RSGROUP_LOADBALANCER_CLASS);
     if (balancerClassName == null) {
-      balancerClass = 
config.getClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS,
+      balancerClass = conf.getClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS,
         LoadBalancerFactory.getDefaultLoadBalancerClass(), LoadBalancer.class);
     } else {
       try {
@@ -364,7 +351,6 @@ public class RSGroupBasedLoadBalancer implements 
LoadBalancer {
       balancerClass = LoadBalancerFactory.getDefaultLoadBalancerClass();
     }
     internalBalancer = ReflectionUtils.newInstance(balancerClass);
-    internalBalancer.setConf(config);
     internalBalancer.setClusterInfoProvider(new 
MasterClusterInfoProvider(masterServices));
     if(clusterStatus != null) {
       internalBalancer.setClusterMetrics(clusterStatus);
@@ -383,7 +369,7 @@ public class RSGroupBasedLoadBalancer implements 
LoadBalancer {
 
     internalBalancer.initialize();
     // init fallback groups
-    this.fallbackEnabled = config.getBoolean(FALLBACK_GROUP_ENABLE_KEY, false);
+    this.fallbackEnabled = conf.getBoolean(FALLBACK_GROUP_ENABLE_KEY, false);
   }
 
   public boolean isOnline() {
@@ -408,7 +394,6 @@ public class RSGroupBasedLoadBalancer implements 
LoadBalancer {
 
   @Override
   public void onConfigurationChange(Configuration conf) {
-    this.config = conf;
     boolean newFallbackEnabled = conf.getBoolean(FALLBACK_GROUP_ENABLE_KEY, 
false);
     if (fallbackEnabled != newFallbackEnabled) {
       LOG.info("Changing the value of {} from {} to {}", 
FALLBACK_GROUP_ENABLE_KEY,
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java
index 1ac1622..d4d50ad 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/RSGroupableBalancerTestBase.java
@@ -33,6 +33,8 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableDescriptors;
 import org.apache.hadoop.hbase.TableName;
@@ -70,6 +72,7 @@ public class RSGroupableBalancerTestBase extends 
BalancerTestBase {
   static Map<TableName, TableDescriptor> tableDescs;
   int[] regionAssignment = new int[] { 2, 5, 7, 10, 4, 3, 1 };
   static int regionId = 0;
+  static Configuration conf = HBaseConfiguration.create();
 
   /**
    * Invariant is that all servers of a group have load between floor(avg) and
@@ -406,6 +409,7 @@ public class RSGroupableBalancerTestBase extends 
BalancerTestBase {
     Mockito.when(services.getTableDescriptors()).thenReturn(tds);
     AssignmentManager am = Mockito.mock(AssignmentManager.class);
     Mockito.when(services.getAssignmentManager()).thenReturn(am);
+    Mockito.when(services.getConfiguration()).thenReturn(conf);
     return services;
   }
 
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
index 0da0e14..6e53d6d 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancer.java
@@ -30,9 +30,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
-import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.HConstants;
 import org.apache.hadoop.hbase.ServerName;
 import org.apache.hadoop.hbase.TableName;
@@ -68,13 +66,11 @@ public class TestRSGroupBasedLoadBalancer extends 
RSGroupableBalancerTestBase {
     servers = generateServers(7);
     groupMap = constructGroupInfo(servers, groups);
     tableDescs = constructTableDesc(true);
-    Configuration conf = HBaseConfiguration.create();
     conf.set("hbase.regions.slop", "0");
     conf.set("hbase.rsgroup.grouploadbalancer.class", 
SimpleLoadBalancer.class.getCanonicalName());
     loadBalancer = new RSGroupBasedLoadBalancer();
     loadBalancer.setRsGroupInfoManager(getMockedGroupInfoManager());
     loadBalancer.setMasterServices(getMockedMaster());
-    loadBalancer.setConf(conf);
     loadBalancer.initialize();
   }
 
@@ -89,9 +85,8 @@ public class TestRSGroupBasedLoadBalancer extends 
RSGroupableBalancerTestBase {
     // Test with/without per table balancer.
     boolean[] perTableBalancerConfigs = { true, false };
     for (boolean isByTable : perTableBalancerConfigs) {
-      Configuration conf = loadBalancer.getConf();
       conf.setBoolean(HConstants.HBASE_MASTER_LOADBALANCE_BYTABLE, isByTable);
-      loadBalancer.setConf(conf);
+      loadBalancer.onConfigurationChange(conf);
       Map<ServerName, List<RegionInfo>> servers = mockClusterServers();
       ArrayListMultimap<String, ServerAndLoad> list = 
convertToGroupBasedMap(servers);
       LOG.info("Mock Cluster :  " + printStats(list));
@@ -193,7 +188,6 @@ public class TestRSGroupBasedLoadBalancer extends 
RSGroupableBalancerTestBase {
     assertFalse(loadBalancer.isFallbackEnabled());
 
     // change FALLBACK_GROUP_ENABLE_KEY from false to true
-    Configuration conf = loadBalancer.getConf();
     conf.setBoolean(RSGroupBasedLoadBalancer.FALLBACK_GROUP_ENABLE_KEY, true);
     loadBalancer.onConfigurationChange(conf);
     assertTrue(loadBalancer.isFallbackEnabled());
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancerWithStochasticLoadBalancerAsInternal.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancerWithStochasticLoadBalancerAsInternal.java
index 4802847..8db4ee2 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancerWithStochasticLoadBalancerAsInternal.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestRSGroupBasedLoadBalancerWithStochasticLoadBalancerAsInternal.java
@@ -29,10 +29,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
-import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.ClusterMetrics;
 import org.apache.hadoop.hbase.HBaseClassTestRule;
-import org.apache.hadoop.hbase.HBaseConfiguration;
 import org.apache.hadoop.hbase.RegionMetrics;
 import org.apache.hadoop.hbase.ServerMetrics;
 import org.apache.hadoop.hbase.ServerName;
@@ -66,7 +64,6 @@ public class 
TestRSGroupBasedLoadBalancerWithStochasticLoadBalancerAsInternal
     servers = generateServers(3);
     groupMap = constructGroupInfo(servers, groups);
     tableDescs = constructTableDesc(false);
-    Configuration conf = HBaseConfiguration.create();
     conf.set("hbase.regions.slop", "0");
     conf.setFloat("hbase.master.balancer.stochastic.readRequestCost", 10000f);
     conf.set("hbase.rsgroup.grouploadbalancer.class",
@@ -74,7 +71,6 @@ public class 
TestRSGroupBasedLoadBalancerWithStochasticLoadBalancerAsInternal
     loadBalancer = new RSGroupBasedLoadBalancer();
     loadBalancer.setRsGroupInfoManager(getMockedGroupInfoManager());
     loadBalancer.setMasterServices(getMockedMaster());
-    loadBalancer.setConf(conf);
     loadBalancer.initialize();
   }
 

Reply via email to