From e9f5658f9eb2b31f68bff8aba7f9f3f8a8166e04 Mon Sep 17 00:00:00 2001 From: Niketh Sabbineni Date: Tue, 13 Mar 2018 16:55:00 -0700 Subject: [PATCH] Query should not fail because emitter fails or throws Exception --- .../io/druid/query/MetricsEmittingQueryRunner.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/processing/src/main/java/io/druid/query/MetricsEmittingQueryRunner.java b/processing/src/main/java/io/druid/query/MetricsEmittingQueryRunner.java index 0734c2b6a948..be68a24ca1e9 100644 --- a/processing/src/main/java/io/druid/query/MetricsEmittingQueryRunner.java +++ b/processing/src/main/java/io/druid/query/MetricsEmittingQueryRunner.java @@ -19,6 +19,7 @@ package io.druid.query; +import io.druid.java.util.common.logger.Logger; import io.druid.java.util.emitter.service.ServiceEmitter; import io.druid.java.util.common.guava.LazySequence; import io.druid.java.util.common.guava.Sequence; @@ -39,6 +40,7 @@ public class MetricsEmittingQueryRunner implements QueryRunner private final long creationTimeNs; private final ObjLongConsumer> reportMetric; private final Consumer> applyCustomDimensions; + private static final Logger log = new Logger(MetricsEmittingQueryRunner.class); private MetricsEmittingQueryRunner( ServiceEmitter emitter, @@ -117,7 +119,13 @@ public void after(boolean isDone, Throwable thrown) if (creationTimeNs > 0) { queryMetrics.reportWaitTime(startTimeNs - creationTimeNs); } - queryMetrics.emit(emitter); + try { + queryMetrics.emit(emitter); + } + catch (Exception e) { + // Query should not fail, because of emitter failure. Swallowing the exception. + log.error("Failure while trying to emit [%s] with stacktrace [%s]", emitter.toString(), e); + } } } );