Skip to content

Commit ad8c65d

Browse files
authored
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.
1 parent b4b584f commit ad8c65d

File tree

5 files changed

+21
-7
lines changed

5 files changed

+21
-7
lines changed

server/src/main/java/org/apache/druid/server/QueryResourceQueryResultPusherFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,9 @@ public void recordSuccess(long numBytes)
156156
}
157157

158158
@Override
159-
public void recordFailure(Exception e)
159+
public void recordFailure(Exception e, long bytesWritten)
160160
{
161-
queryLifecycle.emitLogsAndMetrics(e, req.getRemoteAddr(), -1);
161+
queryLifecycle.emitLogsAndMetrics(e, req.getRemoteAddr(), bytesWritten);
162162
}
163163

164164
@Override

server/src/main/java/org/apache/druid/server/QueryResultPusher.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,8 @@ private Response handleDruidException(ResultsWriter resultsWriter, DruidExceptio
254254
incrementQueryCounterForException(e);
255255

256256
if (resultsWriter != null) {
257-
resultsWriter.recordFailure(e);
257+
final long bytesWritten = accumulator != null ? accumulator.getNumBytesSent() : 0;
258+
resultsWriter.recordFailure(e, bytesWritten);
258259

259260
if (accumulator != null && accumulator.isInitialized()) {
260261
// We already started sending a response when we got the error message. In this case we write the exception
@@ -361,7 +362,7 @@ public interface ResultsWriter extends Closeable
361362

362363
void recordSuccess(long numBytes);
363364

364-
void recordFailure(Exception e);
365+
void recordFailure(Exception e, long bytesWritten);
365366
}
366367

367368
public interface Writer extends Closeable

server/src/test/java/org/apache/druid/server/QueryResultPusherTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public void recordSuccess(long numBytes)
8989
}
9090

9191
@Override
92-
public void recordFailure(Exception e)
92+
public void recordFailure(Exception e, long bytesWritten)
9393
{
9494
assertTrue(Throwables.getStackTraceAsString(e).contains(embeddedExceptionMessage));
9595
recordFailureInvoked.set(true);

sql/src/main/java/org/apache/druid/sql/SqlExecutionReporter.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,22 @@ public SqlExecutionReporter(
6767
this.startNs = System.nanoTime();
6868
}
6969

70+
/**
71+
* Report a query failure with an unknown number of byte written. The {@code sqlQuery/bytes} metric will
72+
* not be emitted.
73+
*/
7074
public void failed(Throwable e)
75+
{
76+
failed(e, -1);
77+
}
78+
79+
/**
80+
* Report a query failure with a known number of byte written. It will be emitted as {@code sqlQuery/bytes}.
81+
*/
82+
public void failed(Throwable e, long bytesWritten)
7183
{
7284
this.e = e;
85+
this.bytesWritten = bytesWritten;
7386
}
7487

7588
public void succeeded(final long bytesWritten)

sql/src/main/java/org/apache/druid/sql/http/SqlResourceQueryResultPusher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,14 @@ public void recordSuccess(long numBytes)
161161
}
162162

163163
@Override
164-
public void recordFailure(Exception e)
164+
public void recordFailure(Exception e, long bytesWritten)
165165
{
166166
if (QueryLifecycle.shouldLogStackTrace(e, sqlQuery.queryContext())) {
167167
log.warn(e, "Exception while processing sqlQueryId[%s]", sqlQueryId);
168168
} else {
169169
log.noStackTrace().warn(e, "Exception while processing sqlQueryId[%s]", sqlQueryId);
170170
}
171-
stmt.reporter().failed(e);
171+
stmt.reporter().failed(e, bytesWritten);
172172
}
173173

174174
@Override

0 commit comments

Comments
 (0)