This is an automated email from the ASF dual-hosted git repository.
yqm pushed a commit to branch 35.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/35.0.0 by this push:
new 40e80036b26 Fix query status metric reporting bug in router (#18639)
40e80036b26 is described below
commit 40e80036b26a9e0127efd90a0d5e8402734ad18b
Author: jtuglu1 <[email protected]>
AuthorDate: Thu Oct 16 10:28:47 2025 -0700
Fix query status metric reporting bug in router (#18639)
Currently, all query errors that did not originate from the router are
incorrectly being recorded as successful in metric emission at the router. For
example, a query that timed out on a broker would be reported as a successful
query by the router during metric emission.
This is because the current code checks an exception on the response
object, rather than the actual status code of the response. This is incorrect
because the router is operating as a proxy, and a "successful" result is
considered one which was proxied + received a response, and will not throw an
exception. We should be checking the status code as well, since this is the
true status determined by the downstream broker.
---
.../apache/druid/query/DefaultQueryMetrics.java | 5 +-
.../java/org/apache/druid/query/DruidMetrics.java | 2 +-
.../java/org/apache/druid/query/QueryMetrics.java | 5 +-
.../query/search/DefaultSearchQueryMetrics.java | 6 +-
.../org/apache/druid/server/QueryLifecycle.java | 6 +-
.../org/apache/druid/server/QueryResourceTest.java | 34 +++++-----
.../druid/server/AsyncQueryForwardingServlet.java | 23 ++++---
.../server/AsyncQueryForwardingServletTest.java | 76 +++++++++++++++++++++-
.../org/apache/druid/sql/SqlExecutionReporter.java | 4 +-
.../org/apache/druid/sql/http/SqlResourceTest.java | 24 +++----
10 files changed, 129 insertions(+), 56 deletions(-)
diff --git
a/processing/src/main/java/org/apache/druid/query/DefaultQueryMetrics.java
b/processing/src/main/java/org/apache/druid/query/DefaultQueryMetrics.java
index 624a6f783fe..47d4e91ea2a 100644
--- a/processing/src/main/java/org/apache/druid/query/DefaultQueryMetrics.java
+++ b/processing/src/main/java/org/apache/druid/query/DefaultQueryMetrics.java
@@ -27,7 +27,6 @@ import
org.apache.druid.java.util.emitter.service.ServiceEmitter;
import org.apache.druid.java.util.emitter.service.ServiceMetricEvent;
import org.joda.time.Interval;
-import javax.annotation.Nullable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
@@ -195,9 +194,9 @@ public class DefaultQueryMetrics<QueryType extends
Query<?>> implements QueryMet
}
@Override
- public void code(@Nullable Throwable error)
+ public void statusCode(int code)
{
- setDimension(DruidMetrics.CODE, DruidMetrics.computeStatusCode(error));
+ setDimension(DruidMetrics.STATUS_CODE, code);
}
@Override
diff --git a/processing/src/main/java/org/apache/druid/query/DruidMetrics.java
b/processing/src/main/java/org/apache/druid/query/DruidMetrics.java
index 08a8a6e9396..578d792df49 100644
--- a/processing/src/main/java/org/apache/druid/query/DruidMetrics.java
+++ b/processing/src/main/java/org/apache/druid/query/DruidMetrics.java
@@ -37,7 +37,7 @@ public class DruidMetrics
public static final String INTERVAL = "interval";
public static final String ID = "id";
public static final String SUBQUERY_ID = "subQueryId";
- public static final String CODE = "statusCode";
+ public static final String STATUS_CODE = "statusCode";
public static final String STATUS = "status";
public static final String ENGINE = "engine";
public static final String DURATION = "duration";
diff --git a/processing/src/main/java/org/apache/druid/query/QueryMetrics.java
b/processing/src/main/java/org/apache/druid/query/QueryMetrics.java
index 403420b4b04..8f0dff4da98 100644
--- a/processing/src/main/java/org/apache/druid/query/QueryMetrics.java
+++ b/processing/src/main/java/org/apache/druid/query/QueryMetrics.java
@@ -27,7 +27,6 @@ import org.apache.druid.query.filter.Filter;
import org.apache.druid.query.filter.FilterBundle;
import org.apache.druid.query.search.SearchQueryMetricsFactory;
-import javax.annotation.Nullable;
import java.util.List;
/**
@@ -243,10 +242,10 @@ public interface QueryMetrics<QueryType extends Query<?>>
void success(boolean success);
/**
- * Translates the given query exception into the appropriate failure status
code.
+ * Sets the query status code
* See {@link DruidMetrics#computeStatusCode}.
*/
- void code(@Nullable Throwable error);
+ void statusCode(int code);
void segment(String segmentIdentifier);
diff --git
a/processing/src/main/java/org/apache/druid/query/search/DefaultSearchQueryMetrics.java
b/processing/src/main/java/org/apache/druid/query/search/DefaultSearchQueryMetrics.java
index 9a694824c3b..0548cc0aa45 100644
---
a/processing/src/main/java/org/apache/druid/query/search/DefaultSearchQueryMetrics.java
+++
b/processing/src/main/java/org/apache/druid/query/search/DefaultSearchQueryMetrics.java
@@ -27,8 +27,6 @@ import org.apache.druid.query.Query;
import org.apache.druid.query.QueryMetrics;
import org.apache.druid.query.filter.FilterBundle;
-import javax.annotation.Nullable;
-
/**
* This class is implemented with delegation to another QueryMetrics for
compatibility, see "Making subinterfaces of
* QueryMetrics for emitting custom dimensions and/or metrics for specific
query types" section in {@link QueryMetrics}
@@ -148,9 +146,9 @@ public class DefaultSearchQueryMetrics implements
SearchQueryMetrics
}
@Override
- public void code(@Nullable Throwable error)
+ public void statusCode(int code)
{
- delegateQueryMetrics.code(error);
+ delegateQueryMetrics.statusCode(code);
}
@Override
diff --git a/server/src/main/java/org/apache/druid/server/QueryLifecycle.java
b/server/src/main/java/org/apache/druid/server/QueryLifecycle.java
index 8fb3381f16f..2b11c3d6325 100644
--- a/server/src/main/java/org/apache/druid/server/QueryLifecycle.java
+++ b/server/src/main/java/org/apache/druid/server/QueryLifecycle.java
@@ -401,7 +401,9 @@ public class QueryLifecycle
StringUtils.nullToEmptyNonDruidDataString(remoteAddress)
);
queryMetrics.success(success);
- queryMetrics.code(e);
+
+ final int statusCode = DruidMetrics.computeStatusCode(e);
+ queryMetrics.statusCode(statusCode);
queryMetrics.reportQueryTime(queryTimeNs);
if (bytesWritten >= 0) {
@@ -418,7 +420,7 @@ public class QueryLifecycle
statsMap.put("query/time", TimeUnit.NANOSECONDS.toMillis(queryTimeNs));
statsMap.put("query/bytes", bytesWritten);
statsMap.put("success", success);
- statsMap.put(DruidMetrics.CODE, DruidMetrics.computeStatusCode(e));
+ statsMap.put(DruidMetrics.STATUS_CODE, statusCode);
if (authenticationResult != null) {
statsMap.put("identity", authenticationResult.getIdentity());
diff --git
a/server/src/test/java/org/apache/druid/server/QueryResourceTest.java
b/server/src/test/java/org/apache/druid/server/QueryResourceTest.java
index 1f116bc3963..72c895e46a0 100644
--- a/server/src/test/java/org/apache/druid/server/QueryResourceTest.java
+++ b/server/src/test/java/org/apache/druid/server/QueryResourceTest.java
@@ -424,7 +424,7 @@ public class QueryResourceTest
final Response response =
expectSynchronousRequestFlow(SIMPLE_TIMESERIES_QUERY);
Assert.assertEquals(Status.INTERNAL_SERVER_ERROR.getStatusCode(),
response.getStatus());
emitter.verifyEmitted("query/time", 1);
- Assert.assertEquals(500,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(500,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
final ErrorResponse entity = (ErrorResponse) response.getEntity();
MatcherAssert.assertThat(
@@ -534,7 +534,7 @@ public class QueryResourceTest
Assert.assertEquals(fields.get(QueryResource.RESPONSE_COMPLETE_TRAILER_HEADER),
"false");
emitter.verifyEmitted("query/time", 1);
- Assert.assertEquals(504,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(504,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -616,7 +616,7 @@ public class QueryResourceTest
actualOutput
);
emitter.verifyEmitted("query/time", 1);
- Assert.assertEquals(400,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(400,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -720,7 +720,7 @@ public class QueryResourceTest
Assert.assertEquals("true",
fields.get(QueryResource.RESPONSE_COMPLETE_TRAILER_HEADER));
emitter.verifyEmitted("query/time", 1);
- Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@@ -812,7 +812,7 @@ public class QueryResourceTest
.expectMessageIs("something")
);
emitter.verifyEmitted("query/time", 1);
- Assert.assertEquals(500,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(500,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -874,7 +874,7 @@ public class QueryResourceTest
testRequestLogger.getNativeQuerylogs().get(0).getQuery().getContext().get(overrideConfigKey)
);
emitter.verifyEmitted("query/time", 1);
- Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -900,7 +900,7 @@ public class QueryResourceTest
jsonMapper.readValue(response.baos.toByteArray(),
QueryInterruptedException.class).toString()
);
emitter.verifyEmitted("query/time", 1);
- Assert.assertEquals(500,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(500,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -918,7 +918,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 1);
Assert.assertEquals(1, queryResource.getSuccessfulQueryCount());
- Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -934,7 +934,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 1);
Assert.assertEquals(1, queryResource.getSuccessfulQueryCount());
- Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -951,7 +951,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 1);
Assert.assertEquals(1, queryResource.getSuccessfulQueryCount());
- Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -970,7 +970,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 1);
Assert.assertEquals(1, queryResource.getSuccessfulQueryCount());
- Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -994,7 +994,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 1);
Assert.assertEquals(1, queryResource.getSuccessfulQueryCount());
- Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -1017,7 +1017,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 1);
Assert.assertEquals(1, queryResource.getSuccessfulQueryCount());
- Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -1228,7 +1228,7 @@ public class QueryResourceTest
Assert.assertEquals(1, timeoutQueryResource.getTimedOutQueryCount());
emitter.verifyEmitted("query/time", 1);
- Assert.assertEquals(504,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(504,
emitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test(timeout = 60_000L)
@@ -1533,7 +1533,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 3);
Map<Integer, Long> codeFrequencies =
emitter.getMetricEvents("query/time").stream()
.map(ServiceMetricEvent::toMap)
- .map(map -> (int)
map.get(DruidMetrics.CODE))
+ .map(map -> (int)
map.get(DruidMetrics.STATUS_CODE))
.collect(Collectors.groupingBy(
code -> code,
Collectors.counting()
@@ -1613,7 +1613,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 3);
Map<Integer, Long> codeFrequencies =
emitter.getMetricEvents("query/time").stream()
.map(ServiceMetricEvent::toMap)
- .map(map -> (int)
map.get(DruidMetrics.CODE))
+ .map(map -> (int)
map.get(DruidMetrics.STATUS_CODE))
.collect(Collectors.groupingBy(
code -> code,
Collectors.counting()
@@ -1690,7 +1690,7 @@ public class QueryResourceTest
emitter.verifyEmitted("query/time", 3);
Map<Integer, Long> codeFrequencies =
emitter.getMetricEvents("query/time").stream()
.map(ServiceMetricEvent::toMap)
- .map(map -> (int)
map.get(DruidMetrics.CODE))
+ .map(map -> (int)
map.get(DruidMetrics.STATUS_CODE))
.collect(Collectors.groupingBy(
code -> code,
Collectors.counting()
diff --git
a/services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java
b/services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java
index 829f973fdac..3eedf19a4b2 100644
---
a/services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java
+++
b/services/src/main/java/org/apache/druid/server/AsyncQueryForwardingServlet.java
@@ -760,13 +760,17 @@ public class AsyncQueryForwardingServlet extends
AsyncProxyServlet implements Qu
return;
}
- boolean success = result.isSucceeded();
+ final int statusCode = result.getResponse().getStatus();
+ boolean success = result.isSucceeded() && statusCode ==
Status.OK.getStatusCode();
if (success) {
successfulQueryCount.incrementAndGet();
} else {
failedQueryCount.incrementAndGet();
}
- emitQueryTime(requestTimeNs, success, sqlQueryId, queryId,
result.getFailure());
+
+ // As router is simply a proxy, we don't make an effort to construct the
error code from the exception ourselves.
+ // We rely on broker to set this for us if the error occurs downstream.
+ emitQueryTime(requestTimeNs, success, sqlQueryId, queryId, statusCode);
AuthenticationResult authenticationResult =
AuthorizationUtils.authenticationResultFromRequest(req);
@@ -786,8 +790,7 @@ public class AsyncQueryForwardingServlet extends
AsyncProxyServlet implements Qu
"query/time",
TimeUnit.NANOSECONDS.toMillis(requestTimeNs),
"success",
- success
- && result.getResponse().getStatus() ==
Status.OK.getStatusCode(),
+ success,
"identity",
authenticationResult.getIdentity()
)
@@ -814,8 +817,7 @@ public class AsyncQueryForwardingServlet extends
AsyncProxyServlet implements Qu
"query/time",
TimeUnit.NANOSECONDS.toMillis(requestTimeNs),
"success",
- success
- && result.getResponse().getStatus() ==
Status.OK.getStatusCode(),
+ success,
"identity",
authenticationResult.getIdentity()
)
@@ -853,7 +855,10 @@ public class AsyncQueryForwardingServlet extends
AsyncProxyServlet implements Qu
}
failedQueryCount.incrementAndGet();
- emitQueryTime(requestTimeNs, false, sqlQueryId, queryId, failure);
+
+ // As router is simply a proxy, we don't make an effort to construct the
error code from the exception ourselves.
+ // We rely on broker to set this for us if the error occurs downstream.
+ emitQueryTime(requestTimeNs, false, sqlQueryId, queryId,
response.getStatus());
AuthenticationResult authenticationResult =
AuthorizationUtils.authenticationResultFromRequest(req);
//noinspection VariableNotUsedInsideIf
@@ -930,7 +935,7 @@ public class AsyncQueryForwardingServlet extends
AsyncProxyServlet implements Qu
boolean success,
@Nullable String sqlQueryId,
@Nullable String queryId,
- Throwable queryException
+ int statusCode
)
{
QueryMetrics queryMetrics;
@@ -951,7 +956,7 @@ public class AsyncQueryForwardingServlet extends
AsyncProxyServlet implements Qu
);
}
queryMetrics.success(success);
- queryMetrics.code(queryException);
+ queryMetrics.statusCode(statusCode);
queryMetrics.reportQueryTime(requestTimeNs).emit(emitter);
}
}
diff --git
a/services/src/test/java/org/apache/druid/server/AsyncQueryForwardingServletTest.java
b/services/src/test/java/org/apache/druid/server/AsyncQueryForwardingServletTest.java
index 2bd6c5107a3..bd5487c6474 100644
---
a/services/src/test/java/org/apache/druid/server/AsyncQueryForwardingServletTest.java
+++
b/services/src/test/java/org/apache/druid/server/AsyncQueryForwardingServletTest.java
@@ -466,6 +466,70 @@ public class AsyncQueryForwardingServletTest extends
BaseJettyTest
verifyServletCallsForQuery(query, true, false, hostFinder, properties,
true);
}
+ @Test
+ public void testMetricsEmittedWithErrorStatusCodeButNoResultException()
+ {
+ final TimeseriesQuery query = Druids.newTimeseriesQueryBuilder()
+ .dataSource("foo")
+ .intervals("2000/P1D")
+ .granularity(Granularities.ALL)
+ .context(ImmutableMap.of("queryId",
"test-query-504"))
+ .build();
+
+ final HttpServletRequest requestMock =
Mockito.mock(HttpServletRequest.class);
+
Mockito.when(requestMock.getAttribute("org.apache.druid.proxy.avaticaQuery")).thenReturn(null);
+
Mockito.when(requestMock.getAttribute("org.apache.druid.proxy.query")).thenReturn(query);
+
Mockito.when(requestMock.getAttribute("org.apache.druid.proxy.sqlQuery")).thenReturn(null);
+ Mockito.when(requestMock.getRemoteAddr()).thenReturn("127.0.0.1");
+
Mockito.when(requestMock.getAttribute(AuthConfig.DRUID_AUTHENTICATION_RESULT))
+ .thenReturn(new AuthenticationResult("testUser", "basic", "basic",
null));
+
+ final Request proxyRequestMock = Mockito.mock(Request.class);
+ final Response responseMock = Mockito.mock(Response.class);
+ Mockito.when(responseMock.getStatus()).thenReturn(504); // Gateway Timeout
+ Mockito.when(responseMock.getHeaders()).thenReturn(HttpFields.build());
+ Mockito.when(responseMock.getRequest()).thenReturn(proxyRequestMock);
+
+ final Result result = new Result(proxyRequestMock, responseMock)
+ {
+ @Override
+ public Throwable getFailure()
+ {
+ return null; // No exception thrown
+ }
+ };
+
+ final StubServiceEmitter stubServiceEmitter = new StubServiceEmitter("",
"");
+ final AsyncQueryForwardingServlet servlet = new
AsyncQueryForwardingServlet(
+ new MapQueryToolChestWarehouse(ImmutableMap.of()),
+ TestHelper.makeJsonMapper(),
+ TestHelper.makeSmileMapper(),
+ null,
+ null,
+ null,
+ stubServiceEmitter,
+ NoopRequestLogger.instance(),
+ new DefaultGenericQueryMetricsFactory(),
+ new AuthenticatorMapper(ImmutableMap.of()),
+ new Properties(),
+ new ServerConfig()
+ );
+
+ try {
+ servlet.newProxyResponseListener(requestMock, null).onComplete(result);
+ }
+ catch (NullPointerException ignored) {
+ }
+
+ stubServiceEmitter.verifyEmitted("query/time", 1);
+ Assert.assertEquals("test-query-504",
stubServiceEmitter.getEvents().get(0).toMap().get("id"));
+ Assert.assertEquals(
+ 504,
+
stubServiceEmitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE)
+ );
+ Assert.assertEquals("false",
stubServiceEmitter.getMetricEvents("query/time").get(0).toMap().get("success"));
+ }
+
@Test
public void testNoParseExceptionOnGroupByWithFilteredAggregationOnLookups()
throws Exception
{
@@ -646,7 +710,7 @@ public class AsyncQueryForwardingServletTest extends
BaseJettyTest
@Override
public int getStatus()
{
- return 0;
+ return isFailure ? 500 : 200;
}
@Override
@@ -725,9 +789,15 @@ public class AsyncQueryForwardingServletTest extends
BaseJettyTest
Assert.assertEquals("dummy",
stubServiceEmitter.getEvents().get(0).toMap().get("id"));
}
if (isFailure) {
- Assert.assertEquals(500,
stubServiceEmitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(
+ 500,
+
stubServiceEmitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE)
+ );
} else {
- Assert.assertEquals(200,
stubServiceEmitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(
+ 200,
+
stubServiceEmitter.getMetricEvents("query/time").get(0).toMap().get(DruidMetrics.STATUS_CODE)
+ );
}
// This test is mostly about verifying that the servlet calls the right
methods the right number of times.
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 74a52345f8a..5322febf76b 100644
--- a/sql/src/main/java/org/apache/druid/sql/SqlExecutionReporter.java
+++ b/sql/src/main/java/org/apache/druid/sql/SqlExecutionReporter.java
@@ -115,7 +115,7 @@ public class SqlExecutionReporter
metricBuilder.setDimension("success", String.valueOf(success));
final int statusCode = DruidMetrics.computeStatusCode(e);
- metricBuilder.setDimension(DruidMetrics.CODE, statusCode);
+ metricBuilder.setDimension(DruidMetrics.STATUS_CODE, statusCode);
emitter.emit(metricBuilder.setMetric("sqlQuery/time",
TimeUnit.NANOSECONDS.toMillis(queryTimeNs)));
if (bytesWritten >= 0) {
@@ -133,7 +133,7 @@ public class SqlExecutionReporter
statsMap.put("sqlQuery/planningTimeMs",
TimeUnit.NANOSECONDS.toMillis(planningTimeNanos));
statsMap.put("sqlQuery/bytes", bytesWritten);
statsMap.put("success", success);
- statsMap.put(DruidMetrics.CODE, statusCode);
+ statsMap.put(DruidMetrics.STATUS_CODE, statusCode);
Map<String, Object> queryContext = stmt.queryContext;
if (plannerContext != null) {
statsMap.put("identity",
plannerContext.getAuthenticationResult().getIdentity());
diff --git a/sql/src/test/java/org/apache/druid/sql/http/SqlResourceTest.java
b/sql/src/test/java/org/apache/druid/sql/http/SqlResourceTest.java
index a808d0e4633..894619b9ea3 100644
--- a/sql/src/test/java/org/apache/druid/sql/http/SqlResourceTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/http/SqlResourceTest.java
@@ -406,7 +406,7 @@ public class SqlResourceTest extends CalciteTestBase
checkSqlRequestLog(true);
Assert.assertTrue(lifecycleManager.getAll("id").isEmpty());
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(200,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -494,7 +494,7 @@ public class SqlResourceTest extends CalciteTestBase
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
stubServiceEmitter.verifyValue("sqlQuery/bytes", 27L);
stubServiceEmitter.verifyEmitted("sqlQuery/planningTimeMs", 1);
- Assert.assertEquals(200,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(200,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@@ -1547,7 +1547,7 @@ public class SqlResourceTest extends CalciteTestBase
checkSqlRequestLog(false);
Assert.assertTrue(lifecycleManager.getAll("id").isEmpty());
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -1570,7 +1570,7 @@ public class SqlResourceTest extends CalciteTestBase
checkSqlRequestLog(false);
Assert.assertTrue(lifecycleManager.getAll("id").isEmpty());
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
/**
@@ -1594,7 +1594,7 @@ public class SqlResourceTest extends CalciteTestBase
checkSqlRequestLog(false);
Assert.assertTrue(lifecycleManager.getAll("id").isEmpty());
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -1787,7 +1787,7 @@ public class SqlResourceTest extends CalciteTestBase
);
Assert.assertTrue(lifecycleManager.getAll("id").isEmpty());
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -1887,7 +1887,7 @@ public class SqlResourceTest extends CalciteTestBase
stubServiceEmitter.verifyEmitted("sqlQuery/time", 3);
Map<Integer, Long> codeFrequencies =
stubServiceEmitter.getMetricEvents("sqlQuery/time").stream()
.map(event ->
event.toMap())
- .map(map -> (int)
map.get(DruidMetrics.CODE))
+ .map(map -> (int)
map.get(DruidMetrics.STATUS_CODE))
.collect(Collectors.groupingBy(
code -> code,
Collectors.counting()
@@ -1927,7 +1927,7 @@ public class SqlResourceTest extends CalciteTestBase
);
Assert.assertTrue(lifecycleManager.getAll(sqlQueryId).isEmpty());
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(504,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(504,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -1964,7 +1964,7 @@ public class SqlResourceTest extends CalciteTestBase
""
);
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(500,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(500,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -1994,7 +1994,7 @@ public class SqlResourceTest extends CalciteTestBase
ErrorResponse exception = deserializeResponse(queryResponse,
ErrorResponse.class);
validateLegacyQueryExceptionErrorResponse(exception, "Query cancelled",
null, "");
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(500,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(500,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -2078,7 +2078,7 @@ public class SqlResourceTest extends CalciteTestBase
checkSqlRequestLog(false);
Assert.assertTrue(lifecycleManager.getAll(sqlQueryId).isEmpty());
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
@Test
@@ -2096,7 +2096,7 @@ public class SqlResourceTest extends CalciteTestBase
);
checkSqlRequestLog(false);
stubServiceEmitter.verifyEmitted("sqlQuery/time", 1);
- Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.CODE));
+ Assert.assertEquals(400,
stubServiceEmitter.getMetricEvents("sqlQuery/time").get(0).toMap().get(DruidMetrics.STATUS_CODE));
}
private void checkSqlRequestLog(boolean success)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]