2018年10月10日(水) 18:31 <r...@apache.org>:

> Author: remm
> Date: Wed Oct 10 09:31:54 2018
> New Revision: 1843415
>
> URL: http://svn.apache.org/viewvc?rev=1843415&view=rev
> Log:
> There's a "uid" in metadata, so try to use it. Also add back a needed test
> I accidentally removed.
>
> Modified:
>
> tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
>
> Modified:
> tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
> URL:
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java?rev=1843415&r1=1843414&r2=1843415&view=diff
>
> ==============================================================================
> ---
> tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
> (original)
> +++
> tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
> Wed Oct 10 09:31:54 2018
> @@ -22,6 +22,7 @@ import java.io.InputStream;
>  import java.io.InputStreamReader;
>  import java.io.Reader;
>  import java.net.URLEncoder;
> +import java.nio.charset.StandardCharsets;
>  import java.nio.file.FileSystems;
>  import java.nio.file.Files;
>  import java.time.Duration;
> @@ -156,6 +157,8 @@ public class KubernetesMembershipProvide
>                  @SuppressWarnings("unchecked")
>                  LinkedHashMap<String, Object> metadata =
> (LinkedHashMap<String, Object>) pod.get("metadata");
>                  String name = metadata.get("name").toString();
> +                Object objectUid = metadata.get("uid");
> +                String uid = (objectUid == null) ? name :
> objectUid.toString();
>                  String creationTimestamp =
> metadata.get("creationTimestamp").toString();
>                  @SuppressWarnings("unchecked")
>                  LinkedHashMap<String, Object> status =
> (LinkedHashMap<String, Object>) pod.get("status");
> @@ -164,8 +167,12 @@ public class KubernetesMembershipProvide
>                  }
>                  String podIP = status.get("podIP").toString();
>
> -                // id = md5(hostname)
> -                byte[] id = md5.digest(name.getBytes());
> +                // We found ourselves, ignore
> +                if (name.equals(hostName)) {
> +                    continue;
> +                }
> +
> +                byte[] id =
> md5.digest(uid.getBytes(StandardCharsets.US_ASCII));
>                  long aliveTime =
> Duration.between(Instant.parse(creationTimestamp), startTime).getSeconds()
> * 1000; // aliveTime is in ms
>
>                  MemberImpl member = null;
> @@ -177,7 +184,6 @@ public class KubernetesMembershipProvide
>
>  log.error(sm.getString("kubernetesMembershipProvider.memberError"), e);
>                      continue;
>                  }
> -
>                  member.setUniqueId(id);
>                  members.add(member);
>              }
>
>
>
Hi Remy.

Sorry for the late reply.
I have two comments against the current code.

The one is,
the uniqueId of the local member and the other cluster members are
different.

The CloudMembershipService#createOrUpdateLocalMember method is as follows.
==
// Set localMember unique ID to md5 hash of hostname
localMember.setUniqueId(MessageDigest.getInstance("md5")
        .digest(InetAddress.getLocalHost().getHostName().getBytes()));
==

The KubernetesMembershipProvider#parsePods method is as follows.
==
byte[] id = md5.digest(uid.getBytes(StandardCharsets.US_ASCII));
==

In other words, uniqueId of local member is obtained from hostname, while
other cluster members are obtained from uid.
In this case, some features such as RpcChannel do not work properly.

We need to update the local member's uniqueId with the uid obtained from
pod, or use a different way to align  the local member's uniqueId with
other cluster member's uniqueId.

Another one, uniqueId should be 16 bytes.

Regards..




>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
>
> --
> Keiichi.Fujino
> <dev-h...@tomcat.apache.org>

Reply via email to