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 2018/10/10 13:26:12 UTC
svn commit: r1843448 - in
/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud:
KubernetesMembershipProvider.java LocalStrings.properties
Author: remm
Date: Wed Oct 10 13:26:11 2018
New Revision: 1843448
URL: http://svn.apache.org/viewvc?rev=1843448&view=rev
Log:
Handle unexpected json better.
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/LocalStrings.properties
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=1843448&r1=1843447&r2=1843448&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 13:26:11 2018
@@ -141,31 +141,65 @@ public class KubernetesMembershipProvide
return members.toArray(new Member[0]);
}
- protected void parsePods(Reader reader, List<MemberImpl> members)
- throws IOException{
+ protected void parsePods(Reader reader, List<MemberImpl> members) {
JSONParser parser = new JSONParser(reader);
try {
LinkedHashMap<String, Object> json = parser.object();
+ Object itemsObject = json.get("items");
+ if (!(itemsObject instanceof List<?>)) {
+ log.error(sm.getString("kubernetesMembershipProvider.invalidPodsList", "no items"));
+ return;
+ }
@SuppressWarnings("unchecked")
- List<Object> items = (List<Object>) json.get("items");
+ List<Object> items = (List<Object>) itemsObject;
for (Object podObject : items) {
+ if (!(podObject instanceof LinkedHashMap<?, ?>)) {
+ log.warn(sm.getString("kubernetesMembershipProvider.invalidPod"));
+ continue;
+ }
@SuppressWarnings("unchecked")
LinkedHashMap<String, Object> pod = (LinkedHashMap<String, Object>) podObject;
if (!"Pod".equals(pod.get("kind"))) {
+ log.warn(sm.getString("kubernetesMembershipProvider.invalidPod"));
+ continue;
+ }
+ Object metadataObject = pod.get("metadata");
+ if (!(metadataObject instanceof LinkedHashMap<?, ?>)) {
+ log.warn(sm.getString("kubernetesMembershipProvider.invalidPod"));
continue;
}
@SuppressWarnings("unchecked")
- LinkedHashMap<String, Object> metadata = (LinkedHashMap<String, Object>) pod.get("metadata");
- String name = metadata.get("name").toString();
+ LinkedHashMap<String, Object> metadata = (LinkedHashMap<String, Object>) metadataObject;
+ Object nameObject = metadata.get("name");
+ if (nameObject == null) {
+ log.warn(sm.getString("kubernetesMembershipProvider.invalidPod"));
+ continue;
+ }
+ String name = nameObject.toString();
Object objectUid = metadata.get("uid");
String uid = (objectUid == null) ? name : objectUid.toString();
- String creationTimestamp = metadata.get("creationTimestamp").toString();
+ Object creationTimestampObject = metadata.get("creationTimestamp");
+ if (creationTimestampObject == null) {
+ log.warn(sm.getString("kubernetesMembershipProvider.invalidPod"));
+ continue;
+ }
+ String creationTimestamp = creationTimestampObject.toString();
+ Object statusObject = pod.get("status");
+ if (!(statusObject instanceof LinkedHashMap<?, ?>)) {
+ log.warn(sm.getString("kubernetesMembershipProvider.invalidPod"));
+ continue;
+ }
@SuppressWarnings("unchecked")
- LinkedHashMap<String, Object> status = (LinkedHashMap<String, Object>) pod.get("status");
+ LinkedHashMap<String, Object> status = (LinkedHashMap<String, Object>) statusObject;
if (!"Running".equals(status.get("phase"))) {
continue;
}
- String podIP = status.get("podIP").toString();
+ Object podIPObject = status.get("podIP");
+ if (podIPObject == null) {
+ log.warn(sm.getString("kubernetesMembershipProvider.invalidPod"));
+ continue;
+ }
+ String podIP = podIPObject.toString();
// We found ourselves, ignore
if (name.equals(hostName)) {
@@ -188,7 +222,7 @@ public class KubernetesMembershipProvide
members.add(member);
}
} catch (Exception e) {
- throw new IOException(sm.getString("kubernetesMembershipProvider.jsonError"), e);
+ log.error(sm.getString("kubernetesMembershipProvider.jsonError"), e);
}
}
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=1843448&r1=1843447&r2=1843448&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 Wed Oct 10 13:26:11 2018
@@ -25,6 +25,8 @@ tokenStream.CACertUndefined=CA cert file
cloudMembershipService.stopFail=Unable to stop the static membership service, level: [{0}]
kubernetesMembershipProvider.noNamespace=Namespace not set
+kubernetesMembershipProvider.invalidPodsList=Invalid pods list: {0}
+kubernetesMembershipProvider.invalidPod=Pod is missing some required attributes
kubernetesMembershipProvider.jsonError=JSON error
kubernetesMembershipProvider.memberError=Error creating member
kubernetesMembershipProvider.streamError=Failed to open stream
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org