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

bschuchardt pushed a commit to branch feature/GEODE-7808b
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/GEODE-7808b by this 
push:
     new a46d2e1  reinstate SocketCreator ip to hostname cache for performance
a46d2e1 is described below

commit a46d2e144f5344c422552f6675b1e9d287482aaf
Author: Bruce Schuchardt <[email protected]>
AuthorDate: Tue Mar 3 13:46:43 2020 -0800

    reinstate SocketCreator ip to hostname cache for performance
---
 .../internal/ExplicitConnectionSourceImpl.java     |  2 +-
 .../geode/cache/client/internal/PoolImpl.java      |  4 +--
 .../membership/InternalDistributedMember.java      |  2 +-
 .../admin/remote/DistributionLocatorId.java        |  3 +-
 .../geode/internal/cache/PoolFactoryImpl.java      |  4 +--
 .../cache/persistence/PersistentMemberPattern.java |  3 +-
 .../tier/sockets/ProtobufServerConnection.java     |  2 +-
 .../internal/cache/xmlcache/CacheXmlGenerator.java |  4 +--
 .../internal/net/SCAdvancedSocketCreator.java      |  2 +-
 .../apache/geode/internal/net/SocketCreator.java   | 39 ++++++++++++++++++++++
 .../org/apache/geode/internal/tcp/Connection.java  |  3 +-
 .../internal/api/GeodeConnectionConfig.java        |  2 +-
 .../geode/test/dunit/rules/DistributedRule.java    |  1 +
 .../gms/locator/MembershipLocatorImpl.java         |  3 +-
 .../tcpserver/AdvancedSocketCreatorImpl.java       |  2 +-
 15 files changed, 60 insertions(+), 16 deletions(-)

diff --git 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExplicitConnectionSourceImpl.java
 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExplicitConnectionSourceImpl.java
