Author: remm
Date: Fri Dec 14 13:37:45 2018
New Revision: 1848938
URL: http://svn.apache.org/viewvc?rev=1848938&view=rev
Log:
Add dns-ping support to enumerate cluster members. This is much simpler
than getting the pod list but it does not indicate pod status.
Submitted by by Maxime Beck.
Added:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
(with props)
Removed:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/Constants.java
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties
tomcat/trunk/webapps/docs/changelog.xml
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java?rev=1848938&r1=1848937&r2=1848938&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/AbstractStreamProvider.java
Fri Dec 14 13:37:45 2018
@@ -42,7 +42,7 @@ import org.apache.juli.logging.LogFactor
public abstract class AbstractStreamProvider implements StreamProvider {
private static final Log log =
LogFactory.getLog(AbstractStreamProvider.class);
- protected static final StringManager sm =
StringManager.getManager(Constants.Package);
+ protected static final StringManager sm =
StringManager.getManager(AbstractStreamProvider.class);
protected static final TrustManager[] INSECURE_TRUST_MANAGERS = new
TrustManager[] {
new X509TrustManager() {
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java?rev=1848938&r1=1848937&r2=1848938&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipProvider.java
Fri Dec 14 13:37:45 2018
@@ -39,8 +39,8 @@ import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
public abstract class CloudMembershipProvider extends MembershipProviderBase
implements Heartbeat, ChannelListener {
- private static final Log log =
LogFactory.getLog(KubernetesMembershipProvider.class);
- protected static final StringManager sm =
StringManager.getManager(Constants.Package);
+ private static final Log log =
LogFactory.getLog(CloudMembershipProvider.class);
+ protected static final StringManager sm =
StringManager.getManager(CloudMembershipProvider.class);
protected String url;
protected StreamProvider streamProvider;
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java?rev=1848938&r1=1848937&r2=1848938&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/CloudMembershipService.java
Fri Dec 14 13:37:45 2018
@@ -35,12 +35,12 @@ public class CloudMembershipService exte
implements CloudMembershipServiceMBean {
private static final Log log =
LogFactory.getLog(CloudMembershipService.class);
- protected static final StringManager sm =
StringManager.getManager(Constants.Package);
+ protected static final StringManager sm =
StringManager.getManager(CloudMembershipService.class);
public static final String MEMBERSHIP_PROVIDER_CLASS_NAME =
"membershipProviderClassName";
private static final String KUBE = "kubernetes";
private static final String KUBE_PROVIDER_CLASS =
"org.apache.catalina.tribes.membership.cloud.KubernetesMembershipProvider";
- static final byte[] INITIAL_ID = new byte[16];
+ protected static final byte[] INITIAL_ID = new byte[16];
private MembershipProvider membershipProvider;
private MemberImpl localMember;
Added:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java?rev=1848938&view=auto
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
(added)
+++
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
Fri Dec 14 13:37:45 2018
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.catalina.tribes.membership.cloud;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.URLEncoder;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.catalina.tribes.Member;
+import org.apache.catalina.tribes.MembershipService;
+import org.apache.catalina.tribes.membership.MemberImpl;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
+
+public class DNSMembershipProvider extends CloudMembershipProvider {
+ private static final Log log =
LogFactory.getLog(DNSMembershipProvider.class);
+
+ private static final String CUSTOM_ENV_PREFIX = "OPENSHIFT_KUBE_PING_";
+ private String namespace;
+
+ @Override
+ public void start(int level) throws Exception {
+ if ((level & MembershipService.MBR_RX) == 0) {
+ return;
+ }
+
+ super.start(level);
+
+ // Set up Kubernetes API parameters
+ namespace = getEnv("KUBERNETES_NAMESPACE", CUSTOM_ENV_PREFIX +
"NAMESPACE");
+ if (namespace == null || namespace.length() == 0) {
+ throw new
IllegalArgumentException(sm.getString("kubernetesMembershipProvider.noNamespace"));
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Namespace [%s] set; clustering enabled",
namespace));
+ }
+ namespace = URLEncoder.encode(namespace, "UTF-8");
+
+ // Fetch initial members
+ heartbeat();
+ }
+
+ @Override
+ public boolean stop(int level) throws Exception {
+ return super.stop(level);
+ }
+
+ @Override
+ protected Member[] fetchMembers() {
+ List<MemberImpl> members = new ArrayList<>();
+
+ InetAddress[] inetAddresses = null;
+ try {
+ inetAddresses = InetAddress.getAllByName(namespace);
+ } catch (UnknownHostException exception) {
+ log.warn(sm.getString("dnsMembershipProvider.dnsError",
namespace), exception);
+ }
+
+ if (inetAddresses != null) {
+ for (InetAddress inetAddress : inetAddresses) {
+ String ip = inetAddress.getHostAddress();
+ byte[] id = md5.digest(ip.getBytes());
+ long aliveTime = -1;
+ MemberImpl member = null;
+ try {
+ member = new MemberImpl(ip, port, aliveTime);
+ } catch (IOException e) {
+
log.error(sm.getString("kubernetesMembershipProvider.memberError"), e);
+ continue;
+ }
+ member.setUniqueId(id);
+ members.add(member);
+ }
+ }
+
+ return members.toArray(new Member[0]);
+ }
+}
\ No newline at end of file
Propchange:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/DNSMembershipProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
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=1848938&r1=1848937&r2=1848938&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
Fri Dec 14 13:37:45 2018
@@ -176,7 +176,6 @@ public class KubernetesMembershipProvide
}
String name = nameObject.toString();
Object objectUid = metadata.get("uid");
- String uid = (objectUid == null) ? name : objectUid.toString();
Object creationTimestampObject =
metadata.get("creationTimestamp");
if (creationTimestampObject == null) {
log.warn(sm.getString("kubernetesMembershipProvider.invalidPod"));
@@ -199,6 +198,7 @@ public class KubernetesMembershipProvide
continue;
}
String podIP = podIPObject.toString();
+ String uid = (objectUid == null) ? podIP :
objectUid.toString();
// We found ourselves, ignore
if (name.equals(hostName)) {
@@ -211,7 +211,7 @@ public class KubernetesMembershipProvide
continue;
}
- long aliveTime =
Duration.between(Instant.parse(creationTimestamp), startTime).getSeconds() *
1000; // aliveTime is in ms
+ long aliveTime =
Duration.between(Instant.parse(creationTimestamp), startTime).toMillis();
MemberImpl member = null;
try {
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties?rev=1848938&r1=1848937&r2=1848938&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties
Fri Dec 14 13:37:45 2018
@@ -21,6 +21,8 @@ certificateStream.clientCertError=Could
cloudMembershipService.stopFail=Unable to stop the static membership service,
level: [{0}]
+dnsMembershipProvider.dnsError=Error getting hosts address list for namespace
[{0}]
+
kubernetesMembershipProvider.invalidPod=Pod is missing some required attributes
kubernetesMembershipProvider.invalidPodsList=Invalid pods list: {0}
kubernetesMembershipProvider.jsonError=JSON error
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1848938&r1=1848937&r2=1848938&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Dec 14 13:37:45 2018
@@ -63,6 +63,15 @@
</fix>
</changelog>
</subsection>
+ <subsection name="Tribes">
+ <changelog>
+ <update>
+ Add dns-ping support to enumerate cluster members. This is much simpler
+ than getting the pod list but it does not indicate pod status.
+ Submitted by by Maxime Beck. (remm)
+ </update>
+ </changelog>
+ </subsection>
</section>
<section name="Tomcat 9.0.14 (markt)" rtext="2018-12-12">
<subsection name="Catalina">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]