You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2021/01/26 10:32:18 UTC

[tomcat] 01/02: DNS caching prevents running nodes to discover new pods. The new pods know about the already ready pods and try to join the cluster connecting to the running pods, so use accept() to add the new pods.

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

remm pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 8c9885f1a64d576e2e8684c7307d49efc7143a23
Author: Jean-Frederic Clere <jf...@gmail.com>
AuthorDate: Tue Jan 26 10:23:15 2021 +0100

    DNS caching prevents running nodes to discover new pods.
    The new pods know about the already ready pods and try to
    join the cluster connecting to the running pods, so use accept() to add the new pods.
---
 .../membership/cloud/DNSMembershipProvider.java    | 51 +++++++++++++++++++++-
 1 file changed, 50 insertions(+), 1 deletion(-)

diff --git a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
index 551aaec..5095b35 100644
--- a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
+++ b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
@@ -18,9 +18,11 @@
 package org.apache.catalina.tribes.membership.cloud;
 
 import java.io.IOException;
+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.List;
 
@@ -157,4 +159,51 @@ public class DNSMembershipProvider extends CloudMembershipProvider {
 
         return members.toArray(new Member[0]);
     }
-}
\ No newline at end of file
+
+    @Override
+    public boolean accept(Serializable msg, Member sender) {
+        // check is 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()) {
+                    found = true;
+                    break;
+                }
+            }
+        } 
+        if (!found) {
+            // add it and it's thread
+            MemberImpl member = new MemberImpl();
+            member.setHost(sender.getHost());
+            member.setPort(sender.getPort());
+            byte[] host = sender.getHost();
+            int i = 0;
+            StringBuilder buf = new StringBuilder();
+            buf.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);
+        }
+        return false;
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org