This is an automated email from the ASF dual-hosted git repository.
remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push:
new ae050b7 Refactor to reduce code duplication
ae050b7 is described below
commit ae050b72d6d3929084aece5dc15009e2583e87ce
Author: remm <[email protected]>
AuthorDate: Tue Jan 26 11:27:20 2021 +0100
Refactor to reduce code duplication
This is a workaround for DNS caching which would make the updates fail.
The Kubernetes provider which uses the API seems more dependable
overall, although it requires enabling the necessary access permission.
---
.../membership/cloud/CloudMembershipProvider.java | 60 ++++++++++++----------
.../membership/cloud/DNSMembershipProvider.java | 31 ++++-------
webapps/docs/changelog.xml | 8 +++
3 files changed, 49 insertions(+), 50 deletions(-)
diff --git
a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
index 3c6315d..319d130 100644
---
a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
+++
b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
@@ -127,38 +127,12 @@ public abstract class CloudMembershipProvider extends
MembershipProviderBase imp
Member[] announcedMembers = fetchMembers();
// Add new members or refresh the members in the membership
for (Member member : announcedMembers) {
- if (membership.memberAlive(member)) {
- if (log.isDebugEnabled()) {
- log.debug("Member added: " + member);
- }
- Runnable r = () -> {
- String name = Thread.currentThread().getName();
- try {
-
Thread.currentThread().setName("CloudMembership-memberAdded");
- membershipListener.memberAdded(member);
- } finally {
- Thread.currentThread().setName(name);
- }
- };
- executor.execute(r);
- }
+ updateMember(member, true);
}
// Remove non refreshed members from the membership
Member[] expired = membership.expire(expirationTime);
for (Member member : expired) {
- if (log.isDebugEnabled()) {
- log.debug("Member disappeared: " + member);
- }
- Runnable r = () -> {
- String name = Thread.currentThread().getName();
- try {
-
Thread.currentThread().setName("CloudMembership-memberDisappeared");
- membershipListener.memberDisappeared(member);
- } finally {
- Thread.currentThread().setName(name);
- }
- };
- executor.execute(r);
+ updateMember(member, false);
}
}
@@ -168,6 +142,36 @@ public abstract class CloudMembershipProvider extends
MembershipProviderBase imp
*/
protected abstract Member[] fetchMembers();
+ /**
+ * Add or remove specified member.
+ * @param member the member to add
+ * @param add true if the member is added, false otherwise
+ */
+ protected void updateMember(Member member, boolean add) {
+ if (add && !membership.memberAlive(member)) {
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ String message = add ? "Member added: " + member : "Member
disappeared: " + member;
+ log.debug(message);
+ }
+ Runnable r = () -> {
+ String name = Thread.currentThread().getName();
+ try {
+ String threadName = add ? "CloudMembership-memberAdded" :
"CloudMembership-memberDisappeared";
+ Thread.currentThread().setName(threadName);
+ if (add) {
+ membershipListener.memberAdded(member);
+ } else {
+ membershipListener.memberDisappeared(member);
+ }
+ } finally {
+ Thread.currentThread().setName(name);
+ }
+ };
+ executor.execute(r);
+ }
+
@Override
public void messageReceived(Serializable msg, Member sender) {
}
diff --git
a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
index 5095b35..543820b 100644
---
a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
+++
b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
@@ -22,8 +22,8 @@ import java.io.Serializable;
import java.net.InetAddress;
import java.net.URLEncoder;
import java.net.UnknownHostException;
-import java.util.Arrays;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.apache.catalina.tribes.Member;
@@ -162,19 +162,19 @@ public class DNSMembershipProvider extends
CloudMembershipProvider {
@Override
public boolean accept(Serializable msg, Member sender) {
- // check is the sender is in the member list.
+ // Check if the sender is in the member list.
boolean found = false;
Member[] members = membership.getMembers();
if (members != null) {
for (Member member : members) {
- if (Arrays.equals(sender.getHost(), sender.getHost()) &&
sender.getPort() == member.getPort()) {
+ if (Arrays.equals(sender.getHost(), sender.getHost())
+ && sender.getPort() == member.getPort()) {
found = true;
break;
}
}
- }
+ }
if (!found) {
- // add it and it's thread
MemberImpl member = new MemberImpl();
member.setHost(sender.getHost());
member.setPort(sender.getPort());
@@ -182,27 +182,14 @@ public class DNSMembershipProvider extends
CloudMembershipProvider {
int i = 0;
StringBuilder buf = new StringBuilder();
buf.append(host[i++] & 0xff);
- for (; i<host.length; i++) {
- buf.append(".").append(host[i] & 0xff);
- }
+ for (; i < host.length; i++) {
+ buf.append(".").append(host[i] & 0xff);
+ }
byte[] id = md5.digest(buf.toString().getBytes());
member.setUniqueId(id);
member.setMemberAliveTime(-1);
- membership.memberAlive(member);
- Runnable r = new Runnable() {
- @Override
- public void run(){
- String name = Thread.currentThread().getName();
- try {
-
Thread.currentThread().setName("CloudMembership-memberAdded");
- membershipListener.memberAdded(member);
- } finally {
- Thread.currentThread().setName(name);
- }
- }
- };
- executor.execute(r);
+ updateMember(member, true);
}
return false;
}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 22f4853..b0cf1e4 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -209,6 +209,14 @@
</fix>
</changelog>
</subsection>
+ <subsection name="Tribes">
+ <changelog>
+ <fix>
+ Work around DNS caching for the DNS provider of the cloud membership.
+ (jfclere)
+ </fix>
+ </changelog>
+ </subsection>
<subsection name="Other">
<changelog>
<add>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]