This is an automated email from the ASF dual-hosted git repository.
markt-asf pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/11.0.x by this push:
new 5513ceef48 Fixes for MembershipServiceBase with TLS-PSK
5513ceef48 is described below
commit 5513ceef48f3b31d62662ec5fa76b736cbe43672
Author: Mark Thomas <[email protected]>
AuthorDate: Fri Sep 25 15:25:27 2026 +0100
Fixes for MembershipServiceBase with TLS-PSK
---
.../tribes/membership/LocalStrings.properties | 1 +
.../tribes/membership/StaticMembershipProvider.java | 20 ++++++++++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/java/org/apache/catalina/tribes/membership/LocalStrings.properties
b/java/org/apache/catalina/tribes/membership/LocalStrings.properties
index d2967a6e3f..dc4e4c59b1 100644
--- a/java/org/apache/catalina/tribes/membership/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/membership/LocalStrings.properties
@@ -76,6 +76,7 @@ staticMembershipProvider.heartbeat.failed=Unable to send
StaticMembershipProvide
staticMembershipProvider.leftOver.ignored=Message [{0}] is ignored.
staticMembershipProvider.pingThread.failed=Unable to send ping.
staticMembershipProvider.replyRequest.ignored=Message [{0}] is ignored.
+staticMembershipProvider.startMembership.failed=Unable to notify one or more
static members that this member has started. This is expected if a peer has not
started yet and will be retried on the next ping.
staticMembershipProvider.startMembership.noReplies=Received 0 replies,
probably a timeout.
staticMembershipProvider.stopMembership.sendFailed=Unable to send stop
membership message.
diff --git
a/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
b/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
index efb061db77..06952e926a 100644
--- a/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
+++ b/java/org/apache/catalina/tribes/membership/StaticMembershipProvider.java
@@ -32,6 +32,7 @@ import
org.apache.catalina.tribes.ChannelException.FaultyMember;
import org.apache.catalina.tribes.ChannelListener;
import org.apache.catalina.tribes.Heartbeat;
import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.group.GroupChannel;
import org.apache.catalina.tribes.group.Response;
import org.apache.catalina.tribes.group.RpcCallback;
import org.apache.catalina.tribes.group.RpcChannel;
@@ -155,7 +156,15 @@ public class StaticMembershipProvider extends
MembershipProviderBase
}
startLevel = (startLevel | level);
if (startLevel == (Channel.MBR_RX_SEQ | Channel.MBR_TX_SEQ)) {
- startMembership(getAliveMembers(staticMembers.toArray(new
Member[0])));
+ try {
+ startMembership(getAliveMembers(staticMembers.toArray(new
Member[0])));
+ } catch (ChannelException ce) {
+ // A member that was reachable at the liveness check above may
still fail the actual
+ // RPC (e.g. it has not finished its own startup yet). That is
expected during cluster
+ // start-up and must not prevent this member from starting;
the next ping will pick up
+ // any member that is not yet up.
+
log.warn(sm.getString("staticMembershipProvider.startMembership.failed"), ce);
+ }
running = true;
if (thread == null && useThread) {
thread = new PingThread();
@@ -426,11 +435,18 @@ public class StaticMembershipProvider extends
MembershipProviderBase
}
private Member[] getAliveMembers(Member[] members) {
+ boolean channelSecure = channel instanceof GroupChannel groupChannel
&& groupChannel.getSecure();
List<Member> aliveMembers = new ArrayList<>();
for (Member member : members) {
+ boolean useSecurePort = channelSecure || member.getSecurePort() >=
0 && member.getPort() < 0;
+ int port = useSecurePort ? member.getSecurePort() :
member.getPort();
+ if (port < 0) {
+ // no usable port to connect to, so the member can't be checked
+ continue;
+ }
try (Socket socket = new Socket()) {
InetAddress ia = InetAddress.getByAddress(member.getHost());
- InetSocketAddress addr = new InetSocketAddress(ia,
member.getPort());
+ InetSocketAddress addr = new InetSocketAddress(ia, port);
socket.connect(addr, connectTimeout);
aliveMembers.add(member);
} catch (Throwable t) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]