Search in sources :

Example 1 with V1ContainerStateTerminated

use of io.kubernetes.client.openapi.models.V1ContainerStateTerminated in project pravega by pravega.

the class K8sClient method waitUntilPodCompletes.

/**
 * A method which returns a completed future once a given Pod has completed execution. This is useful to track test execution.
 * This method uses a Watch to track the status of the pod. The maximum wait time is based on the retry configuration.
 * @param namespace Namespace.
 * @param podName Pod name.
 * @return A future which is complete once the pod completes.
 */
public CompletableFuture<V1ContainerStateTerminated> waitUntilPodCompletes(final String namespace, final String podName) {
    return retryWithBackoff.retryWhen(t -> {
        Throwable ex = Exceptions.unwrap(t);
        // Incase of an IO Exception the Kubernetes client wraps the IOException within a RuntimeException.
        if (ex.getCause() instanceof IOException) {
            // IOException might occur due multiple reasons, one among them is SocketTimeout exception.
            // This is observed on long running pods.
            log.warn("IO Exception while fetching status of pod, will attempt a retry. Details: {}", ex.getMessage());
            return true;
        }
        log.error("Exception while fetching status of pod", ex);
        return false;
    }).runAsync(() -> {
        CompletableFuture<V1ContainerStateTerminated> future = new CompletableFuture<>();
        V1ContainerStateTerminated state = createAWatchAndReturnOnTermination(namespace, podName).orElseThrow(() -> new RuntimeException("Watch did not return terminated state for pod " + podName));
        future.complete(state);
        return future;
    }, executor);
}
Also used : PodLogs(io.kubernetes.client.PodLogs) TypeToken(com.google.gson.reflect.TypeToken) SneakyThrows(lombok.SneakyThrows) Retry(io.pravega.common.util.Retry) V1beta1CustomResourceDefinition(io.kubernetes.client.openapi.models.V1beta1CustomResourceDefinition) Cleanup(lombok.Cleanup) V1PodList(io.kubernetes.client.openapi.models.V1PodList) V1PodStatus(io.kubernetes.client.openapi.models.V1PodStatus) TestFrameworkException(io.pravega.test.system.framework.TestFrameworkException) ApiextensionsV1beta1Api(io.kubernetes.client.openapi.apis.ApiextensionsV1beta1Api) Futures.exceptionallyExpecting(io.pravega.common.concurrent.Futures.exceptionallyExpecting) V1beta1ClusterRole(io.kubernetes.client.openapi.models.V1beta1ClusterRole) V1Patch(io.kubernetes.client.custom.V1Patch) Configuration(io.kubernetes.client.openapi.Configuration) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Duration(java.time.Duration) Map(java.util.Map) V1beta1ClusterRoleBinding(io.kubernetes.client.openapi.models.V1beta1ClusterRoleBinding) V1ServiceAccount(io.kubernetes.client.openapi.models.V1ServiceAccount) V1DeleteOptions(io.kubernetes.client.openapi.models.V1DeleteOptions) ImmutableMap(com.google.common.collect.ImmutableMap) Predicate(java.util.function.Predicate) V1Secret(io.kubernetes.client.openapi.models.V1Secret) CONFLICT(javax.ws.rs.core.Response.Status.CONFLICT) NOT_FOUND(javax.ws.rs.core.Response.Status.NOT_FOUND) RbacAuthorizationV1beta1Api(io.kubernetes.client.openapi.apis.RbacAuthorizationV1beta1Api) V1Status(io.kubernetes.client.openapi.models.V1Status) Collectors(java.util.stream.Collectors) List(java.util.List) Slf4j(lombok.extern.slf4j.Slf4j) Optional(java.util.Optional) ApiCallback(io.kubernetes.client.openapi.ApiCallback) PatchUtils(io.kubernetes.client.util.PatchUtils) Futures(io.pravega.common.concurrent.Futures) V1Deployment(io.kubernetes.client.openapi.models.V1Deployment) Exceptions(io.pravega.common.Exceptions) Watch(io.kubernetes.client.util.Watch) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) CompletableFuture(java.util.concurrent.CompletableFuture) AppsV1Api(io.kubernetes.client.openapi.apis.AppsV1Api) ApiClient(io.kubernetes.client.openapi.ApiClient) ApiException(io.kubernetes.client.openapi.ApiException) V1ConfigMap(io.kubernetes.client.openapi.models.V1ConfigMap) V1ContainerStateTerminated(io.kubernetes.client.openapi.models.V1ContainerStateTerminated) V1ObjectMeta(io.kubernetes.client.openapi.models.V1ObjectMeta) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) V1ContainerStatus(io.kubernetes.client.openapi.models.V1ContainerStatus) V1Namespace(io.kubernetes.client.openapi.models.V1Namespace) V1beta1Role(io.kubernetes.client.openapi.models.V1beta1Role) JsonSyntaxException(com.google.gson.JsonSyntaxException) Files(java.nio.file.Files) CustomObjectsApi(io.kubernetes.client.openapi.apis.CustomObjectsApi) IOException(java.io.IOException) CoreV1Api(io.kubernetes.client.openapi.apis.CoreV1Api) Config(io.kubernetes.client.util.Config) TimeUnit(java.util.concurrent.TimeUnit) ConnectionFailed(io.pravega.test.system.framework.TestFrameworkException.Type.ConnectionFailed) Paths(java.nio.file.Paths) V1ContainerState(io.kubernetes.client.openapi.models.V1ContainerState) ExecutorServiceHelpers(io.pravega.common.concurrent.ExecutorServiceHelpers) V1beta1RoleBinding(io.kubernetes.client.openapi.models.V1beta1RoleBinding) SECONDS(java.util.concurrent.TimeUnit.SECONDS) V1Pod(io.kubernetes.client.openapi.models.V1Pod) InputStream(java.io.InputStream) CompletableFuture(java.util.concurrent.CompletableFuture) V1ContainerStateTerminated(io.kubernetes.client.openapi.models.V1ContainerStateTerminated) IOException(java.io.IOException)

