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]

Reply via email to