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

markt-asf pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit bac1f6c0d2dad52636f45b093c24155ae06bfd51
Author: Mark Thomas <[email protected]>
AuthorDate: Thu Sep 24 10:31:57 2026 +0100

    Better logging for secure vs non-secure cluster configuration
---
 .../catalina/tribes/group/TribesSslContext.java    |  9 ++++
 .../tribes/transport/LocalStrings.properties       |  2 +-
 .../catalina/tribes/transport/ReceiverBase.java    | 57 +++++++++++++---------
 .../catalina/tribes/transport/nio/NioReceiver.java |  4 +-
 4 files changed, 45 insertions(+), 27 deletions(-)

diff --git a/java/org/apache/catalina/tribes/group/TribesSslContext.java 
b/java/org/apache/catalina/tribes/group/TribesSslContext.java
index d302bdfc34..4ab59fbd80 100644
--- a/java/org/apache/catalina/tribes/group/TribesSslContext.java
+++ b/java/org/apache/catalina/tribes/group/TribesSslContext.java
@@ -150,4 +150,13 @@ public class TribesSslContext implements AutoCloseable {
             }
         }
     }
+
+
+    public String getImplementationName() {
+        if (ffm) {
+            return "TLS-OpenSSL-FFM";
+        } else {
+            return "TLS-OpenSSL";
+        }
+    }
 }
diff --git a/java/org/apache/catalina/tribes/transport/LocalStrings.properties 
b/java/org/apache/catalina/tribes/transport/LocalStrings.properties
index e2d64970a2..658d53834e 100644
--- a/java/org/apache/catalina/tribes/transport/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/transport/LocalStrings.properties
@@ -18,7 +18,7 @@ PooledSender.senderDisconnectFail=Failed to disconnect sender
 pooledSender.closed.queue=Queue is closed
 
 receiverBase.bind.failed=Failed bind replication listener on address:[{0}]
-receiverBase.socket.bind=Receiver Server Socket bound to:[{0}]
+receiverBase.socket.bind=Receiver Server Socket bound to:[{0}] using [{1}]
 receiverBase.start=Starting replication listener on address [{0}]
 receiverBase.udp.bind=UDP Receiver Server Socket bound to:[{0}]
 receiverBase.unable.bind=Unable to bind server socket to:[{0}] throwing error.
diff --git a/java/org/apache/catalina/tribes/transport/ReceiverBase.java 
b/java/org/apache/catalina/tribes/transport/ReceiverBase.java
index 3fa1c5064a..ba6b8d5e6e 100644
--- a/java/org/apache/catalina/tribes/transport/ReceiverBase.java
+++ b/java/org/apache/catalina/tribes/transport/ReceiverBase.java
@@ -33,6 +33,7 @@ import org.apache.catalina.tribes.Channel;
 import org.apache.catalina.tribes.ChannelMessage;
 import org.apache.catalina.tribes.ChannelReceiver;
 import org.apache.catalina.tribes.MessageListener;
+import org.apache.catalina.tribes.group.GroupChannel;
 import org.apache.catalina.tribes.io.ListenCallback;
 import org.apache.catalina.tribes.jmx.JmxRegistry;
 import org.apache.catalina.tribes.util.ExecutorFactory;
@@ -228,8 +229,27 @@ public abstract class ReceiverBase implements 
ChannelReceiver, ListenCallback, R
      * @param retries   Number of times to attempt to bind (port incremented 
between attempts)
      *
      * @throws IOException Socket bind error
+     *
+     * @deprecated Use {@link #bind(ServerSocket, int, int, boolean)}. This 
method will be removed in Tomcat 12.
      */
+    @Deprecated
     protected void bind(ServerSocket socket, int portstart, int retries) 
throws IOException {
+        bind(socket, portstart, retries, false);
+    }
+
+    /**
+     * Attempts to bind using the provided port and if that fails attempts to 
bind to each of the ports from portstart
+     * to (portstart + retries -1) until either there are no more ports or the 
bind is successful. The address to bind
+     * to is obtained via a call to {@link #getBind()}.
+     *
+     * @param socket    The socket to bind
+     * @param portstart Starting port for bind attempts
+     * @param retries   Number of times to attempt to bind (port incremented 
between attempts)
+     * @param secure    Is this bind for a secure port or not
+     *
+     * @throws IOException Socket bind error
+     */
+    protected void bind(ServerSocket socket, int portstart, int retries, 
boolean secure) throws IOException {
         synchronized (bindLock) {
             InetSocketAddress addr = null;
             int port = portstart;
@@ -237,8 +257,19 @@ public abstract class ReceiverBase implements 
ChannelReceiver, ListenCallback, R
                 try {
                     addr = new InetSocketAddress(getBind(), port);
                     socket.bind(addr);
-                    setPort(port);
-                    log.info(sm.getString("receiverBase.socket.bind", addr));
+                    String type;
+                    if (secure) {
+                        setSecurePort(port);
+                        if (getChannel() instanceof GroupChannel groupChannel) 
{
+                            type = 
groupChannel.getSslContext().getImplementationName();
+                        } else {
+                            type = "secure";
+                        }
+                    } else {
+                        type = "cleartext";
+                        setPort(port);
+                    }
+                    log.info(sm.getString("receiverBase.socket.bind", addr, 
type));
                     retries = 0;
                 } catch (IOException ioe) {
                     retries--;
@@ -254,28 +285,6 @@ public abstract class ReceiverBase implements 
ChannelReceiver, ListenCallback, R
         }
     }
 
-    protected void bindSecure(ServerSocket socket, int portstart, int retries) 
throws IOException {
-        synchronized (bindLock) {
-            InetSocketAddress address = null;
-            int port = portstart;
-            while (retries > 0) {
-                try {
-                    address = new InetSocketAddress(getBind(), port);
-                    socket.bind(address);
-                    setSecurePort(port);
-                    log.info(sm.getString("receiverBase.socket.bind", 
address));
-                    return;
-                } catch (IOException ioe) {
-                    if (--retries <= 0) {
-                        log.info(sm.getString("receiverBase.unable.bind", 
address));
-                        throw ioe;
-                    }
-                    port++;
-                }
-            }
-        }
-    }
-
     /**
      * Same as bind() except it does it for the UDP port
      *
diff --git a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java 
b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
index f723e64573..7aa1a617b4 100644
--- a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
+++ b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
@@ -98,7 +98,7 @@ public class NioReceiver extends ReceiverBase implements 
Runnable, NioReceiverMB
             return;
         }
         secureServerChannel = ServerSocketChannel.open();
-        bindSecure(secureServerChannel.socket(), getSecurePort(), 
getAutoBind());
+        bind(secureServerChannel.socket(), getSecurePort(), getAutoBind(), 
true);
         secureConnectionSlots = new Semaphore(Math.max(1, getMaxTasks()));
         Thread thread = new Thread(() -> 
runSecureListener(groupChannel.getSslContext()), "NioReceiver-TLS");
         thread.setDaemon(true);
@@ -278,7 +278,7 @@ public class NioReceiver extends ReceiverBase implements 
Runnable, NioReceiverMB
         this.selector.set(Selector.open());
         // set the port the server channel will listen to
         // serverSocket.bind(new InetSocketAddress(getBind(), 
getTcpListenPort()));
-        bind(serverSocket, getPort(), getAutoBind());
+        bind(serverSocket, getPort(), getAutoBind(), false);
         // set non-blocking mode for the listening socket
         serverChannel.configureBlocking(false);
         // register the ServerSocketChannel with the Selector


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to