diff --git a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/dsl/Timeoutable.java b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/dsl/Timeoutable.java index ff8c2ea8d9..d84be3aa48 100644 --- a/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/dsl/Timeoutable.java +++ b/kubernetes-client-api/src/main/java/io/fabric8/kubernetes/client/dsl/Timeoutable.java @@ -21,7 +21,7 @@ public interface Timeoutable { /** - * Wait for the given operation timeout. For list contexts it applies to each delete operation. + * Wait for the given operation timeout. * * @param timeout 0 indicates no wait * @param unit @@ -29,7 +29,7 @@ public interface Timeoutable { Object withTimeout(long timeout, TimeUnit unit); /** - * Wait for the given operation timeout in milliseconds. For list contexts it applies to each delete operation. + * Wait for the given operation timeout in milliseconds. * * @param timeoutInMillis 0 indicates no wait */ diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/BaseOperation.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/BaseOperation.java index cf19f11baa..3ac9966497 100755 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/BaseOperation.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/BaseOperation.java @@ -43,6 +43,7 @@ import io.fabric8.kubernetes.client.dsl.FilterWatchListDeletable; import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.Resource; +import io.fabric8.kubernetes.client.dsl.Waitable; import io.fabric8.kubernetes.client.dsl.base.PatchContext; import io.fabric8.kubernetes.client.dsl.base.PatchType; import io.fabric8.kubernetes.client.extension.ExtensibleResource; @@ -452,13 +453,17 @@ static void toStatusDetails(KubernetesResource obj, List details) @Override public List delete() { List deleted = deleteAll(); - if (this.context.getTimeout() > 0) { + waitForDelete(deleted, this.context, this); + return deleted; + } + + static void waitForDelete(List deleted, OperationContext context, + Waitable waitable) { + if (context.getTimeout() > 0) { Set uids = deleted.stream().map(StatusDetails::getUid).collect(Collectors.toSet()); - CompletableFuture> delete = this - .informOnCondition(l -> l.stream().map(i -> i.getMetadata().getUid()).noneMatch(uid -> uids.contains(uid))); - Utils.waitUntilReadyOrFail(delete, this.context.getTimeout(), this.context.getTimeoutUnit()); + waitable.waitUntilCondition(h -> h == null || !uids.contains(h.getMetadata().getUid()), context.getTimeout(), + context.getTimeoutUnit()); } - return deleted; } protected List deleteAll() { diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl.java index bb3d2c5c38..b743b34156 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/NamespaceVisitFromServerGetWatchDeleteRecreateWaitApplicableListImpl.java @@ -203,7 +203,9 @@ public List createOrReplace() { @Override public List delete() { - return resources().flatMap(r -> r.delete().stream()).collect(Collectors.toList()); + List deleted = resources().flatMap(r -> r.delete().stream()).collect(Collectors.toList()); + BaseOperation.waitForDelete(deleted, this.context, this); + return deleted; } @Override diff --git a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/OperationContext.java b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/OperationContext.java index d1ba99608e..1d76c326c0 100644 --- a/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/OperationContext.java +++ b/kubernetes-client/src/main/java/io/fabric8/kubernetes/client/dsl/internal/OperationContext.java @@ -499,8 +499,7 @@ public C clientInWriteContext(Class clazz) { // operationcontext OperationContext newContext = HasMetadataOperationsImpl.defaultContext(client).withDryRun(getDryRun()) .withGracePeriodSeconds(getGracePeriodSeconds()).withPropagationPolicy(getPropagationPolicy()) - .withReloadingFromServer(isReloadingFromServer()).withFieldValidation(this.fieldValidation) - .withTimeout(this.timeout, this.timeoutUnit); + .withReloadingFromServer(isReloadingFromServer()).withFieldValidation(this.fieldValidation); // check before setting to prevent flipping the default flag if (!Objects.equals(getNamespace(), newContext.getNamespace())