You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ja...@apache.org on 2021/04/08 13:06:39 UTC

[hbase] branch branch-2.3 updated: HBASE-24305 Prepare deprecations in ServerName (#1666) (#3128)

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

janh pushed a commit to branch branch-2.3
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-2.3 by this push:
     new a30d873  HBASE-24305 Prepare deprecations in ServerName (#1666) (#3128)
a30d873 is described below

commit a30d87369207785f078589e2a59a9250813b9aa3
Author: Jan Hentschel <ja...@ultratendency.com>
AuthorDate: Thu Apr 8 15:06:02 2021 +0200

    HBASE-24305 Prepare deprecations in ServerName (#1666) (#3128)
    
    Signed-off-by: Duo Zhang <zh...@apache.org>
    Signed-off-by: stack <st...@apache.org>
---
 .../org/apache/hadoop/hbase/client/HBaseAdmin.java |   2 +-
 .../hadoop/hbase/client/TestClientNoCluster.java   |   2 +-
 .../java/org/apache/hadoop/hbase/ServerName.java   | 129 +++++++++++----------
 .../org/apache/hadoop/hbase/TestServerName.java    |  19 ++-
 .../hbase/favored/FavoredNodeAssignmentHelper.java |   8 +-
 .../hadoop/hbase/favored/FavoredNodesManager.java  |   8 +-
 .../hbase/favored/StartcodeAgnosticServerName.java |   2 +-
 .../hbase/master/AssignmentVerificationReport.java |   2 +-
 .../hbase/master/RegionPlacementMaintainer.java    |   2 +-
 .../hbase/master/balancer/BaseLoadBalancer.java    |  27 ++---
 .../master/balancer/FavoredStochasticBalancer.java |   8 +-
 .../org/apache/hadoop/hbase/util/HBaseFsck.java    |   2 +-
 .../org/apache/hadoop/hbase/MetaMockingUtil.java   |   2 +-
 .../apache/hadoop/hbase/TestMetaTableAccessor.java |   2 +-
 .../hbase/TestMetaTableAccessorNoCluster.java      |   2 +-
 .../hbase/client/TestConnectionImplementation.java |   4 +-
 .../hbase/client/TestShortCircuitConnection.java   |   2 +-
 .../favored/TestFavoredNodeAssignmentHelper.java   |   2 +-
 .../hadoop/hbase/master/TestRegionPlacement.java   |   2 +-
 .../master/balancer/TestBaseLoadBalancer.java      |  14 +--
 .../TestFavoredStochasticBalancerPickers.java      |   3 +-
 .../procedure/MasterProcedureTestingUtility.java   |   2 +-
 .../hbase/regionserver/TestRegionServerAbort.java  |   2 +-
 23 files changed, 129 insertions(+), 119 deletions(-)

diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
index ef6589a..8a74ca9 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java
@@ -3692,7 +3692,7 @@ public class HBaseAdmin implements Admin {
             if (location == null) continue;
             ServerName serverName = location.getServerName();
             // Make sure that regions are assigned to server
-            if (serverName != null && serverName.getHostAndPort() != null) {
+            if (serverName != null && serverName.getAddress() != null) {
               actualRegCount.incrementAndGet();
             }
           }
diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestClientNoCluster.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestClientNoCluster.java
index 8a24c2e..9ff28a5 100644
--- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestClientNoCluster.java
+++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestClientNoCluster.java
@@ -611,7 +611,7 @@ public class TestClientNoCluster extends Configured implements Tool {
   static CellProtos.Cell getServer(final ByteString row, final ServerName sn) {
     CellProtos.Cell.Builder cellBuilder = getBaseCellBuilder(row);
     cellBuilder.setQualifier(SERVER_QUALIFIER_BYTESTRING);
-    cellBuilder.setValue(ByteString.copyFromUtf8(sn.getHostAndPort()));
+    cellBuilder.setValue(ByteString.copyFromUtf8(sn.getAddress().toString()));
     return cellBuilder.build();
   }
 
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/ServerName.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/ServerName.java
index 34ac1e5..d15d86b 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/ServerName.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/ServerName.java
@@ -1,5 +1,4 @@
-/**
- *
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -23,16 +22,13 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.regex.Pattern;
-
 import org.apache.hadoop.hbase.net.Address;
 import org.apache.hadoop.hbase.util.Addressing;
 import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.yetus.audience.InterfaceAudience;
 import org.apache.hbase.thirdparty.com.google.common.collect.Interner;
 import org.apache.hbase.thirdparty.com.google.common.collect.Interners;
 import org.apache.hbase.thirdparty.com.google.common.net.InetAddresses;
-import org.apache.yetus.audience.InterfaceAudience;
-
-
 
 /**
  * Name of a particular incarnation of an HBase Server.
@@ -120,26 +116,25 @@ public class ServerName implements Comparable<ServerName>, Serializable {
         this.address.getPort(), startcode);
   }
 
-  private ServerName(final String serverName) {
-    this(parseHostname(serverName), parsePort(serverName),
-      parseStartcode(serverName));
-  }
-
   private ServerName(final String hostAndPort, final long startCode) {
     this(Address.fromString(hostAndPort), startCode);
   }
 
   /**
-   * @param hostname
+   * @param hostname the hostname string to get the actual hostname from
    * @return hostname minus the domain, if there is one (will do pass-through on ip addresses)
    * @deprecated Since 2.0. This is for internal use only.
    */
   @Deprecated
   // Make this private in hbase-3.0.
   static String getHostNameMinusDomain(final String hostname) {
-    if (InetAddresses.isInetAddress(hostname)) return hostname;
-    String [] parts = hostname.split("\\.");
-    if (parts == null || parts.length == 0) return hostname;
+    if (InetAddresses.isInetAddress(hostname)) {
+      return hostname;
+    }
+    String[] parts = hostname.split("\\.");
+    if (parts.length == 0) {
+      return hostname;
+    }
     return parts[0];
   }
 
@@ -194,7 +189,11 @@ public class ServerName implements Comparable<ServerName>, Serializable {
    * a shared immutable object as an internal optimization.
    */
   public static ServerName valueOf(final String serverName) {
-    return INTERN_POOL.intern(new ServerName(serverName));
+    final String hostname = serverName.substring(0, serverName.indexOf(SERVERNAME_SEPARATOR));
+    final int port = Integer.parseInt(serverName.split(SERVERNAME_SEPARATOR)[1]);
+    final long statuscode =
+      Long.parseLong(serverName.substring(serverName.lastIndexOf(SERVERNAME_SEPARATOR) + 1));
+    return INTERN_POOL.intern(new ServerName(hostname, port, statuscode));
   }
 
   /**
@@ -206,26 +205,40 @@ public class ServerName implements Comparable<ServerName>, Serializable {
     return INTERN_POOL.intern(new ServerName(hostAndPort, startCode));
   }
 
+  /**
+   * Retrieve an instance of {@link ServerName}. Callers should use the {@link #equals(Object)}
+   * method to compare returned instances, though we may return a shared immutable object as an
+   * internal optimization.
+   *
+   * @param address the {@link Address} to use for getting the {@link ServerName}
+   * @param startcode the startcode to use for getting the {@link ServerName}
+   * @return the constructed {@link ServerName}
+   * @see #valueOf(String, int, long)
+   */
+  public static ServerName valueOf(final Address address, final long startcode) {
+    return valueOf(address.getHostname(), address.getPort(), startcode);
+  }
+
   @Override
   public String toString() {
     return getServerName();
   }
 
   /**
-   * @return Return a SHORT version of {@link ServerName#toString()}, one that has the host only,
-   * minus the domain, and the port only -- no start code; the String is for us internally mostly
-   * tying threads to their server.  Not for external use.  It is lossy and will not work in
-   * in compares, etc.
+   * @return Return a SHORT version of {@link #toString()}, one that has the host only,
+   *   minus the domain, and the port only -- no start code; the String is for us internally mostly
+   *   tying threads to their server.  Not for external use.  It is lossy and will not work in
+   *   in compares, etc.
    */
   public String toShortString() {
     return Addressing.createHostAndPortStr(
-        getHostNameMinusDomain(this.address.getHostname()),
-        this.address.getPort());
+      getHostNameMinusDomain(this.address.getHostname()),
+      this.address.getPort());
   }
 
   /**
    * @return {@link #getServerName()} as bytes with a short-sized prefix with
-   * the ServerName#VERSION of this class.
+   *   the {@link #VERSION} of this class.
    */
   public synchronized byte [] getVersionedBytes() {
     if (this.bytes == null) {
@@ -256,37 +269,33 @@ public class ServerName implements Comparable<ServerName>, Serializable {
 
   /**
    * For internal use only.
-   * @param hostName
-   * @param port
-   * @param startcode
+   * @param hostName the name of the host to use
+   * @param port the port on the host to use
+   * @param startcode the startcode to use for formatting
    * @return Server name made of the concatenation of hostname, port and
-   * startcode formatted as <code>&lt;hostname&gt; ',' &lt;port&gt; ',' &lt;startcode&gt;</code>
+   *   startcode formatted as <code>&lt;hostname&gt; ',' &lt;port&gt; ',' &lt;startcode&gt;</code>
    * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, int, long)} instead.
    */
   @Deprecated
   // TODO: Make this private in hbase-3.0.
   static String getServerName(String hostName, int port, long startcode) {
-    final StringBuilder name = new StringBuilder(hostName.length() + 1 + 5 + 1 + 13);
-    name.append(hostName.toLowerCase(Locale.ROOT));
-    name.append(SERVERNAME_SEPARATOR);
-    name.append(port);
-    name.append(SERVERNAME_SEPARATOR);
-    name.append(startcode);
-    return name.toString();
+    return hostName.toLowerCase(Locale.ROOT) + SERVERNAME_SEPARATOR + port
+      + SERVERNAME_SEPARATOR + startcode;
   }
 
   /**
    * @param hostAndPort String in form of &lt;hostname&gt; ':' &lt;port&gt;
-   * @param startcode
+   * @param startcode the startcode to use
    * @return Server name made of the concatenation of hostname, port and
-   * startcode formatted as <code>&lt;hostname&gt; ',' &lt;port&gt; ',' &lt;startcode&gt;</code>
+   *   startcode formatted as <code>&lt;hostname&gt; ',' &lt;port&gt; ',' &lt;startcode&gt;</code>
    * @deprecated Since 2.0. Use {@link ServerName#valueOf(String, long)} instead.
    */
   @Deprecated
-  public static String getServerName(final String hostAndPort,
-      final long startcode) {
-    int index = hostAndPort.indexOf(":");
-    if (index <= 0) throw new IllegalArgumentException("Expected <hostname> ':' <port>");
+  public static String getServerName(final String hostAndPort, final long startcode) {
+    int index = hostAndPort.indexOf(':');
+    if (index <= 0) {
+      throw new IllegalArgumentException("Expected <hostname> ':' <port>");
+    }
     return getServerName(hostAndPort.substring(0, index),
       Integer.parseInt(hostAndPort.substring(index + 1)), startcode);
   }
@@ -366,24 +375,25 @@ public class ServerName implements Comparable<ServerName>, Serializable {
 
   @Override
   public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null) return false;
-    if (!(o instanceof ServerName)) return false;
+    if (this == o) {
+      return true;
+    }
+    if (o == null) {
+      return false;
+    }
+    if (!(o instanceof ServerName)) {
+      return false;
+    }
     return this.compareTo((ServerName)o) == 0;
   }
 
   /**
-   * @param left
-   * @param right
-   * @return True if <code>other</code> has same hostname and port.
+   * @param left the first server address to compare
+   * @param right the second server address to compare
+   * @return {@code true} if {@code left} and {@code right} have the same hostname and port.
    */
-  public static boolean isSameAddress(final ServerName left,
-                                      final ServerName right) {
-    // TODO: Make this left.getAddress().equals(right.getAddress())
-    if (left == null) return false;
-    if (right == null) return false;
-    return left.getHostname().compareToIgnoreCase(right.getHostname()) == 0 &&
-      left.getPort() == right.getPort();
+  public static boolean isSameAddress(final ServerName left, final ServerName right) {
+    return left.getAddress().equals(right.getAddress());
   }
 
   /**
@@ -407,8 +417,8 @@ public class ServerName implements Comparable<ServerName>, Serializable {
   }
 
   /**
-   * @param str Either an instance of {@link ServerName#toString()} or a
-   * "'&lt;hostname&gt;' ':' '&lt;port&gt;'".
+   * @param str Either an instance of {@link #toString()} or a
+   *   "'&lt;hostname&gt;' ':' '&lt;port&gt;'".
    * @return A ServerName instance.
    */
   public static ServerName parseServerName(final String str) {
@@ -416,13 +426,14 @@ public class ServerName implements Comparable<ServerName>, Serializable {
         valueOf(str, NON_STARTCODE);
   }
 
-
   /**
-   * @return true if the String follows the pattern of {@link ServerName#toString()}, false
-   *  otherwise.
+   * @return true if the String follows the pattern of {@link #toString()}, false
+   *   otherwise.
    */
   public static boolean isFullServerName(final String str){
-    if (str == null ||str.isEmpty()) return false;
+    if (str == null ||str.isEmpty()) {
+      return false;
+    }
     return SERVERNAME_PATTERN.matcher(str).matches();
   }
 }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestServerName.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestServerName.java
similarity index 93%
rename from hbase-server/src/test/java/org/apache/hadoop/hbase/TestServerName.java
rename to hbase-common/src/test/java/org/apache/hadoop/hbase/TestServerName.java
index fcbe9c9..977d074 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestServerName.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestServerName.java
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
@@ -22,17 +22,14 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
-
 import java.util.HashSet;
 import java.util.Set;
 import java.util.regex.Pattern;
-
 import org.apache.hadoop.hbase.testclassification.MiscTests;
 import org.apache.hadoop.hbase.testclassification.SmallTests;
 import org.apache.hadoop.hbase.util.Addressing;
 import org.apache.hadoop.hbase.util.Bytes;
 import org.junit.ClassRule;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
@@ -47,7 +44,7 @@ public class TestServerName {
   public void testHash() {
     ServerName sn1 = ServerName.parseServerName("asf903.gq1.ygridcore.net,52690,1517835491385");
     ServerName sn2 = ServerName.parseServerName("asf903.gq1.ygridcore.net,42231,1517835491329");
-    Set<ServerName> sns = new HashSet<ServerName>();
+    Set<ServerName> sns = new HashSet<>();
     sns.add(sn2);
     sns.add(sn1);
     sns.add(sn1);
@@ -57,9 +54,9 @@ public class TestServerName {
   @Test
   public void testGetHostNameMinusDomain() {
     assertEquals("2607:f0d0:1002:51::4",
-        ServerName.getHostNameMinusDomain("2607:f0d0:1002:51::4"));
+      ServerName.getHostNameMinusDomain("2607:f0d0:1002:51::4"));
     assertEquals("2607:f0d0:1002:0051:0000:0000:0000:0004",
-        ServerName.getHostNameMinusDomain("2607:f0d0:1002:0051:0000:0000:0000:0004"));
+      ServerName.getHostNameMinusDomain("2607:f0d0:1002:0051:0000:0000:0000:0004"));
     assertEquals("1.1.1.1", ServerName.getHostNameMinusDomain("1.1.1.1"));
     assertEquals("x", ServerName.getHostNameMinusDomain("x"));
     assertEquals("x", ServerName.getHostNameMinusDomain("x.y.z"));
@@ -143,12 +140,12 @@ public class TestServerName {
     assertSame(sn1, ServerName.valueOf("www.example.org", 1234, 5671));
   }
 
-  @Ignore // Enable and let fun for hours to make sure weak references working fine.
   @Test
   public void testInterningDoesWeakReferences() {
-    for (int i = 0; i < Integer.MAX_VALUE; i++) {
-      ServerName.valueOf("www.example.org", 1234, i++);
+    for (int i = 0; i < 5000; i++) {
+      final int startcode = i++;
+      final ServerName sn1 = ServerName.valueOf("www.example.org", 1234, startcode);
+      assertSame(sn1, ServerName.valueOf("www.example.org", 1234, startcode));
     }
   }
 }
-
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.java
index a754c6b..90483d2 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodeAssignmentHelper.java
@@ -601,7 +601,7 @@ public class FavoredNodeAssignmentHelper {
     }
 
     if (randomServer != null) {
-      return ServerName.valueOf(randomServer.getHostAndPort(), randomServer.getStartcode());
+      return ServerName.valueOf(randomServer.getAddress(), randomServer.getStartcode());
     } else {
       return null;
     }
@@ -629,7 +629,7 @@ public class FavoredNodeAssignmentHelper {
     StringBuilder strBuf = new StringBuilder();
     int i = 0;
     for (ServerName node : nodes) {
-      strBuf.append(node.getHostAndPort());
+      strBuf.append(node.getAddress());
       if (++i != nodes.size()) strBuf.append(";");
     }
     return strBuf.toString();
@@ -773,7 +773,7 @@ public class FavoredNodeAssignmentHelper {
 
     List<ServerName> favoredNodesForRegion = new ArrayList<>(FAVORED_NODES_NUM);
     ServerName primary = servers.get(random.nextInt(servers.size()));
-    favoredNodesForRegion.add(ServerName.valueOf(primary.getHostAndPort(), ServerName.NON_STARTCODE));
+    favoredNodesForRegion.add(ServerName.valueOf(primary.getAddress(), ServerName.NON_STARTCODE));
 
     Map<RegionInfo, ServerName> primaryRSMap = new HashMap<>(1);
     primaryRSMap.put(hri, primary);
@@ -782,7 +782,7 @@ public class FavoredNodeAssignmentHelper {
     ServerName[] secondaryAndTertiaryNodes = secondaryAndTertiaryRSMap.get(hri);
     if (secondaryAndTertiaryNodes != null && secondaryAndTertiaryNodes.length == 2) {
       for (ServerName sn : secondaryAndTertiaryNodes) {
-        favoredNodesForRegion.add(ServerName.valueOf(sn.getHostAndPort(), ServerName.NON_STARTCODE));
+        favoredNodesForRegion.add(ServerName.valueOf(sn.getAddress(), ServerName.NON_STARTCODE));
       }
       return favoredNodesForRegion;
     } else {
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodesManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodesManager.java
index 77334db..a34e3a3 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodesManager.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/FavoredNodesManager.java
@@ -209,7 +209,7 @@ public class FavoredNodesManager {
     primaryRSToRegionMap.put(serverToUse, regionList);
 
     serverToUse = ServerName
-        .valueOf(servers.get(SECONDARY.ordinal()).getHostAndPort(), NON_STARTCODE);
+        .valueOf(servers.get(SECONDARY.ordinal()).getAddress(), NON_STARTCODE);
     regionList = secondaryRSToRegionMap.get(serverToUse);
     if (regionList == null) {
       regionList = new ArrayList<>();
@@ -217,7 +217,7 @@ public class FavoredNodesManager {
     regionList.add(hri);
     secondaryRSToRegionMap.put(serverToUse, regionList);
 
-    serverToUse = ServerName.valueOf(servers.get(TERTIARY.ordinal()).getHostAndPort(),
+    serverToUse = ServerName.valueOf(servers.get(TERTIARY.ordinal()).getAddress(),
       NON_STARTCODE);
     regionList = teritiaryRSToRegionMap.get(serverToUse);
     if (regionList == null) {
@@ -238,7 +238,7 @@ public class FavoredNodesManager {
   public synchronized Map<ServerName, List<Integer>> getReplicaLoad(List<ServerName> servers) {
     Map<ServerName, List<Integer>> result = Maps.newHashMap();
     for (ServerName sn : servers) {
-      ServerName serverWithNoStartCode = ServerName.valueOf(sn.getHostAndPort(), NON_STARTCODE);
+      ServerName serverWithNoStartCode = ServerName.valueOf(sn.getAddress(), NON_STARTCODE);
       List<Integer> countList = Lists.newArrayList();
       if (primaryRSToRegionMap.containsKey(serverWithNoStartCode)) {
         countList.add(primaryRSToRegionMap.get(serverWithNoStartCode).size());
@@ -286,7 +286,7 @@ public class FavoredNodesManager {
   public synchronized Set<RegionInfo> getRegionsOfFavoredNode(ServerName serverName) {
     Set<RegionInfo> regionInfos = Sets.newHashSet();
 
-    ServerName serverToUse = ServerName.valueOf(serverName.getHostAndPort(), NON_STARTCODE);
+    ServerName serverToUse = ServerName.valueOf(serverName.getAddress(), NON_STARTCODE);
     if (primaryRSToRegionMap.containsKey(serverToUse)) {
       regionInfos.addAll(primaryRSToRegionMap.get(serverToUse));
     }
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.java
index d1f9f45..2a76000 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/favored/StartcodeAgnosticServerName.java
@@ -61,7 +61,7 @@ class StartcodeAgnosticServerName extends ServerName {
 
   @Override
   public int hashCode() {
-    return getHostAndPort().hashCode();
+    return getAddress().hashCode();
   }
 
   // Do not need @Override #equals() because super.equals() delegates to compareTo(), which ends
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentVerificationReport.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentVerificationReport.java
index 5c084bf..420eef7 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentVerificationReport.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentVerificationReport.java
@@ -619,7 +619,7 @@ public class AssignmentVerificationReport {
       if ((i++) % 3 == 0) {
         System.out.print("\n\t\t\t");
       }
-      System.out.print(addr.getHostAndPort() + " ; ");
+      System.out.print(addr.getAddress() + " ; ");
     }
     System.out.println("\n");
   }
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 12e9485..a93f7a9 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
@@ -716,7 +716,7 @@ public class RegionPlacementMaintainer {
           " region servers with its corresponding favored nodes");
       for (Map.Entry<ServerName, Exception> entry :
         failedUpdateMap.entrySet() ) {
-        LOG.error("Failed to update " + entry.getKey().getHostAndPort() +
+        LOG.error("Failed to update " + entry.getKey().getAddress() +
             " because of " + entry.getValue().getMessage());
       }
     }
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
index d83efea..ad442bb 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java
@@ -56,6 +56,7 @@ import org.apache.hadoop.hbase.master.MasterServices;
 import org.apache.hadoop.hbase.master.RackManager;
 import org.apache.hadoop.hbase.master.RegionPlan;
 import org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.Cluster.Action.Type;
+import org.apache.hadoop.hbase.net.Address;
 import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;
 import org.apache.hbase.thirdparty.com.google.common.base.Joiner;
 import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap;
@@ -164,7 +165,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
     Integer[] serverIndicesSortedByRegionCount;
     Integer[] serverIndicesSortedByLocality;
 
-    Map<String, Integer> serversToIndex;
+    Map<Address, Integer> serversToIndex;
     Map<String, Integer> hostsToIndex;
     Map<String, Integer> racksToIndex;
     Map<String, Integer> tablesToIndex;
@@ -233,15 +234,15 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
           }
           continue;
         }
-        if (serversToIndex.get(sn.getAddress().toString()) == null) {
-          serversToIndex.put(sn.getHostAndPort(), numServers++);
+        if (serversToIndex.get(sn.getAddress()) == null) {
+          serversToIndex.put(sn.getAddress(), numServers++);
         }
         if (!hostsToIndex.containsKey(sn.getHostname())) {
           hostsToIndex.put(sn.getHostname(), numHosts++);
           serversPerHostList.add(new ArrayList<>(1));
         }
 
-        int serverIndex = serversToIndex.get(sn.getHostAndPort());
+        int serverIndex = serversToIndex.get(sn.getAddress());
         int hostIndex = hostsToIndex.get(sn.getHostname());
         serversPerHostList.get(hostIndex).add(serverIndex);
 
@@ -293,7 +294,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
           LOG.warn("SERVERNAME IS NULL, skipping " + entry.getValue());
           continue;
         }
-        int serverIndex = serversToIndex.get(entry.getKey().getHostAndPort());
+        int serverIndex = serversToIndex.get(entry.getKey().getAddress());
 
         // keep the servername if this is the first server name for this hostname
         // or this servername has the newest startcode.
@@ -324,7 +325,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
       }
 
       for (Entry<ServerName, List<RegionInfo>> entry : clusterState.entrySet()) {
-        int serverIndex = serversToIndex.get(entry.getKey().getHostAndPort());
+        int serverIndex = serversToIndex.get(entry.getKey().getAddress());
         regionPerServerIndex = serverIndexToRegionsOffset[serverIndex];
 
         int hostIndex = hostsToIndex.get(entry.getKey().getHostname());
@@ -496,8 +497,8 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
         regionLocations[regionIndex] = new int[loc.size()];
         for (int i = 0; i < loc.size(); i++) {
           regionLocations[regionIndex][i] = loc.get(i) == null ? -1
-              : (serversToIndex.get(loc.get(i).getHostAndPort()) == null ? -1
-                  : serversToIndex.get(loc.get(i).getHostAndPort()));
+              : (serversToIndex.get(loc.get(i).getAddress()) == null ? -1
+                  : serversToIndex.get(loc.get(i).getAddress()));
         }
       }
     }
@@ -742,10 +743,10 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
      * @return true or false
      */
     boolean wouldLowerAvailability(RegionInfo regionInfo, ServerName serverName) {
-      if (!serversToIndex.containsKey(serverName.getHostAndPort())) {
+      if (!serversToIndex.containsKey(serverName.getAddress())) {
         return false; // safeguard against race between cluster.servers and servers from LB method args
       }
-      int server = serversToIndex.get(serverName.getHostAndPort());
+      int server = serversToIndex.get(serverName.getAddress());
       int region = regionsToIndex.get(regionInfo);
 
       // Region replicas for same region should better assign to different servers
@@ -805,10 +806,10 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
     }
 
     void doAssignRegion(RegionInfo regionInfo, ServerName serverName) {
-      if (!serversToIndex.containsKey(serverName.getHostAndPort())) {
+      if (!serversToIndex.containsKey(serverName.getAddress())) {
         return;
       }
-      int server = serversToIndex.get(serverName.getHostAndPort());
+      int server = serversToIndex.get(serverName.getAddress());
       int region = regionsToIndex.get(regionInfo);
       doAction(new AssignRegionAction(region, server));
     }
@@ -1004,7 +1005,7 @@ public abstract class BaseLoadBalancer implements LoadBalancer {
     public String toString() {
       StringBuilder desc = new StringBuilder("Cluster={servers=[");
       for(ServerName sn:servers) {
-        desc.append(sn.getHostAndPort()).append(", ");
+        desc.append(sn.getAddress().toString()).append(", ");
       }
       desc.append("], serverIndicesSortedByRegionCount=")
           .append(Arrays.toString(serverIndicesSortedByRegionCount))
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 e306406..8cd6d81 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
@@ -599,8 +599,8 @@ public class FavoredStochasticBalancer extends StochasticLoadBalancer implements
         int currentServer) {
       List<Integer> fnIndex = new ArrayList<>();
       for (ServerName sn : favoredNodes) {
-        if (cluster.serversToIndex.containsKey(sn.getHostAndPort())) {
-          fnIndex.add(cluster.serversToIndex.get(sn.getHostAndPort()));
+        if (cluster.serversToIndex.containsKey(sn.getAddress())) {
+          fnIndex.add(cluster.serversToIndex.get(sn.getAddress()));
         }
       }
       float locality = 0;
@@ -663,8 +663,8 @@ public class FavoredStochasticBalancer extends StochasticLoadBalancer implements
         int currentServerIndex) {
       List<Integer> fnIndex = new ArrayList<>();
       for (ServerName sn : favoredNodes) {
-        if (cluster.serversToIndex.containsKey(sn.getHostAndPort())) {
-          fnIndex.add(cluster.serversToIndex.get(sn.getHostAndPort()));
+        if (cluster.serversToIndex.containsKey(sn.getAddress())) {
+          fnIndex.add(cluster.serversToIndex.get(sn.getAddress()));
         }
       }
       int leastLoadedFN = -1;
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
index 1783d7d..e964a23 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java
@@ -1770,7 +1770,7 @@ public class HBaseFsck extends Configured implements Closeable {
       try {
         f.get();
       } catch(ExecutionException e) {
-        LOG.warn("Could not process regionserver " + item.rsinfo.getHostAndPort(),
+        LOG.warn("Could not process regionserver {}", item.rsinfo.getAddress(),
             e.getCause());
       }
     }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/MetaMockingUtil.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/MetaMockingUtil.java
index eb616bb..44b82a8 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/MetaMockingUtil.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/MetaMockingUtil.java
@@ -79,7 +79,7 @@ public class MetaMockingUtil {
     if (sn != null) {
       kvs.add(new KeyValue(region.getRegionName(),
         HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER,
-        Bytes.toBytes(sn.getHostAndPort())));
+        Bytes.toBytes(sn.getAddress().toString())));
       kvs.add(new KeyValue(region.getRegionName(),
         HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER,
         Bytes.toBytes(sn.getStartcode())));
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java
index 9869028..0cdfd21 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java
@@ -531,7 +531,7 @@ public class TestMetaTableAccessor {
     Result result = meta.get(get);
     assertTrue(Bytes.equals(
       result.getValue(HConstants.CATALOG_FAMILY, MetaTableAccessor.getServerColumn(replicaId)),
-      Bytes.toBytes(serverName.getHostAndPort())));
+      Bytes.toBytes(serverName.getAddress().toString())));
     assertTrue(Bytes.equals(
       result.getValue(HConstants.CATALOG_FAMILY, MetaTableAccessor.getStartCodeColumn(replicaId)),
       Bytes.toBytes(serverName.getStartcode())));
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.java
index ca03cb6..75a86e2 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessorNoCluster.java
@@ -169,7 +169,7 @@ public class TestMetaTableAccessorNoCluster {
           RegionInfo.toByteArray(RegionInfoBuilder.FIRST_META_REGIONINFO)));
       kvs.add(new KeyValue(rowToVerify,
         HConstants.CATALOG_FAMILY, HConstants.SERVER_QUALIFIER,
-        Bytes.toBytes(sn.getHostAndPort())));
+        Bytes.toBytes(sn.getAddress().toString())));
       kvs.add(new KeyValue(rowToVerify,
         HConstants.CATALOG_FAMILY, HConstants.STARTCODE_QUALIFIER,
         Bytes.toBytes(sn.getStartcode())));
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java
index 89a9540..ef902e8 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestConnectionImplementation.java
@@ -663,7 +663,7 @@ public class TestConnectionImplementation {
     }
     Assert.assertNotNull("Cached connection is null", conn.getCachedLocation(TABLE_NAME, ROW));
     Assert.assertEquals(
-        "Previous server was " + curServer.getServerName().getHostAndPort(),
+        "Previous server was " + curServer.getServerName().getAddress(),
         destServerName.getPort(),
         conn.getCachedLocation(TABLE_NAME, ROW).getRegionLocation().getPort());
 
@@ -714,7 +714,7 @@ public class TestConnectionImplementation {
     // Cache is updated with the right value.
     Assert.assertNotNull(conn.getCachedLocation(TABLE_NAME, ROW));
     Assert.assertEquals(
-      "Previous server was "+destServer.getServerName().getHostAndPort(),
+      "Previous server was "+destServer.getServerName().getAddress(),
       curServer.getServerName().getPort(),
       conn.getCachedLocation(TABLE_NAME, ROW).getRegionLocation().getPort());
 
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestShortCircuitConnection.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestShortCircuitConnection.java
index beaa59b..991cfb9 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestShortCircuitConnection.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestShortCircuitConnection.java
@@ -84,7 +84,7 @@ public class TestShortCircuitConnection {
     ClientService.BlockingInterface client = connection.getClient(regionServer.getServerName());
     assertTrue(admin instanceof RSRpcServices);
     assertTrue(client instanceof RSRpcServices);
-    ServerName anotherSn = ServerName.valueOf(regionServer.getServerName().getHostAndPort(),
+    ServerName anotherSn = ServerName.valueOf(regionServer.getServerName().getAddress(),
       EnvironmentEdgeManager.currentTime());
     admin = connection.getAdmin(anotherSn);
     client = connection.getClient(anotherSn);
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.java
index bc721e1..a42410a 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/favored/TestFavoredNodeAssignmentHelper.java
@@ -476,7 +476,7 @@ public class TestFavoredNodeAssignmentHelper {
     for (int attempts = 0 ; attempts < MAX_ATTEMPTS; attempts++) {
       ServerName sn = helper.getOneRandomServer(rack, skipServers);
       assertNotEquals("Skip server should not be selected ",
-          skipSN.getHostAndPort(), sn.getHostAndPort());
+          skipSN.getAddress(), sn.getAddress());
       assertTrue("Server:" + sn + " does not belong to list: " + servers, servers.contains(sn));
     }
   }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java
index 1d78e13..87028f3 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java
@@ -450,7 +450,7 @@ public class TestRegionPlacement {
 
             assertNotNull(addrFromRS);
             assertNotNull(addrFromPlan);
-            assertTrue("Region server " + rs.getServerName().getHostAndPort()
+            assertTrue("Region server " + rs.getServerName().getAddress()
                 + " has the " + positions[j] +
                 " for region " + region.getRegionInfo().getRegionNameAsString() + " is " +
                 addrFromRS + " which is inconsistent with the plan "
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
index 137d50d..794ffd3 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestBaseLoadBalancer.java
@@ -494,8 +494,8 @@ public class TestBaseLoadBalancer extends BalancerTestBase {
     // test move
     ServerName sn = oldServers.get(0);
     int r0 = ArrayUtils.indexOf(cluster.regions, clusterState.get(sn).get(0));
-    int f0 = cluster.serversToIndex.get(sn.getHostAndPort());
-    int t0 = cluster.serversToIndex.get(servers.get(1).getHostAndPort());
+    int f0 = cluster.serversToIndex.get(sn.getAddress());
+    int t0 = cluster.serversToIndex.get(servers.get(1).getAddress());
     cluster.doAction(new MoveRegionAction(r0, f0, t0));
   }
 
@@ -544,11 +544,11 @@ public class TestBaseLoadBalancer extends BalancerTestBase {
     int r42 = ArrayUtils.indexOf(cluster.regions, regions.get(42));
     int r43 = ArrayUtils.indexOf(cluster.regions, regions.get(43));
 
-    int s0 = cluster.serversToIndex.get(servers.get(0).getHostAndPort());
-    int s1 = cluster.serversToIndex.get(servers.get(1).getHostAndPort());
-    int s4 = cluster.serversToIndex.get(servers.get(4).getHostAndPort());
-    int s5 = cluster.serversToIndex.get(servers.get(5).getHostAndPort());
-    int s9 = cluster.serversToIndex.get(servers.get(9).getHostAndPort());
+    int s0 = cluster.serversToIndex.get(servers.get(0).getAddress());
+    int s1 = cluster.serversToIndex.get(servers.get(1).getAddress());
+    int s4 = cluster.serversToIndex.get(servers.get(4).getAddress());
+    int s5 = cluster.serversToIndex.get(servers.get(5).getAddress());
+    int s9 = cluster.serversToIndex.get(servers.get(9).getAddress());
 
     // region 0 locations
     assertEquals(1, cluster.regionLocations[r0].length);
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java
index 6a050a8..73071c7 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.java
@@ -212,7 +212,8 @@ public class TestFavoredStochasticBalancerPickers extends BalancerTestBase {
           assertEquals(cluster.servers[moveRegionAction.fromServer], mostLoadedServer);
           if (!region.getTable().isSystemTable()) {
             List<ServerName> favNodes = fnm.getFavoredNodes(region);
-            assertTrue(favNodes.contains(ServerName.valueOf(destinationServer.getHostAndPort(), -1)));
+            assertTrue(favNodes.contains(
+              ServerName.valueOf(destinationServer.getAddress(), -1)));
             userRegionPicked = true;
           }
         }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java
index e6ea096..4966373 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/procedure/MasterProcedureTestingUtility.java
@@ -265,7 +265,7 @@ public class MasterProcedureTestingUtility {
           if (location == null) continue;
           ServerName serverName = location.getServerName();
           // Make sure that regions are assigned to server
-          if (serverName != null && serverName.getHostAndPort() != null) {
+          if (serverName != null && serverName.getAddress() != null) {
             actualRegCount.incrementAndGet();
           }
         }
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java
index 878ca75..28b86f5 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java
@@ -164,7 +164,7 @@ public class TestRegionServerAbort {
   public void testStopOverrideFromCoprocessor() throws Exception {
     Admin admin = testUtil.getHBaseAdmin();
     HRegionServer regionserver = cluster.getRegionServer(0);
-    admin.stopRegionServer(regionserver.getServerName().getHostAndPort());
+    admin.stopRegionServer(regionserver.getServerName().getAddress().toString());
 
     // regionserver should have failed to stop due to coprocessor
     assertFalse(cluster.getRegionServer(0).isAborted());