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
The following commit(s) were added to refs/heads/9.0.x by this push: new a49816d Improved CloudMembershipService documentation and configuration a49816d is described below commit a49816da8d93ef4d0d4d032d6cda49f885347ddc Author: bohmber <bom...@apache.org> AuthorDate: Sun Feb 16 17:24:32 2020 +0100 Improved CloudMembershipService documentation and configuration --- .../membership/cloud/CloudMembershipService.java | 39 +++++++++++++++ .../membership/cloud/DNSMembershipProvider.java | 55 ++++++++++++++++++++++ .../cloud/KubernetesMembershipProvider.java | 4 ++ 3 files changed, 98 insertions(+) diff --git a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java index bcb213e..e840349 100644 --- a/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java +++ b/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java @@ -31,6 +31,41 @@ import org.apache.catalina.tribes.util.StringManager; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; +/** + * A {@link org.apache.catalina.tribes.MembershipService} that uses Kubernetes API(default) or DNS to retrieve + * the members of a cluster.<br> + * <p> + * The default implementation of the MembershipProvider component is the {@link KubernetesMembershipProvider}. + * The MembershipProvider can be configured by the <code>membershipProviderClassName</code> property. + * Possible shortcuts are {@code kubernetes} and {@code dns}. For dns look at the {@link DNSMembershipProvider}. + * </p> + * <p> + * <strong>Configuration example</strong> + * </p> + * + * {@code server.xml } + * + * <pre> + * {@code + * <Server ... + * + * <Service ... + * + * <Engine ... + * + * <Host ... + * + * <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> + * <Channel className="org.apache.catalina.tribes.group.GroupChannel"> + * <Membership className="org.apache.catalina.tribes.membership.cloud.CloudMembershipService"/> + * </Channel> + * </Cluster> + * ... + * } + * </pre> + * + */ + public class CloudMembershipService extends MembershipServiceBase implements CloudMembershipServiceMBean { @@ -39,7 +74,9 @@ public class CloudMembershipService extends MembershipServiceBase public static final String MEMBERSHIP_PROVIDER_CLASS_NAME = "membershipProviderClassName"; private static final String KUBE = "kubernetes"; + private static final String DNS = "dns"; private static final String KUBE_PROVIDER_CLASS = "org.apache.catalina.tribes.membership.cloud.KubernetesMembershipProvider"; + private static final String DNS_PROVIDER_CLASS = "org.apache.catalina.tribes.membership.cloud.DNSMembershipProvider"; protected static final byte[] INITIAL_ID = new byte[16]; private MembershipProvider membershipProvider; @@ -101,6 +138,8 @@ public class CloudMembershipService extends MembershipServiceBase String provider = getMembershipProviderClassName(); if (provider == null || KUBE.equals(provider)) { provider = KUBE_PROVIDER_CLASS; + } else if (DNS.equals(provider)) { + provider = DNS_PROVIDER_CLASS; } if (log.isDebugEnabled()) { log.debug("Using membershipProvider: " + provider); diff --git a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java index 7b57d97..551aaec 100644 --- a/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java +++ b/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java @@ -30,6 +30,61 @@ import org.apache.catalina.tribes.membership.MemberImpl; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; +/** + * A {@link org.apache.catalina.tribes.MembershipProvider} that uses DNS to retrieve the members of a cluster.<br> + * + * <p> + * <strong>Configuration example for Kubernetes</strong> + * </p> + * + * {@code server.xml } + * + * <pre> + * {@code + * <Server ... + * + * <Service ... + * + * <Engine ... + * + * <Host ... + * + * <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> + * <Channel className="org.apache.catalina.tribes.group.GroupChannel"> + * <Membership className="org.apache.catalina.tribes.membership.cloud.CloudMembershipService" + * membershipProviderClassName="org.apache.catalina.tribes.membership.cloud.DNSMembershipProvider"/> + * </Channel> + * </Cluster> + * ... + * } + * </pre> + * + * {@code dns-membership-service.yml } + * + * <pre> + * {@code + * apiVersion: v1 + * kind: Service + * metadata: + * annotations: + * service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" + * description: "The service for tomcat cluster membership." + * name: my-tomcat-app-membership + * spec: + * clusterIP: None + * ports: + * - name: membership + * port: 8888 + * selector: + * app: my-tomcat-app + * } + * </pre> + * + * Environment variable configuration<br> + * + * {@code DNS_MEMBERSHIP_SERVICE_NAME=my-tomcat-app-membership } + */ + public class DNSMembershipProvider extends CloudMembershipProvider { private static final Log log = LogFactory.getLog(DNSMembershipProvider.class); diff --git a/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java b/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java index ce2b1b1..11e0a48 100644 --- a/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java +++ b/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java @@ -38,6 +38,10 @@ import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.json.JSONParser; +/** + * A {@link org.apache.catalina.tribes.MembershipProvider} that uses Kubernetes API to retrieve the members of a cluster.<br> + * + */ public class KubernetesMembershipProvider extends CloudMembershipProvider { private static final Log log = LogFactory.getLog(KubernetesMembershipProvider.class); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org