diff --git a/kyuubi-server/src/main/scala/org/apache/kyuubi/engine/KubernetesApplicationOperation.scala b/kyuubi-server/src/main/scala/org/apache/kyuubi/engine/KubernetesApplicationOperation.scala index c7ce750f2..2e57c722f 100644 --- a/kyuubi-server/src/main/scala/org/apache/kyuubi/engine/KubernetesApplicationOperation.scala +++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/engine/KubernetesApplicationOperation.scala @@ -553,15 +553,18 @@ object KubernetesApplicationOperation extends Logging { } val podAppState = podStateToApplicationState(pod.getStatus.getPhase) - val containerAppState = containerStatusToBuildAppState + val containerAppStateOpt = containerStatusToBuildAppState .map(_.getState) .map(containerStateToApplicationState) - // When the pod app state is terminated, the container app state will be ignored - val applicationState = if (ApplicationState.isTerminated(podAppState)) { - podAppState - } else { - containerAppState.getOrElse(podAppState) + val applicationState = containerAppStateOpt match { + // for cases that spark container already terminated, but sidecar containers live + case Some(containerAppState) + if ApplicationState.isTerminated(containerAppState) => containerAppState + // we don't need to care about container state if pod is already terminated + case _ if ApplicationState.isTerminated(podAppState) => podAppState + case Some(containerAppState) => containerAppState + case None => podAppState } val applicationError = if (ApplicationState.isFailed(applicationState)) {