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

gian 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 ad8c65d1e3b Report bytes written for failed queries. (#18842)
ad8c65d1e3b is described below

commit ad8c65d1e3bea6e5d1f818c150c1db93f4308b78
Author: Gian Merlino <[email protected]>
AuthorDate: Tue Dec 16 11:45:23 2025 -0800

    Report bytes written for failed queries. (#18842)
    
    This patch updates things so the query/bytes metric, and the field
    in logged requests, are both included for failed requests. This helps
    see how many bytes were written before a query failed.
---
 .../druid/server/QueryResourceQueryResultPusherFactory.java |  4 ++--
 .../java/org/apache/druid/server/QueryResultPusher.java     |  5 +++--
 .../java/org/apache/druid/server/QueryResultPusherTest.java |  2 +-
 .../java/org/apache/druid/sql/SqlExecutionReporter.java     | 13 +++++++++++++
 .../apache/druid/sql/http/SqlResourceQueryResultPusher.java |  4 ++--
 5 files changed, 21 insertions(+), 7 deletions(-)

diff --git 
a/server/src/main/java/org/apache/druid/server/QueryResourceQueryResultPusherFactory.java
 
b/server/src/main/java/org/apache/druid/server/QueryResourceQueryResultPusherFactory.java
index 5e403fc6201..a9d70c9ac09 100644
--- 
a/server/src/main/java/org/apache/druid/server/QueryResourceQueryResultPusherFactory.java
+++ 
b/server/src/main/java/org/apache/druid/server/QueryResourceQueryResultPusherFactory.java
@@ -156,9 +156,9 @@ public class QueryResourceQueryResultPusherFactory
         }
 
         @Override
-        public void recordFailure(Exception e)
+        public void recordFailure(Exception e, long bytesWritten)
         {
-          queryLifecycle.emitLogsAndMetrics(e, req.getRemoteAddr(), -1);
+          queryLifecycle.emitLogsAndMetrics(e, req.getRemoteAddr(), 
bytesWritten);
         }
 
         @Override
diff --git 
a/server/src/main/java/org/apache/druid/server/QueryResultPusher.java 
b/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
index f85bc3dee52..ee9849a7b11 100644
--- a/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
+++ b/server/src/main/java/org/apache/druid/server/QueryResultPusher.java
@@ -254,7 +254,8 @@ public abstract class QueryResultPusher
     incrementQueryCounterForException(e);
 
     if (resultsWriter != null) {
-      resultsWriter.recordFailure(e);
+      final long bytesWritten = accumulator != null ? 
accumulator.getNumBytesSent() : 0;
+      resultsWriter.recordFailure(e, bytesWritten);
 
       if (accumulator != null && accumulator.isInitialized()) {
         // We already started sending a response when we got the error 
message.  In this case we write the exception
@@ -361,7 +362,7 @@ public abstract class QueryResultPusher
 
     void recordSuccess(long numBytes);
 
-    void recordFailure(Exception e);
+    void recordFailure(Exception e, long bytesWritten);
   }
 
   public interface Writer extends Closeable
diff --git 
a/server/src/test/java/org/apache/druid/server/QueryResultPusherTest.java 
b/server/src/test/java/org/apache/druid/server/QueryResultPusherTest.java
index 65089c2f231..180e68682aa 100644
--- a/server/src/test/java/org/apache/druid/server/QueryResultPusherTest.java
+++ b/server/src/test/java/org/apache/druid/server/QueryResultPusherTest.java
@@ -89,7 +89,7 @@ public class QueryResultPusherTest
       }
 
       @Override
-      public void recordFailure(Exception e)
+      public void recordFailure(Exception e, long bytesWritten)
       {
         
assertTrue(Throwables.getStackTraceAsString(e).contains(embeddedExceptionMessage));
         recordFailureInvoked.set(true);
diff --git a/sql/src/main/java/org/apache/druid/sql/SqlExecutionReporter.java 
b/sql/src/main/java/org/apache/druid/sql/SqlExecutionReporter.java
index 5322febf76b..773a3812dbe 100644
--- a/sql/src/main/java/org/apache/druid/sql/SqlExecutionReporter.java
+++ b/sql/src/main/java/org/apache/druid/sql/SqlExecutionReporter.java
@@ -67,9 +67,22 @@ public class SqlExecutionReporter
     this.startNs = System.nanoTime();
   }
 
+  /**
+   * Report a query failure with an unknown number of byte written. The {@code 
sqlQuery/bytes} metric will
+   * not be emitted.
+   */
   public void failed(Throwable e)
+  {
+    failed(e, -1);
+  }
+
+  /**
+   * Report a query failure with a known number of byte written. It will be 
emitted as {@code sqlQuery/bytes}.
+   */
+  public void failed(Throwable e, long bytesWritten)
   {
     this.e = e;
+    this.bytesWritten = bytesWritten;
   }
 
   public void succeeded(final long bytesWritten)
diff --git 
a/sql/src/main/java/org/apache/druid/sql/http/SqlResourceQueryResultPusher.java 
b/sql/src/main/java/org/apache/druid/sql/http/SqlResourceQueryResultPusher.java
index 89620f88516..24c295c9ba5 100644
--- 
a/sql/src/main/java/org/apache/druid/sql/http/SqlResourceQueryResultPusher.java
+++ 
b/sql/src/main/java/org/apache/druid/sql/http/SqlResourceQueryResultPusher.java
@@ -161,14 +161,14 @@ class SqlResourceQueryResultPusher extends 
QueryResultPusher
       }
 
       @Override
-      public void recordFailure(Exception e)
+      public void recordFailure(Exception e, long bytesWritten)
       {
         if (QueryLifecycle.shouldLogStackTrace(e, sqlQuery.queryContext())) {
           log.warn(e, "Exception while processing sqlQueryId[%s]", sqlQueryId);
         } else {
           log.noStackTrace().warn(e, "Exception while processing 
sqlQueryId[%s]", sqlQueryId);
         }
-        stmt.reporter().failed(e);
+        stmt.reporter().failed(e, bytesWritten);
       }
 
       @Override


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

Reply via email to