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()),