This is an automated email from the ASF dual-hosted git repository.

capistrant 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 87d978bf405 MSQ: Save stack trace when rewriting faults. (#19049)
87d978bf405 is described below

commit 87d978bf405cc8409385dda51e2f3a4e1b1969f5
Author: Gian Merlino <[email protected]>
AuthorDate: Thu Feb 26 12:34:22 2026 -0800

    MSQ: Save stack trace when rewriting faults. (#19049)
    
    ControllerImpl has a function mapQueryColumnNameToOutputColumnName
    that rewrites faults to use the user-visible column names. However, the
    current implementation also replaces the exceptionStackTrace. The original
    trace from the worker is lost, replaced by a not-very-useful one from
    this function on the controller.
    
    This patch changes the function so only the fault is rewritten, not the
    entire error report, so the original worker stack trace is preserved.
---
 .../org/apache/druid/msq/exec/ControllerImpl.java  | 49 ++++++++++------------
 .../druid/msq/indexing/error/MSQErrorReport.java   |  8 ++++
 2 files changed, 31 insertions(+), 26 deletions(-)

diff --git 
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java 
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java
index 78d021dca6c..b18a2971e2c 100644
--- 
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java
+++ 
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java
@@ -2930,37 +2930,34 @@ public class ControllerImpl implements Controller
       @Nullable final MSQErrorReport workerErrorReport
   )
   {
-
     if (workerErrorReport == null) {
       return null;
     } else if (workerErrorReport.getFault() instanceof InvalidNullByteFault) {
-      InvalidNullByteFault inbf = (InvalidNullByteFault) 
workerErrorReport.getFault();
-      return MSQErrorReport.fromException(
-          workerErrorReport.getTaskId(),
-          workerErrorReport.getHost(),
-          workerErrorReport.getStageNumber(),
-          InvalidNullByteException.builder()
-                                  .source(inbf.getSource())
-                                  .rowNumber(inbf.getRowNumber())
-                                  .column(inbf.getColumn())
-                                  .value(inbf.getValue())
-                                  .position(inbf.getPosition())
-                                  .build(),
-          querySpec.getColumnMappings()
+      final InvalidNullByteFault inbf = (InvalidNullByteFault) 
workerErrorReport.getFault();
+      return workerErrorReport.withFault(
+          MSQErrorReport.getFaultFromException(
+              InvalidNullByteException.builder()
+                                      .source(inbf.getSource())
+                                      .rowNumber(inbf.getRowNumber())
+                                      .column(inbf.getColumn())
+                                      .value(inbf.getValue())
+                                      .position(inbf.getPosition())
+                                      .build(),
+              querySpec.getColumnMappings()
+          )
       );
     } else if (workerErrorReport.getFault() instanceof InvalidFieldFault) {
-      InvalidFieldFault iff = (InvalidFieldFault) workerErrorReport.getFault();
-      return MSQErrorReport.fromException(
-          workerErrorReport.getTaskId(),
-          workerErrorReport.getHost(),
-          workerErrorReport.getStageNumber(),
-          InvalidFieldException.builder()
-                               .source(iff.getSource())
-                               .rowNumber(iff.getRowNumber())
-                               .column(iff.getColumn())
-                               .errorMsg(iff.getErrorMsg())
-                               .build(),
-          querySpec.getColumnMappings()
+      final InvalidFieldFault iff = (InvalidFieldFault) 
workerErrorReport.getFault();
+      return workerErrorReport.withFault(
+          MSQErrorReport.getFaultFromException(
+              InvalidFieldException.builder()
+                                   .source(iff.getSource())
+                                   .rowNumber(iff.getRowNumber())
+                                   .column(iff.getColumn())
+                                   .errorMsg(iff.getErrorMsg())
+                                   .build(),
+              querySpec.getColumnMappings()
+          )
       );
     } else {
       return workerErrorReport;
diff --git 
a/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/error/MSQErrorReport.java
 
b/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/error/MSQErrorReport.java
index 8100be1ac94..8c66280294e 100644
--- 
a/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/error/MSQErrorReport.java
+++ 
b/multi-stage-query/src/main/java/org/apache/druid/msq/indexing/error/MSQErrorReport.java
@@ -164,6 +164,14 @@ public class MSQErrorReport
     return druidException;
   }
 
+  /**
+   * Returns a copy of this error report with a new fault code.
+   */
+  public MSQErrorReport withFault(final MSQFault newFault)
+  {
+    return new MSQErrorReport(taskId, host, stageNumber, newFault, 
exceptionStackTrace);
+  }
+
   @Override
   public boolean equals(Object o)
   {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to