diff --git a/CHANGELOG.md b/CHANGELOG.md index 758b515cf1a..1340aa2eb60 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ * Fix #4459: Fixed OSGi startup exceptions while using KubernetesClient/OpenShiftClient * Fix #4482: Fixing blocking behavior of okhttp log watch * Fix #4473: Fix regression in backoff interval introduced in #4365 +* Fix #4496: Removing watch handling of lists * Fix #4426: [java-generator] Encode an `AnyType` instead of an Object if `x-kubernetes-preserve-unknown-fields` is present and the type is null. #### Improvements diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/AbstractWatchManager.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/AbstractWatchManager.java index 0500300f42b..c923872640f 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/AbstractWatchManager.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/AbstractWatchManager.java @@ -20,7 +20,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import io.fabric8.kubernetes.api.model.HasMetadata; import io.fabric8.kubernetes.api.model.KubernetesResource; -import io.fabric8.kubernetes.api.model.KubernetesResourceList; import io.fabric8.kubernetes.api.model.ListOptions; import io.fabric8.kubernetes.api.model.Status; import io.fabric8.kubernetes.api.model.WatchEvent; @@ -39,7 +38,6 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -250,33 +248,9 @@ private WatchEvent contextAwareWatchEventDeserializer(String messageSource) } } - protected WatchEvent readWatchEvent(String messageSource) throws JsonProcessingException { - WatchEvent event = contextAwareWatchEventDeserializer(messageSource); - KubernetesResource object = null; - if (event != null) { - object = event.getObject(); - } - // when watching API Groups we don't get a WatchEvent resource - // so the object will be null - // so lets try parse the message as a KubernetesResource - // as it will probably be a list of resources like a BuildList - if (object == null) { - object = Serialization.unmarshal(messageSource, KubernetesResource.class); - if (event == null) { - event = new WatchEvent(object, "MODIFIED"); - } else { - event.setObject(object); - } - } - if (event.getType() == null) { - event.setType("MODIFIED"); - } - return event; - } - protected void onMessage(String message) { try { - WatchEvent event = readWatchEvent(message); + WatchEvent event = contextAwareWatchEventDeserializer(message); Object object = event.getObject(); Action action = Action.valueOf(event.getType()); if (action == Action.ERROR) { @@ -291,21 +265,7 @@ protected void onMessage(String message) { } else if (object instanceof HasMetadata) { HasMetadata hasMetadata = (HasMetadata) object; updateResourceVersion(hasMetadata.getMetadata().getResourceVersion()); - - if (object instanceof KubernetesResourceList) { - // Dirty cast - should always be valid though - @SuppressWarnings({ "rawtypes" }) - KubernetesResourceList list = (KubernetesResourceList) hasMetadata; - @SuppressWarnings("unchecked") - List items = list.getItems(); - if (items != null) { - for (HasMetadata item : items) { - eventReceived(action, item); - } - } - } else { - eventReceived(action, hasMetadata); - } + eventReceived(action, hasMetadata); } else { final String msg = String.format("Invalid object received: %s", message); close(new WatcherException(msg, null, message));