Aggregations

ImmutableMap (com.google.common.collect.ImmutableMap)1 JsonSyntaxException (com.google.gson.JsonSyntaxException)1 TypeToken (com.google.gson.reflect.TypeToken)1 PodLogs (io.kubernetes.client.PodLogs)1 V1Patch (io.kubernetes.client.custom.V1Patch)1 ApiCallback (io.kubernetes.client.openapi.ApiCallback)1 ApiClient (io.kubernetes.client.openapi.ApiClient)1 ApiException (io.kubernetes.client.openapi.ApiException)1 Configuration (io.kubernetes.client.openapi.Configuration)1 ApiextensionsV1beta1Api (io.kubernetes.client.openapi.apis.ApiextensionsV1beta1Api)1 AppsV1Api (io.kubernetes.client.openapi.apis.AppsV1Api)1 CoreV1Api (io.kubernetes.client.openapi.apis.CoreV1Api)1 CustomObjectsApi (io.kubernetes.client.openapi.apis.CustomObjectsApi)1 RbacAuthorizationV1beta1Api (io.kubernetes.client.openapi.apis.RbacAuthorizationV1beta1Api)1 V1ConfigMap (io.kubernetes.client.openapi.models.V1ConfigMap)1 V1ContainerState (io.kubernetes.client.openapi.models.V1ContainerState)1 V1ContainerStateTerminated (io.kubernetes.client.openapi.models.V1ContainerStateTerminated)1 V1ContainerStatus (io.kubernetes.client.openapi.models.V1ContainerStatus)1 V1DeleteOptions (io.kubernetes.client.openapi.models.V1DeleteOptions)1 V1Deployment (io.kubernetes.client.openapi.models.V1Deployment)1