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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org