You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2026/09/24 12:42:38 UTC
(tomcat) 01/02: Better logging for secure vs non-secure cluster configuration
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 <ma...@apache.org>
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: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org