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);