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 7750759e2ac WorkerImpl: Skip null dimensions when emitting metrics.
(#19079)
7750759e2ac is described below
commit 7750759e2ac6f6a56ccf9d31997bc891bb698c9e
Author: Gian Merlino <[email protected]>
AuthorDate: Tue Mar 3 15:35:33 2026 -0800
WorkerImpl: Skip null dimensions when emitting metrics. (#19079)
If a query ends without a worker ever receiving a work order (perhaps
due to failure), the call to DefaultQueryMetrics.getTableNamesAsString
would throw a NullPointerException.
This patch updates metric emitting logic to skip dimensions that
are not available at the time the query completes.
---
.../java/org/apache/druid/msq/exec/WorkerImpl.java | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java
index e0a64fd5bba..c639b1d7003 100644
--- a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java
+++ b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/WorkerImpl.java
@@ -230,16 +230,21 @@ public class WorkerImpl implements Worker
cpuTimeNs += tracker.totalCpu();
}
+ final MSQMetricEventBuilder metricBuilder = new MSQMetricEventBuilder();
+
final Set<String> datasources = (Set<String>)
queryMetricDimensions.get(DruidMetrics.DATASOURCE);
- final Set<Interval> intervals = (Set<Interval>)
queryMetricDimensions.get(DruidMetrics.INTERVAL);
+ if (datasources != null) {
+ metricBuilder.setDimension(DruidMetrics.DATASOURCE,
DefaultQueryMetrics.getTableNamesAsString(datasources));
+ }
- final MSQMetricEventBuilder metricBuilder = new MSQMetricEventBuilder();
- metricBuilder.setDimension(DruidMetrics.DATASOURCE,
DefaultQueryMetrics.getTableNamesAsString(datasources))
- .setDimension(DruidMetrics.INTERVAL,
DefaultQueryMetrics.getIntervalsAsStringArray(intervals))
- .setDimension(DruidMetrics.DURATION,
BaseQuery.calculateDuration(intervals))
- .setDimension(DruidMetrics.SUCCESS, success)
- .setMetric("query/time", time);
+ final Set<Interval> intervals = (Set<Interval>)
queryMetricDimensions.get(DruidMetrics.INTERVAL);
+ if (intervals != null) {
+ metricBuilder.setDimension(DruidMetrics.INTERVAL,
DefaultQueryMetrics.getIntervalsAsStringArray(intervals));
+ metricBuilder.setDimension(DruidMetrics.DURATION,
BaseQuery.calculateDuration(intervals));
+ }
+ metricBuilder.setDimension(DruidMetrics.SUCCESS, success);
+ metricBuilder.setMetric("query/time", time);
context.emitMetric(metricBuilder);
metricBuilder.setMetric("query/cpu/time",
TimeUnit.NANOSECONDS.toMicros(cpuTimeNs));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]