You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2022/01/20 16:02:47 UTC
[logging-log4j2] branch master updated: Use a singleton for HostResolver since it is stateless.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push:
new dcf40fc Use a singleton for HostResolver since it is stateless.
dcf40fc is described below
commit dcf40fcbc2657ac86811e02e51da60cff005421b
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Thu Jan 20 10:49:05 2022 -0500
Use a singleton for HostResolver since it is stateless.
---
.../apache/logging/log4j/core/net/SslSocketManager.java | 2 +-
.../apache/logging/log4j/core/net/TcpSocketManager.java | 15 ++++++++++-----
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
index 2f2e521..721a423 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/SslSocketManager.java
@@ -132,7 +132,7 @@ public class SslSocketManager extends TcpSocketManager {
@Override
Socket createSocket(final SslFactoryData data) throws IOException {
- final List<InetSocketAddress> socketAddresses = resolver.resolveHost(data.host, data.port);
+ final List<InetSocketAddress> socketAddresses = RESOLVER.resolveHost(data.host, data.port);
IOException ioe = null;
for (final InetSocketAddress socketAddress : socketAddresses) {
try {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
index c70206d..6698c1e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/TcpSocketManager.java
@@ -284,7 +284,7 @@ public class TcpSocketManager extends AbstractSocketManager {
}
void reconnect() throws IOException {
- final List<InetSocketAddress> socketAddresses = FACTORY.resolver.resolveHost(host, port);
+ final List<InetSocketAddress> socketAddresses = TcpSocketManagerFactory.RESOLVER.resolveHost(host, port);
if (socketAddresses.size() == 1) {
LOGGER.debug("Reconnecting " + socketAddresses.get(0));
connect(socketAddresses.get(0));
@@ -399,7 +399,7 @@ public class TcpSocketManager extends AbstractSocketManager {
protected static class TcpSocketManagerFactory<M extends TcpSocketManager, T extends FactoryData>
implements ManagerFactory<M, T> {
- static HostResolver resolver = new HostResolver();
+ static volatile HostResolver RESOLVER = HostResolver.INSTANCE;
@SuppressWarnings("resource")
@Override
@@ -437,7 +437,7 @@ public class TcpSocketManager extends AbstractSocketManager {
}
Socket createSocket(final T data) throws IOException {
- final List<InetSocketAddress> socketAddresses = resolver.resolveHost(data.host, data.port);
+ final List<InetSocketAddress> socketAddresses = RESOLVER.resolveHost(data.host, data.port);
IOException ioe = null;
for (final InetSocketAddress socketAddress : socketAddresses) {
try {
@@ -475,11 +475,16 @@ public class TcpSocketManager extends AbstractSocketManager {
* This method is only for unit testing. It is not Thread-safe.
* @param resolver the HostResolver.
*/
- public static void setHostResolver(final HostResolver resolver) {
- TcpSocketManagerFactory.resolver = resolver;
+ public static void setHostResolver(HostResolver resolver) {
+ TcpSocketManagerFactory.RESOLVER = resolver;
}
public static class HostResolver {
+
+ /**
+ * Singleton instance.
+ */
+ public static final HostResolver INSTANCE = new HostResolver();
public List<InetSocketAddress> resolveHost(final String host, final int port) throws UnknownHostException {
final InetAddress[] addresses = InetAddress.getAllByName(host);