From 91d2656ee986943464f1dcf8ed282653536d4dfe Mon Sep 17 00:00:00 2001 From: zhangduo Date: Mon, 14 Jan 2019 21:10:09 +0800 Subject: [PATCH] HBASE-21719 Rewrite RegionPlacementMaintainer to use AsyncClusterConnection --- .../master/RegionPlacementMaintainer.java | 48 ++++++++----------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java index faf5e4a268..7cfe8df23e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java @@ -39,14 +39,16 @@ import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HConstants; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; -import org.apache.hadoop.hbase.client.Admin; -import org.apache.hadoop.hbase.client.ClusterConnection; -import org.apache.hadoop.hbase.client.Connection; +import org.apache.hadoop.hbase.client.AsyncClusterConnection; +import org.apache.hadoop.hbase.client.AsyncRegionServerAdmin; +import org.apache.hadoop.hbase.client.ClusterConnectionFactory; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.favored.FavoredNodeAssignmentHelper; import org.apache.hadoop.hbase.favored.FavoredNodesPlan; +import org.apache.hadoop.hbase.security.User; import org.apache.hadoop.hbase.util.FSUtils; +import org.apache.hadoop.hbase.util.FutureUtils; import org.apache.hadoop.hbase.util.MunkresAssignment; import org.apache.hadoop.hbase.util.Pair; import org.apache.yetus.audience.InterfaceAudience; @@ -59,9 +61,7 @@ import org.apache.hbase.thirdparty.org.apache.commons.cli.HelpFormatter; import org.apache.hbase.thirdparty.org.apache.commons.cli.Options; import org.apache.hbase.thirdparty.org.apache.commons.cli.ParseException; -import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.RequestConverter; -import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.AdminService.BlockingInterface; import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesRequest; import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.UpdateFavoredNodesResponse; @@ -96,24 +96,21 @@ public class RegionPlacementMaintainer { private final boolean enforceMinAssignmentMove; private RackManager rackManager; private Set targetTableSet; - private final Connection connection; + private final AsyncClusterConnection connection; - public RegionPlacementMaintainer(Configuration conf) { + public RegionPlacementMaintainer(Configuration conf) throws IOException { this(conf, true, true); } public RegionPlacementMaintainer(Configuration conf, boolean enforceLocality, - boolean enforceMinAssignmentMove) { + boolean enforceMinAssignmentMove) throws IOException { this.conf = conf; this.enforceLocality = enforceLocality; this.enforceMinAssignmentMove = enforceMinAssignmentMove; this.targetTableSet = new HashSet<>(); this.rackManager = new RackManager(conf); - try { - this.connection = ConnectionFactory.createConnection(this.conf); - } catch (IOException e) { - throw new RuntimeException(e); - } + this.connection = + ClusterConnectionFactory.createAsyncClusterConnection(this.conf, null, User.getCurrent()); } private static void printHelp(Options opt) { @@ -206,10 +203,9 @@ public class RegionPlacementMaintainer { // Get the all the region servers List servers = new ArrayList<>(); - try (Admin admin = this.connection.getAdmin()) { - servers.addAll(admin.getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS)) + servers.addAll( + FutureUtils.get(this.connection.getAdmin().getClusterMetrics(EnumSet.of(Option.LIVE_SERVERS))) .getLiveServerMetrics().keySet()); - } LOG.info("Start to generate assignment plan for " + numRegions + " regions from table " + tableName + " with " + @@ -690,19 +686,17 @@ public class RegionPlacementMaintainer { } if (singleServerPlan != null) { // Update the current region server with its updated favored nodes - BlockingInterface currentRegionServer = - ((ClusterConnection)this.connection).getAdmin(entry.getKey()); + AsyncRegionServerAdmin rsAdmin = connection.getRegionServerAdmin(entry.getKey()); UpdateFavoredNodesRequest request = - RequestConverter.buildUpdateFavoredNodesRequest(regionUpdateInfos); - + RequestConverter.buildUpdateFavoredNodesRequest(regionUpdateInfos); UpdateFavoredNodesResponse updateFavoredNodesResponse = - currentRegionServer.updateFavoredNodes(null, request); + FutureUtils.get(rsAdmin.updateFavoredNodes(request)); LOG.info("Region server " + - ProtobufUtil.getServerInfo(null, currentRegionServer).getServerName() + - " has updated " + updateFavoredNodesResponse.getResponse() + " / " + - singleServerPlan.getAssignmentMap().size() + - " regions with the assignment plan"); - succeededNum ++; + FutureUtils.get(rsAdmin.getServerInfo(RequestConverter.buildGetServerInfoRequest())) + .getServerInfo() + + " has updated " + updateFavoredNodesResponse.getResponse() + " / " + + singleServerPlan.getAssignmentMap().size() + " regions with the assignment plan"); + succeededNum++; } } catch (Exception e) { failedUpdateMap.put(entry.getKey(), e); @@ -719,7 +713,7 @@ public class RegionPlacementMaintainer { " region servers with its corresponding favored nodes"); for (Map.Entry entry : failedUpdateMap.entrySet() ) { - LOG.error("Failed to update " + entry.getKey().getHostAndPort() + + LOG.error("Failed to update " + entry.getKey().getAddress() + " because of " + entry.getValue().getMessage()); } } -- 2.17.1