This is an automated email from the ASF dual-hosted git repository.
frankchen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 252931df368 Suppress stack trace for failing K8s tasks due to pod
creation (#18351)
252931df368 is described below
commit 252931df368b32ae8d86924a1140297d66211051
Author: Virushade <[email protected]>
AuthorDate: Thu Aug 28 16:46:25 2025 +0800
Suppress stack trace for failing K8s tasks due to pod creation (#18351)
* Suppress stack trace when exception is instance of
KubernetesResourceNotFoundException
* Comments to describe why stack trace is suppressed
* Fix test cases
* Remove import
---
.../org/apache/druid/k8s/overlord/KubernetesTaskRunner.java | 11 ++++++++++-
.../druid/k8s/overlord/common/KubernetesPeonClient.java | 4 +---
.../overlord/common/KubernetesResourceNotFoundException.java | 5 -----
.../druid/k8s/overlord/common/KubernetesPeonClientTest.java | 11 +++++------
4 files changed, 16 insertions(+), 15 deletions(-)
diff --git
a/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/KubernetesTaskRunner.java
b/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/KubernetesTaskRunner.java
index 95435179b00..51913d13a71 100644
---
a/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/KubernetesTaskRunner.java
+++
b/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/KubernetesTaskRunner.java
@@ -30,6 +30,7 @@ import
com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import io.fabric8.kubernetes.api.model.batch.v1.Job;
import org.apache.druid.common.guava.FutureUtils;
+import org.apache.druid.error.DruidException;
import org.apache.druid.indexer.RunnerTaskState;
import org.apache.druid.indexer.TaskLocation;
import org.apache.druid.indexer.TaskStatus;
@@ -54,6 +55,7 @@ import org.apache.druid.java.util.http.client.Request;
import
org.apache.druid.java.util.http.client.response.InputStreamResponseHandler;
import org.apache.druid.k8s.overlord.common.K8sTaskId;
import org.apache.druid.k8s.overlord.common.KubernetesPeonClient;
+import
org.apache.druid.k8s.overlord.common.KubernetesResourceNotFoundException;
import org.apache.druid.k8s.overlord.taskadapter.TaskAdapter;
import org.apache.druid.tasklogs.TaskLogStreamer;
import org.jboss.netty.handler.codec.http.HttpMethod;
@@ -221,8 +223,15 @@ public class KubernetesTaskRunner implements
TaskLogStreamer, TaskRunner
return taskStatus;
}
+ catch (KubernetesResourceNotFoundException e) {
+ // The stack trace of this error is less informative than the message,
in surfacing the root cause of the problem.
+ log.error("Task[%s] failed because %s", task.getId(), e.getMessage());
+ throw DruidException.forPersona(DruidException.Persona.OPERATOR)
+ .ofCategory(DruidException.Category.NOT_FOUND)
+ .build(e.getMessage());
+ }
catch (Exception e) {
- log.error(e, "Task [%s] execution caught an exception", task.getId());
+ log.error(e, "Task[%s] execution caught an exception", task.getId());
throw new RuntimeException(e);
}
}
diff --git
a/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesPeonClient.java
b/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesPeonClient.java
index 406258f8147..b06e8efb824 100644
---
a/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesPeonClient.java
+++
b/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesPeonClient.java
@@ -438,9 +438,7 @@ public class KubernetesPeonClient
);
}
catch (KubernetesResourceNotFoundException e) {
- throw DruidException.forPersona(DruidException.Persona.OPERATOR)
- .ofCategory(DruidException.Category.NOT_FOUND)
- .build(e, e.getMessage());
+ throw e;
}
catch (Exception e) {
throw DruidException.defensive(e, "Error when looking for K8s pod with
label[job-name=%s]", jobName);
diff --git
a/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesResourceNotFoundException.java
b/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesResourceNotFoundException.java
index cd3888bd951..9e5f818caf2 100644
---
a/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesResourceNotFoundException.java
+++
b/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesResourceNotFoundException.java
@@ -23,11 +23,6 @@ import org.apache.druid.java.util.common.StringUtils;
public class KubernetesResourceNotFoundException extends RuntimeException
{
- public KubernetesResourceNotFoundException(String message)
- {
- super(message);
- }
-
public KubernetesResourceNotFoundException(String formatText, Object...
arguments)
{
super(StringUtils.nonStrictFormat(formatText, arguments));
diff --git
a/extensions-core/kubernetes-overlord-extensions/src/test/java/org/apache/druid/k8s/overlord/common/KubernetesPeonClientTest.java
b/extensions-core/kubernetes-overlord-extensions/src/test/java/org/apache/druid/k8s/overlord/common/KubernetesPeonClientTest.java
index 9f5670c333b..df8c94adc89 100644
---
a/extensions-core/kubernetes-overlord-extensions/src/test/java/org/apache/druid/k8s/overlord/common/KubernetesPeonClientTest.java
+++
b/extensions-core/kubernetes-overlord-extensions/src/test/java/org/apache/druid/k8s/overlord/common/KubernetesPeonClientTest.java
@@ -30,7 +30,6 @@ import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.dsl.LogWatch;
import io.fabric8.kubernetes.client.server.mock.EnableKubernetesMockClient;
import io.fabric8.kubernetes.client.server.mock.KubernetesMockServer;
-import org.apache.druid.error.DruidException;
import org.apache.druid.indexing.common.task.NoopTask;
import org.apache.druid.java.util.common.StringUtils;
import org.apache.druid.java.util.metrics.StubServiceEmitter;
@@ -592,8 +591,8 @@ public class KubernetesPeonClientTest
void
test_getPeonPodWithRetries_withoutPod_raisesKubernetesResourceNotFoundException()
{
String k8sJobName = new K8sTaskId(TASK_NAME_PREFIX, ID).getK8sJobName();
- DruidException e = Assertions.assertThrows(
- DruidException.class,
+ KubernetesResourceNotFoundException e = Assertions.assertThrows(
+ KubernetesResourceNotFoundException.class,
() -> instance.getPeonPodWithRetries(clientApi.getClient(),
k8sJobName, 1, 1)
);
@@ -629,9 +628,9 @@ public class KubernetesPeonClientTest
// Test will fail if task is retried more than once.
.once();
- // Task declared to retry for 3 times should only try once when
blacklisted event message is found.
- DruidException e = Assertions.assertThrows(
- DruidException.class,
+ // Task declared to retry for 3 times should only try once when a
blacklisted event message is found.
+ KubernetesResourceNotFoundException e = Assertions.assertThrows(
+ KubernetesResourceNotFoundException.class,
() -> instance.getPeonPodWithRetries(clientApi.getClient(),
k8sJobName, 0, 3)
);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]