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