index 285503b..e5f0a0b 100644
--- 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExplicitConnectionSourceImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ExplicitConnectionSourceImpl.java
@@ -61,7 +61,7 @@ public class ExplicitConnectionSourceImpl implements 
ConnectionSource {
   ExplicitConnectionSourceImpl(List<InetSocketAddress> contacts) {
     ArrayList<ServerLocation> serverList = new ArrayList<>(contacts.size());
     for (InetSocketAddress addr : contacts) {
-      serverList.add(new ServerLocation(addr.getHostName(), addr.getPort()));
+      serverList.add(new ServerLocation(addr.getHostString(), addr.getPort()));
     }
     shuffle(serverList);
     this.serverList = Collections.unmodifiableList(serverList);
diff --git 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
index 8738dd4..a6ab75a 100644
--- 
a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
@@ -226,9 +226,9 @@ public class PoolImpl implements InternalPool {
     serverGroup = attributes.getServerGroup();
     multiuserSecureModeEnabled = attributes.getMultiuserAuthentication();
     locators = attributes.getLocators().stream()
-        .map(x -> new HostAndPort(x.getHostName(), 
x.getPort())).collect(Collectors.toList());
+        .map(x -> new HostAndPort(x.getHostString(), 
x.getPort())).collect(Collectors.toList());
     servers = attributes.getServers().stream()
-        .map(x -> new HostAndPort(x.getHostName(), x.getPort())).collect(
+        .map(x -> new HostAndPort(x.getHostString(), x.getPort())).collect(
             Collectors.toList());
     startDisabled =
         ((PoolFactoryImpl.PoolAttributes) attributes).startDisabled || 
!pm.isNormal();
diff --git 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
index 37a1b97..c44ed2c 100755
--- 
a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
+++ 
b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/InternalDistributedMember.java
@@ -100,7 +100,7 @@ public class InternalDistributedMember
   }
 
   private static String getHostName(InetAddress i) {
-    return SocketCreator.resolve_dns ? i.getHostName() : i.getHostAddress();
+    return SocketCreator.resolve_dns ? SocketCreator.getHostName(i) : 
i.getHostAddress();
   }
 
   /**
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java
 
b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java
index a0526c0..2ede0a1 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/DistributionLocatorId.java
@@ -29,6 +29,7 @@ import 
org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.tcpserver.HostAndPort;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.inet.LocalHostUtil;
+import org.apache.geode.internal.net.SocketCreator;
 
 /**
  * Identifies the host, port, and bindAddress a distribution locator is 
listening on.
@@ -292,7 +293,7 @@ public class DistributionLocatorId implements 
java.io.Serializable {
       if (isMcastId()) {
         sb.append(this.host.getHostAddress());
       } else {
-        sb.append(this.host.getHostName());
+        sb.append(SocketCreator.getHostName(this.host));
       }
     }
 
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java 
b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
index 51f3e56..300854a 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
@@ -319,10 +319,10 @@ public class PoolFactoryImpl implements 
InternalPoolFactory {
     setServerGroup(cp.getServerGroup());
     setMultiuserAuthentication(cp.getMultiuserAuthentication());
     for (InetSocketAddress address : cp.getLocators()) {
-      addLocator(address.getHostName(), address.getPort());
+      addLocator(address.getHostString(), address.getPort());
     }
     attributes.servers.addAll(cp.getServers().stream()
-        .map(x -> new HostAndPort(x.getHostName(), 
x.getPort())).collect(Collectors.toList()));
+        .map(x -> new HostAndPort(x.getHostString(), 
x.getPort())).collect(Collectors.toList()));
   }
 
   public void init(GatewaySender sender) {
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberPattern.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberPattern.java
index db0726e..1b9d56a 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberPattern.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/persistence/PersistentMemberPattern.java
@@ -22,6 +22,7 @@ import java.util.UUID;
 
 import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.persistence.PersistentID;
+import org.apache.geode.internal.net.SocketCreator;
 
 /**
  * Implementation of the public PersistentID. It holds the region, host, 
directory, and timestamp.
@@ -95,7 +96,7 @@ public class PersistentMemberPattern implements PersistentID, 
Comparable<Persist
     result.append(diskStoreID);
     if (host != null) {
       result.append(" [");
-      result.append(host.getHostName());
+      result.append(SocketCreator.getHostName(host));
       result.append(":");
       result.append(directory);
       result.append(",revoked@").append(revokedTime);
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ProtobufServerConnection.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ProtobufServerConnection.java
index 86c22a4..611619e 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ProtobufServerConnection.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ProtobufServerConnection.java
@@ -101,7 +101,7 @@ class ProtobufServerConnection extends ServerConnection {
 
   private void setClientProxyMembershipId() {
     ServerLocation serverLocation = new ServerLocation(
-        ((InetSocketAddress) 
getSocket().getRemoteSocketAddress()).getHostName(),
+        ((InetSocketAddress) 
getSocket().getRemoteSocketAddress()).getHostString(),
         getSocketPort());
     DistributedMember distributedMember = new 
InternalDistributedMember(serverLocation);
     // no handshake for new client protocol.
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java
 
b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java
index 57a372e..37ebce5 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheXmlGenerator.java
@@ -1215,7 +1215,7 @@ public class CacheXmlGenerator extends CacheXml 
implements XMLReader {
       {
         for (InetSocketAddress addr : cp.getLocators()) {
           AttributesImpl sAtts = new AttributesImpl();
-          sAtts.addAttribute("", "", HOST, "", addr.getHostName());
+          sAtts.addAttribute("", "", HOST, "", addr.getHostString());
           sAtts.addAttribute("", "", PORT, "", String.valueOf(addr.getPort()));
           handler.startElement("", LOCATOR, LOCATOR, sAtts);
           handler.endElement("", LOCATOR, LOCATOR);
@@ -1224,7 +1224,7 @@ public class CacheXmlGenerator extends CacheXml 
implements XMLReader {
       {
         for (InetSocketAddress addr : cp.getServers()) {
           AttributesImpl sAtts = new AttributesImpl();
-          sAtts.addAttribute("", "", HOST, "", addr.getHostName());
+          sAtts.addAttribute("", "", HOST, "", addr.getHostString());
           sAtts.addAttribute("", "", PORT, "", String.valueOf(addr.getPort()));
           handler.startElement("", SERVER, SERVER, sAtts);
           handler.endElement("", SERVER, SERVER);
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/net/SCAdvancedSocketCreator.java
 
b/geode-core/src/main/java/org/apache/geode/internal/net/SCAdvancedSocketCreator.java
index 4879e60..a9af3f5 100644
--- 
a/geode-core/src/main/java/org/apache/geode/internal/net/SCAdvancedSocketCreator.java
+++ 
b/geode-core/src/main/java/org/apache/geode/internal/net/SCAdvancedSocketCreator.java
@@ -58,7 +58,7 @@ class SCAdvancedSocketCreator extends 
AdvancedSocketCreatorImpl {
     Socket socket;
     InetSocketAddress sockaddr = addr.getSocketInetAddress();
     if (sockaddr.getAddress() == null) {
-      InetAddress address = InetAddress.getByName(sockaddr.getHostName());
+      InetAddress address = InetAddress.getByName(sockaddr.getHostString());
       sockaddr = new InetSocketAddress(address, sockaddr.getPort());
     }
 
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java 
b/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
index 8027dfd..bf0d72f 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/net/SocketCreator.java
@@ -40,6 +40,7 @@ import java.security.cert.X509Certificate;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.KeyManagerFactory;
@@ -113,6 +114,9 @@ public class SocketCreator extends TcpSocketCreatorImpl {
   @MakeNotStatic
   public static volatile boolean use_client_host_name = true;
 
+  @MakeNotStatic
+  private static final ConcurrentHashMap<InetAddress, String> hostNames = new 
ConcurrentHashMap<>();
+
   /**
    * Only print this SocketCreator's config once
    */
@@ -149,6 +153,41 @@ public class SocketCreator extends TcpSocketCreatorImpl {
     return LocalHostUtil.getLocalHost();
   }
 
+
+  /**
+   * returns the host name for the given inet address, using a local cache of 
names to avoid dns
+   * hits and duplicate strings
+   */
+  public static String getHostName(InetAddress addr) {
+    String result = hostNames.get(addr);
+    if (result == null) {
+      result = addr.getHostName();
+      hostNames.put(addr, result);
+    }
+    return result;
+  }
+
+  /**
+   * returns the host name for the given inet address, using a local cache of 
names to avoid dns
+   * hits and duplicate strings
+   */
+  public static String getCanonicalHostName(InetAddress addr, String hostName) 
{
+    String result = hostNames.get(addr);
+    if (result == null) {
+      hostNames.put(addr, hostName);
+      return hostName;
+    }
+    return result;
+  }
+
+  /**
+   * Reset the hostNames caches
+   */
+  public static void resetHostNameCache() {
+    hostNames.clear();
+  }
+
+
   // -------------------------------------------------------------------------
   // Constructor
   // -------------------------------------------------------------------------
diff --git 
a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java 
b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
index e91b1fa..8667e30 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
@@ -1708,7 +1708,8 @@ public class Connection implements Runnable {
     if (getConduit().useSSL() && channel != null) {
       InetSocketAddress address = (InetSocketAddress) 
channel.getRemoteAddress();
       SSLEngine engine =
-          
getConduit().getSocketCreator().createSSLEngine(address.getHostName(), 
address.getPort());
+          
getConduit().getSocketCreator().createSSLEngine(address.getHostString(),
+              address.getPort());
 
       int packetBufferSize = engine.getSession().getPacketBufferSize();
       if (inputBuffer == null || inputBuffer.capacity() < packetBufferSize) {
diff --git 
a/geode-core/src/main/java/org/apache/geode/management/internal/api/GeodeConnectionConfig.java
 
b/geode-core/src/main/java/org/apache/geode/management/internal/api/GeodeConnectionConfig.java
index 183c913..62333c2 100644
--- 
a/geode-core/src/main/java/org/apache/geode/management/internal/api/GeodeConnectionConfig.java
+++ 
b/geode-core/src/main/java/org/apache/geode/management/internal/api/GeodeConnectionConfig.java
@@ -109,7 +109,7 @@ public class GeodeConnectionConfig extends ConnectionConfig 
{
     for (InetSocketAddress locator : locators) {
       try {
         cmsInfo = (ClusterManagementServiceInfo) client.requestToServer(
-            new HostAndPort(locator.getHostName(), locator.getPort()),
+            new HostAndPort(locator.getHostString(), locator.getPort()),
             new ClusterManagementServiceInfoRequest(), 1000, true);
 
         // do not try anymore if we found one that has cms running
diff --git 
a/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/DistributedRule.java
 
b/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/DistributedRule.java
index 992dd0f..7799697 100644
--- 
a/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/DistributedRule.java
+++ 
b/geode-dunit/src/main/java/org/apache/geode/test/dunit/rules/DistributedRule.java
@@ -241,6 +241,7 @@ public class DistributedRule extends 
AbstractDistributedRule {
       QueryObserverHolder.reset();
       QueryTestUtils.setCache(null);
       RegionTestCase.preSnapshotRegion = null;
+      SocketCreator.resetHostNameCache();
       SocketCreator.resolve_dns = true;
       TcpClient.clearStaticData();
 
diff --git 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
index 81f3e80..3bb89d7 100644
--- 
a/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
+++ 
b/geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/MembershipLocatorImpl.java
@@ -178,7 +178,8 @@ public class MembershipLocatorImpl<ID extends 
MemberIdentifier> implements Membe
       logger.info("Stopping {}", this);
       try {
         locatorClient
-            .stop(new HostAndPort(((InetSocketAddress) 
getBindAddress()).getHostName(), getPort()));
+            .stop(
+                new HostAndPort(((InetSocketAddress) 
getBindAddress()).getHostString(), getPort()));
       } catch (ConnectException ignore) {
         // must not be running
       }
diff --git 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/AdvancedSocketCreatorImpl.java
 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/AdvancedSocketCreatorImpl.java
index 16104ec..650a616 100644
--- 
a/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/AdvancedSocketCreatorImpl.java
+++ 
b/geode-tcp-server/src/main/java/org/apache/geode/distributed/internal/tcpserver/AdvancedSocketCreatorImpl.java
@@ -85,7 +85,7 @@ public class AdvancedSocketCreatorImpl implements 
AdvancedSocketCreator {
       try {
         InetAddress serverAddress = inetSocketAddress.getAddress();
         if (serverAddress == null) {
-          serverAddress = 
InetAddress.getByName(inetSocketAddress.getHostName());
+          serverAddress = 
InetAddress.getByName(inetSocketAddress.getHostString());
         }
         socket.connect(
             new InetSocketAddress(serverAddress, inetSocketAddress.getPort()),

Reply via email to