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
The following commit(s) were added to refs/heads/main by this push:
new 79d3d976cd Fixes for MembershipServiceBase with TLS-PSK
79d3d976cd is described below
commit 79d3d976cdbae62bad97b7f750638ea4fe5dee6a
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 6ab3bf6ff5..b009a2aef4 100644
--- a/java/org/apache/catalina/tribes/membership/LocalStrings.properties
+++ b/java/org/apache/catalina/tribes/membership/LocalStrings.properties
@@ -66,6 +66,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 3e94478057..fdfc54bc41 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;
@@ -147,7 +148,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();
@@ -418,11 +427,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]