From 921f4651c5f980584d31f0e78c5b13df49ddac13 Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Tue, 26 Sep 2017 11:18:17 -0700 Subject: [PATCH 01/10] maxQueryTimeout property in runtime properties. --- .../java/io/druid/query/QueryContexts.java | 23 ++++++++++++ .../io/druid/query/QueryContextsTest.java | 35 +++++++++++++++++++ .../java/io/druid/server/QueryLifecycle.java | 14 ++++---- .../server/initialization/ServerConfig.java | 22 +++++++++++- 4 files changed, 86 insertions(+), 8 deletions(-) diff --git a/processing/src/main/java/io/druid/query/QueryContexts.java b/processing/src/main/java/io/druid/query/QueryContexts.java index b56812d8b0e5..51c3d4198676 100644 --- a/processing/src/main/java/io/druid/query/QueryContexts.java +++ b/processing/src/main/java/io/druid/query/QueryContexts.java @@ -132,6 +132,29 @@ public static Query withMaxScatterGatherBytes(Query query, long maxSca } } + public static Query withMaxQueryTimeout(Query query, long maxQueryTimeout) + { + Object obj = query.getContextValue(TIMEOUT_KEY); + if (obj == null) { + //don't do anything if timeout is not set in the context. + return query; + } else { + long curr = ((Number) obj).longValue(); + if (curr > maxQueryTimeout) { + throw new IAE( + "configured [%s = %s] is more than enforced limit of maxQueryTimeout [%s].", + TIMEOUT_KEY, + curr, + maxQueryTimeout + ); + } else { + return query; + } + } + } + + + public static long getMaxScatterGatherBytes(Query query) { return parseLong(query, MAX_SCATTER_GATHER_BYTES_KEY, Long.MAX_VALUE); diff --git a/processing/src/test/java/io/druid/query/QueryContextsTest.java b/processing/src/test/java/io/druid/query/QueryContextsTest.java index 32050ec92611..ea78c57c3b27 100644 --- a/processing/src/test/java/io/druid/query/QueryContextsTest.java +++ b/processing/src/test/java/io/druid/query/QueryContextsTest.java @@ -21,15 +21,20 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import io.druid.java.util.common.IAE; import io.druid.java.util.common.Intervals; import io.druid.query.spec.MultipleIntervalSegmentSpec; import org.junit.Assert; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; import java.util.HashMap; public class QueryContextsTest { + @Rule + public final ExpectedException exception = ExpectedException.none(); @Test public void testDefaultQueryTimeout() @@ -72,4 +77,34 @@ public void testQueryTimeout() query = QueryContexts.withDefaultTimeout(query, 1_000_000); Assert.assertEquals(1000, QueryContexts.getTimeout(query)); } + + @Test + public void testQueryMaxTimeout() + { + exception.expect(IAE.class); + exception.expectMessage("configured [timeout = 1000] is more than enforced limit of maxQueryTimeout [100]."); + Query query = new TestQuery( + new TableDataSource("test"), + new MultipleIntervalSegmentSpec(ImmutableList.of(Intervals.of("0/100"))), + false, + ImmutableMap.of(QueryContexts.TIMEOUT_KEY, 1000) + ); + + QueryContexts.withMaxQueryTimeout(query, 100); + } + + @Test + public void testMaxScatterGatherBytes() + { + exception.expect(IAE.class); + exception.expectMessage("configured [maxScatterGatherBytes = 1000] is more than enforced limit of [100]."); + Query query = new TestQuery( + new TableDataSource("test"), + new MultipleIntervalSegmentSpec(ImmutableList.of(Intervals.of("0/100"))), + false, + ImmutableMap.of(QueryContexts.MAX_SCATTER_GATHER_BYTES_KEY, 1000) + ); + + QueryContexts.withMaxScatterGatherBytes(query, 100); + } } diff --git a/server/src/main/java/io/druid/server/QueryLifecycle.java b/server/src/main/java/io/druid/server/QueryLifecycle.java index 8785397bb3c8..3e7294ca2a76 100644 --- a/server/src/main/java/io/druid/server/QueryLifecycle.java +++ b/server/src/main/java/io/druid/server/QueryLifecycle.java @@ -32,6 +32,7 @@ import io.druid.query.DruidMetrics; import io.druid.query.GenericQueryMetricsFactory; import io.druid.query.Query; +import io.druid.query.QueryContexts; import io.druid.query.QueryInterruptedException; import io.druid.query.QueryMetrics; import io.druid.query.QueryPlus; @@ -58,7 +59,7 @@ * *
    *
  1. Initialization ({@link #initialize(Query)})
  2. - *
  3. Authorization ({@link #authorize(String, String, HttpServletRequest)}
  4. + *
  5. Authorization ({@link #authorize(HttpServletRequest)}
  6. *
  7. Execution ({@link #execute()}
  8. *
  9. Logging ({@link #emitLogsAndMetrics(Throwable, String, long)}
  10. *
@@ -171,10 +172,11 @@ public void initialize(final Query baseQuery) } this.queryPlus = QueryPlus.wrap( - (Query) DirectDruidClient.withDefaultTimeoutAndMaxScatterGatherBytes( - baseQuery.withId(queryId), - serverConfig - ) + QueryContexts.withMaxQueryTimeout( + (Query) DirectDruidClient.withDefaultTimeoutAndMaxScatterGatherBytes( + baseQuery.withId(queryId), + serverConfig + ), serverConfig.getMaxQueryTimeout()) ); this.toolChest = warehouse.getToolChest(baseQuery); } @@ -213,8 +215,6 @@ public Access authorize( /** * Authorize the query. Will return an Access object denoting whether the query is authorized or not. * - * @param token authentication token from the request - * @param namespace namespace of the authentication token * @param req HTTP request object of the request. If provided, the auth-related fields in the HTTP request * will be automatically set. * diff --git a/server/src/main/java/io/druid/server/initialization/ServerConfig.java b/server/src/main/java/io/druid/server/initialization/ServerConfig.java index 82e85318ee58..2fe0302308c3 100644 --- a/server/src/main/java/io/druid/server/initialization/ServerConfig.java +++ b/server/src/main/java/io/druid/server/initialization/ServerConfig.java @@ -46,6 +46,10 @@ public class ServerConfig @Min(1) private long maxScatterGatherBytes = Long.MAX_VALUE; + @JsonProperty + @Min(1) + private long maxQueryTimeout = Long.MAX_VALUE; + @JsonProperty private boolean plaintext = true; @@ -72,6 +76,12 @@ public long getMaxScatterGatherBytes() return maxScatterGatherBytes; } + public long getMaxQueryTimeout() + { + return maxQueryTimeout; + } + + public boolean isPlaintext() { return plaintext; @@ -95,6 +105,7 @@ public boolean equals(Object o) return numThreads == that.numThreads && defaultQueryTimeout == that.defaultQueryTimeout && maxScatterGatherBytes == that.maxScatterGatherBytes && + maxQueryTimeout == that.maxQueryTimeout && plaintext == that.plaintext && tls == that.tls && Objects.equals(maxIdleTime, that.maxIdleTime); @@ -103,7 +114,15 @@ public boolean equals(Object o) @Override public int hashCode() { - return Objects.hash(numThreads, maxIdleTime, defaultQueryTimeout, maxScatterGatherBytes, plaintext, tls); + return Objects.hash( + numThreads, + maxIdleTime, + defaultQueryTimeout, + maxScatterGatherBytes, + maxQueryTimeout, + plaintext, + tls + ); } @Override @@ -114,6 +133,7 @@ public String toString() ", maxIdleTime=" + maxIdleTime + ", defaultQueryTimeout=" + defaultQueryTimeout + ", maxScatterGatherBytes=" + maxScatterGatherBytes + + ", maxQueryTimeout=" + maxQueryTimeout + ", plaintext=" + plaintext + ", tls=" + tls + '}'; From 0d9a8221f6fdbfa81f446d58202131232577e200 Mon Sep 17 00:00:00 2001 From: dwivedi Date: Tue, 26 Sep 2017 11:21:09 -0700 Subject: [PATCH 02/10] extra line --- .../main/java/io/druid/server/initialization/ServerConfig.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/io/druid/server/initialization/ServerConfig.java b/server/src/main/java/io/druid/server/initialization/ServerConfig.java index 2fe0302308c3..204050f2de0b 100644 --- a/server/src/main/java/io/druid/server/initialization/ServerConfig.java +++ b/server/src/main/java/io/druid/server/initialization/ServerConfig.java @@ -81,7 +81,6 @@ public long getMaxQueryTimeout() return maxQueryTimeout; } - public boolean isPlaintext() { return plaintext; From 855ad52d8818f56e554cbea62b170e6239ebe35a Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Tue, 26 Sep 2017 20:36:08 -0700 Subject: [PATCH 03/10] move withTimeoutAndMaxScatterGatherBytes method to QueryLifeCycle. --- .../io/druid/client/DirectDruidClient.java | 14 -------------- .../java/io/druid/server/QueryLifecycle.java | 19 ++++++++++++++++++- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/server/src/main/java/io/druid/client/DirectDruidClient.java b/server/src/main/java/io/druid/client/DirectDruidClient.java index 4cc00a071962..d90b3b40b832 100644 --- a/server/src/main/java/io/druid/client/DirectDruidClient.java +++ b/server/src/main/java/io/druid/client/DirectDruidClient.java @@ -117,20 +117,6 @@ public class DirectDruidClient implements QueryRunner private final AtomicInteger openConnections; private final boolean isSmile; - public static > QueryType withDefaultTimeoutAndMaxScatterGatherBytes( - final QueryType query, - ServerConfig serverConfig - ) - { - return (QueryType) QueryContexts.withMaxScatterGatherBytes( - QueryContexts.withDefaultTimeout( - (Query) query, - serverConfig.getDefaultQueryTimeout() - ), - serverConfig.getMaxScatterGatherBytes() - ); - } - /** * Removes the magical fields added by {@link #makeResponseContextForQuery(Query, long)}. */ diff --git a/server/src/main/java/io/druid/server/QueryLifecycle.java b/server/src/main/java/io/druid/server/QueryLifecycle.java index 3e7294ca2a76..b1179c97080b 100644 --- a/server/src/main/java/io/druid/server/QueryLifecycle.java +++ b/server/src/main/java/io/druid/server/QueryLifecycle.java @@ -173,7 +173,7 @@ public void initialize(final Query baseQuery) this.queryPlus = QueryPlus.wrap( QueryContexts.withMaxQueryTimeout( - (Query) DirectDruidClient.withDefaultTimeoutAndMaxScatterGatherBytes( + (Query) withTimeoutAndMaxScatterGatherBytes( baseQuery.withId(queryId), serverConfig ), serverConfig.getMaxQueryTimeout()) @@ -363,6 +363,23 @@ enum State DONE } + public static > QueryType withTimeoutAndMaxScatterGatherBytes( + final QueryType query, + ServerConfig serverConfig + ) + { + return (QueryType) QueryContexts.withMaxQueryTimeout( + QueryContexts.withMaxScatterGatherBytes( + QueryContexts.withDefaultTimeout( + (Query) query, + serverConfig.getDefaultQueryTimeout() + ), + serverConfig.getMaxScatterGatherBytes() + ), + serverConfig.getMaxQueryTimeout() + ); + } + public static class QueryResponse { private final Sequence results; From b90302e97ef1bd857870b28fa8579e95fe4d2255 Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Tue, 26 Sep 2017 20:43:49 -0700 Subject: [PATCH 04/10] Fix initialize method. --- server/src/main/java/io/druid/server/QueryLifecycle.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/io/druid/server/QueryLifecycle.java b/server/src/main/java/io/druid/server/QueryLifecycle.java index b1179c97080b..f11f9e444eae 100644 --- a/server/src/main/java/io/druid/server/QueryLifecycle.java +++ b/server/src/main/java/io/druid/server/QueryLifecycle.java @@ -172,11 +172,10 @@ public void initialize(final Query baseQuery) } this.queryPlus = QueryPlus.wrap( - QueryContexts.withMaxQueryTimeout( - (Query) withTimeoutAndMaxScatterGatherBytes( - baseQuery.withId(queryId), - serverConfig - ), serverConfig.getMaxQueryTimeout()) + (Query) withTimeoutAndMaxScatterGatherBytes( + baseQuery.withId(queryId), + serverConfig + ) ); this.toolChest = warehouse.getToolChest(baseQuery); } From 880dcddabcf32c312ea9a7cf14077c9138df206c Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Tue, 26 Sep 2017 20:45:06 -0700 Subject: [PATCH 05/10] remove unused import. --- server/src/main/java/io/druid/client/DirectDruidClient.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/io/druid/client/DirectDruidClient.java b/server/src/main/java/io/druid/client/DirectDruidClient.java index d90b3b40b832..b182187becec 100644 --- a/server/src/main/java/io/druid/client/DirectDruidClient.java +++ b/server/src/main/java/io/druid/client/DirectDruidClient.java @@ -65,7 +65,6 @@ import io.druid.query.ResourceLimitExceededException; import io.druid.query.Result; import io.druid.query.aggregation.MetricManipulatorFns; -import io.druid.server.initialization.ServerConfig; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBufferInputStream; import org.jboss.netty.handler.codec.http.HttpChunk; From de940802dd4443c472f5f0de19ced928e64d2f06 Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Thu, 28 Sep 2017 14:15:57 -0700 Subject: [PATCH 06/10] doc update. --- docs/content/configuration/broker.md | 1 + docs/content/configuration/historical.md | 1 + processing/src/main/java/io/druid/query/QueryContexts.java | 2 +- processing/src/test/java/io/druid/query/QueryContextsTest.java | 2 +- server/src/main/java/io/druid/server/QueryLifecycle.java | 2 +- 5 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/content/configuration/broker.md b/docs/content/configuration/broker.md index 349d96442ffd..e7220b3ecf68 100644 --- a/docs/content/configuration/broker.md +++ b/docs/content/configuration/broker.md @@ -42,6 +42,7 @@ Druid uses Jetty to serve HTTP requests. |`druid.broker.http.numConnections`|Size of connection pool for the Broker to connect to historical and real-time processes. If there are more queries than this number that all need to speak to the same node, then they will queue up.|20| |`druid.broker.http.compressionCodec`|Compression codec the Broker uses to communicate with historical and real-time processes. May be "gzip" or "identity".|gzip| |`druid.broker.http.readTimeout`|The timeout for data reads from historical and real-time processes.|PT15M| +|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`.|Long.MAX_VALUE| #### Retry Policy diff --git a/docs/content/configuration/historical.md b/docs/content/configuration/historical.md index c972cbe65d1f..2b49c3299bc3 100644 --- a/docs/content/configuration/historical.md +++ b/docs/content/configuration/historical.md @@ -49,6 +49,7 @@ Druid uses Jetty to serve HTTP requests. |`druid.server.http.numThreads`|Number of threads for HTTP requests.|max(10, (Number of cores * 17) / 16 + 2) + 30| |`druid.server.http.maxIdleTime`|The Jetty max idle time for a connection.|PT5m| |`druid.server.http.defaultQueryTimeout`|Query timeout in millis, beyond which unfinished queries will be cancelled|300000| +|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`.|Long.MAX_VALUE| #### Processing diff --git a/processing/src/main/java/io/druid/query/QueryContexts.java b/processing/src/main/java/io/druid/query/QueryContexts.java index 51c3d4198676..d644768760ef 100644 --- a/processing/src/main/java/io/druid/query/QueryContexts.java +++ b/processing/src/main/java/io/druid/query/QueryContexts.java @@ -132,7 +132,7 @@ public static Query withMaxScatterGatherBytes(Query query, long maxSca } } - public static Query withMaxQueryTimeout(Query query, long maxQueryTimeout) + public static Query verifyMaxQueryTimeout(Query query, long maxQueryTimeout) { Object obj = query.getContextValue(TIMEOUT_KEY); if (obj == null) { diff --git a/processing/src/test/java/io/druid/query/QueryContextsTest.java b/processing/src/test/java/io/druid/query/QueryContextsTest.java index ea78c57c3b27..1358eada2659 100644 --- a/processing/src/test/java/io/druid/query/QueryContextsTest.java +++ b/processing/src/test/java/io/druid/query/QueryContextsTest.java @@ -90,7 +90,7 @@ public void testQueryMaxTimeout() ImmutableMap.of(QueryContexts.TIMEOUT_KEY, 1000) ); - QueryContexts.withMaxQueryTimeout(query, 100); + QueryContexts.verifyMaxQueryTimeout(query, 100); } @Test diff --git a/server/src/main/java/io/druid/server/QueryLifecycle.java b/server/src/main/java/io/druid/server/QueryLifecycle.java index f11f9e444eae..8c0965821a23 100644 --- a/server/src/main/java/io/druid/server/QueryLifecycle.java +++ b/server/src/main/java/io/druid/server/QueryLifecycle.java @@ -367,7 +367,7 @@ public static > QueryType withTimeoutAndMaxScatter ServerConfig serverConfig ) { - return (QueryType) QueryContexts.withMaxQueryTimeout( + return (QueryType) QueryContexts.verifyMaxQueryTimeout( QueryContexts.withMaxScatterGatherBytes( QueryContexts.withDefaultTimeout( (Query) query, From e2c940b1f5fdbaa787926e833454d29907371f57 Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Fri, 29 Sep 2017 09:53:53 -0700 Subject: [PATCH 07/10] some more details in doc about query failure.. --- docs/content/configuration/broker.md | 2 +- docs/content/configuration/historical.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/content/configuration/broker.md b/docs/content/configuration/broker.md index e7220b3ecf68..b10d7b650b26 100644 --- a/docs/content/configuration/broker.md +++ b/docs/content/configuration/broker.md @@ -42,7 +42,7 @@ Druid uses Jetty to serve HTTP requests. |`druid.broker.http.numConnections`|Size of connection pool for the Broker to connect to historical and real-time processes. If there are more queries than this number that all need to speak to the same node, then they will queue up.|20| |`druid.broker.http.compressionCodec`|Compression codec the Broker uses to communicate with historical and real-time processes. May be "gzip" or "identity".|gzip| |`druid.broker.http.readTimeout`|The timeout for data reads from historical and real-time processes.|PT15M| -|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`.|Long.MAX_VALUE| +|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`. Query rejected if the query context `timeout` is greater than this value. |Long.MAX_VALUE| #### Retry Policy diff --git a/docs/content/configuration/historical.md b/docs/content/configuration/historical.md index 2b49c3299bc3..302ffc9efe32 100644 --- a/docs/content/configuration/historical.md +++ b/docs/content/configuration/historical.md @@ -49,7 +49,7 @@ Druid uses Jetty to serve HTTP requests. |`druid.server.http.numThreads`|Number of threads for HTTP requests.|max(10, (Number of cores * 17) / 16 + 2) + 30| |`druid.server.http.maxIdleTime`|The Jetty max idle time for a connection.|PT5m| |`druid.server.http.defaultQueryTimeout`|Query timeout in millis, beyond which unfinished queries will be cancelled|300000| -|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`.|Long.MAX_VALUE| +|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`. Query rejected if the query context `timeout` is greater than this value. |Long.MAX_VALUE| #### Processing From 7c71a1a50be81ea41b71d73ff731b2f3cf3f433d Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Fri, 29 Sep 2017 11:42:45 -0700 Subject: [PATCH 08/10] minor fix. --- docs/content/configuration/broker.md | 2 +- docs/content/configuration/historical.md | 2 +- .../main/java/io/druid/server/initialization/ServerConfig.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/content/configuration/broker.md b/docs/content/configuration/broker.md index 483d3d2bc6dd..1d17e11b5681 100644 --- a/docs/content/configuration/broker.md +++ b/docs/content/configuration/broker.md @@ -42,7 +42,7 @@ Druid uses Jetty to serve HTTP requests. |`druid.broker.http.numConnections`|Size of connection pool for the Broker to connect to historical and real-time processes. If there are more queries than this number that all need to speak to the same node, then they will queue up.|20| |`druid.broker.http.compressionCodec`|Compression codec the Broker uses to communicate with historical and real-time processes. May be "gzip" or "identity".|gzip| |`druid.broker.http.readTimeout`|The timeout for data reads from historical and real-time processes.|PT15M| -|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`. Query rejected if the query context `timeout` is greater than this value. |Long.MAX_VALUE| +|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`. Query is rejected if the query context `timeout` is greater than this value. |Long.MAX_VALUE| #### Retry Policy diff --git a/docs/content/configuration/historical.md b/docs/content/configuration/historical.md index e9790254bc77..f910b325770c 100644 --- a/docs/content/configuration/historical.md +++ b/docs/content/configuration/historical.md @@ -49,7 +49,7 @@ Druid uses Jetty to serve HTTP requests. |`druid.server.http.numThreads`|Number of threads for HTTP requests.|max(10, (Number of cores * 17) / 16 + 2) + 30| |`druid.server.http.maxIdleTime`|The Jetty max idle time for a connection.|PT5m| |`druid.server.http.defaultQueryTimeout`|Query timeout in millis, beyond which unfinished queries will be cancelled|300000| -|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`. Query rejected if the query context `timeout` is greater than this value. |Long.MAX_VALUE| +|`druid.server.http.maxQueryTimeout`|Maximum allowed value (in milliseconds) for `timeout` parameter. See [query-context](query-context.html) to know more about `timeout`. Query is rejected if the query context `timeout` is greater than this value. |Long.MAX_VALUE| #### Processing diff --git a/server/src/main/java/io/druid/server/initialization/ServerConfig.java b/server/src/main/java/io/druid/server/initialization/ServerConfig.java index ba497b350d7e..c7a545cfb1b7 100644 --- a/server/src/main/java/io/druid/server/initialization/ServerConfig.java +++ b/server/src/main/java/io/druid/server/initialization/ServerConfig.java @@ -109,4 +109,4 @@ public String toString() ", maxQueryTimeout=" + maxQueryTimeout + '}'; } -} \ No newline at end of file +} From e0dccfa6f08a8642799dce75cd0604214947c3a3 Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Mon, 23 Oct 2017 19:17:21 -0700 Subject: [PATCH 09/10] decorating QueryRunner to set and verify context. Added by servers. --- .../overlord/ThreadPoolTaskRunner.java | 12 ++- .../indexing/overlord/TaskLifecycleTest.java | 4 +- .../worker/WorkerTaskMonitorTest.java | 4 +- .../java/io/druid/query/QueryContexts.java | 24 +++--- .../server/ClientQuerySegmentWalker.java | 19 +++-- .../java/io/druid/server/QueryLifecycle.java | 29 +------- .../druid/server/QueryLifecycleFactory.java | 5 -- .../SetAndVerifyContextQueryRunner.java | 73 ++++++++++++++++++ .../server/coordination/ServerManager.java | 74 ++++++++++--------- .../io/druid/server/QueryResourceTest.java | 21 ------ .../coordination/ServerManagerTest.java | 4 +- .../coordination/ZkCoordinatorTest.java | 4 +- .../druid/sql/calcite/util/CalciteTests.java | 2 - 13 files changed, 159 insertions(+), 116 deletions(-) create mode 100644 server/src/main/java/io/druid/server/SetAndVerifyContextQueryRunner.java diff --git a/indexing-service/src/main/java/io/druid/indexing/overlord/ThreadPoolTaskRunner.java b/indexing-service/src/main/java/io/druid/indexing/overlord/ThreadPoolTaskRunner.java index 907704e2d779..d9c3401a12cb 100644 --- a/indexing-service/src/main/java/io/druid/indexing/overlord/ThreadPoolTaskRunner.java +++ b/indexing-service/src/main/java/io/druid/indexing/overlord/ThreadPoolTaskRunner.java @@ -52,6 +52,8 @@ import io.druid.query.QuerySegmentWalker; import io.druid.query.SegmentDescriptor; import io.druid.server.DruidNode; +import io.druid.server.SetAndVerifyContextQueryRunner; +import io.druid.server.initialization.ServerConfig; import org.joda.time.Interval; import java.util.Collection; @@ -83,6 +85,7 @@ public class ThreadPoolTaskRunner implements TaskRunner, QuerySegmentWalker private final CopyOnWriteArrayList> listeners = new CopyOnWriteArrayList<>(); private final ServiceEmitter emitter; private final TaskLocation location; + private final ServerConfig serverConfig; private volatile boolean stopping = false; @@ -91,13 +94,15 @@ public ThreadPoolTaskRunner( TaskToolboxFactory toolboxFactory, TaskConfig taskConfig, ServiceEmitter emitter, - @Self DruidNode node + @Self DruidNode node, + ServerConfig serverConfig ) { this.toolboxFactory = Preconditions.checkNotNull(toolboxFactory, "toolboxFactory"); this.taskConfig = taskConfig; this.emitter = Preconditions.checkNotNull(emitter, "emitter"); this.location = TaskLocation.create(node.getHost(), node.getPlaintextPort(), node.getTlsPort()); + this.serverConfig = serverConfig; } @Override @@ -362,7 +367,10 @@ private QueryRunner getQueryRunnerImpl(Query query) } } - return queryRunner == null ? new NoopQueryRunner() : queryRunner; + return new SetAndVerifyContextQueryRunner( + serverConfig, + queryRunner == null ? new NoopQueryRunner() : queryRunner + ); } private static class ThreadPoolTaskRunnerWorkItem extends TaskRunnerWorkItem diff --git a/indexing-service/src/test/java/io/druid/indexing/overlord/TaskLifecycleTest.java b/indexing-service/src/test/java/io/druid/indexing/overlord/TaskLifecycleTest.java index 3e5110d4b943..09e9a769043a 100644 --- a/indexing-service/src/test/java/io/druid/indexing/overlord/TaskLifecycleTest.java +++ b/indexing-service/src/test/java/io/druid/indexing/overlord/TaskLifecycleTest.java @@ -112,6 +112,7 @@ import io.druid.server.coordination.DataSegmentAnnouncer; import io.druid.server.coordination.DataSegmentServerAnnouncer; import io.druid.server.coordination.ServerType; +import io.druid.server.initialization.ServerConfig; import io.druid.server.metrics.NoopServiceEmitter; import io.druid.timeline.DataSegment; import io.druid.timeline.partition.NoneShardSpec; @@ -619,7 +620,8 @@ private TaskRunner setUpThreadPoolTaskRunner(TaskToolboxFactory tb) tb, taskConfig, emitter, - new DruidNode("dummy", "dummy", 10000, null, true, false) + new DruidNode("dummy", "dummy", 10000, null, true, false), + new ServerConfig() ); } diff --git a/indexing-service/src/test/java/io/druid/indexing/worker/WorkerTaskMonitorTest.java b/indexing-service/src/test/java/io/druid/indexing/worker/WorkerTaskMonitorTest.java index 4d675fe305d2..eae1e4d6363e 100644 --- a/indexing-service/src/test/java/io/druid/indexing/worker/WorkerTaskMonitorTest.java +++ b/indexing-service/src/test/java/io/druid/indexing/worker/WorkerTaskMonitorTest.java @@ -47,6 +47,7 @@ import io.druid.segment.realtime.plumber.SegmentHandoffNotifierFactory; import io.druid.server.DruidNode; import io.druid.server.initialization.IndexerZkConfig; +import io.druid.server.initialization.ServerConfig; import io.druid.server.initialization.ZkPathsConfig; import io.druid.server.metrics.NoopServiceEmitter; import org.apache.curator.framework.CuratorFramework; @@ -194,7 +195,8 @@ public List getLocations() ), taskConfig, new NoopServiceEmitter(), - DUMMY_NODE + DUMMY_NODE, + new ServerConfig() ) ); } diff --git a/processing/src/main/java/io/druid/query/QueryContexts.java b/processing/src/main/java/io/druid/query/QueryContexts.java index d644768760ef..d0a16fd87844 100644 --- a/processing/src/main/java/io/druid/query/QueryContexts.java +++ b/processing/src/main/java/io/druid/query/QueryContexts.java @@ -134,22 +134,16 @@ public static Query withMaxScatterGatherBytes(Query query, long maxSca public static Query verifyMaxQueryTimeout(Query query, long maxQueryTimeout) { - Object obj = query.getContextValue(TIMEOUT_KEY); - if (obj == null) { - //don't do anything if timeout is not set in the context. - return query; + long timeout = getTimeout(query); + if (timeout > maxQueryTimeout) { + throw new IAE( + "configured [%s = %s] is more than enforced limit of maxQueryTimeout [%s].", + TIMEOUT_KEY, + timeout, + maxQueryTimeout + ); } else { - long curr = ((Number) obj).longValue(); - if (curr > maxQueryTimeout) { - throw new IAE( - "configured [%s = %s] is more than enforced limit of maxQueryTimeout [%s].", - TIMEOUT_KEY, - curr, - maxQueryTimeout - ); - } else { - return query; - } + return query; } } diff --git a/server/src/main/java/io/druid/server/ClientQuerySegmentWalker.java b/server/src/main/java/io/druid/server/ClientQuerySegmentWalker.java index defd17e34522..ec8bda0e8065 100644 --- a/server/src/main/java/io/druid/server/ClientQuerySegmentWalker.java +++ b/server/src/main/java/io/druid/server/ClientQuerySegmentWalker.java @@ -34,6 +34,7 @@ import io.druid.query.RetryQueryRunner; import io.druid.query.RetryQueryRunnerConfig; import io.druid.query.SegmentDescriptor; +import io.druid.server.initialization.ServerConfig; import org.joda.time.Interval; /** @@ -45,6 +46,7 @@ public class ClientQuerySegmentWalker implements QuerySegmentWalker private final QueryToolChestWarehouse warehouse; private final RetryQueryRunnerConfig retryConfig; private final ObjectMapper objectMapper; + private final ServerConfig serverConfig; @Inject public ClientQuerySegmentWalker( @@ -52,7 +54,8 @@ public ClientQuerySegmentWalker( CachingClusteredClient baseClient, QueryToolChestWarehouse warehouse, RetryQueryRunnerConfig retryConfig, - ObjectMapper objectMapper + ObjectMapper objectMapper, + ServerConfig serverConfig ) { this.emitter = emitter; @@ -60,6 +63,7 @@ public ClientQuerySegmentWalker( this.warehouse = warehouse; this.retryConfig = retryConfig; this.objectMapper = objectMapper; + this.serverConfig = serverConfig; } @Override @@ -86,11 +90,14 @@ private QueryRunner makeRunner(Query query, QueryRunner baseClientR return new FluentQueryRunnerBuilder<>(toolChest) .create( - new RetryQueryRunner<>( - baseClientRunner, - toolChest, - retryConfig, - objectMapper + new SetAndVerifyContextQueryRunner( + serverConfig, + new RetryQueryRunner<>( + baseClientRunner, + toolChest, + retryConfig, + objectMapper + ) ) ) .applyPreMergeDecoration() diff --git a/server/src/main/java/io/druid/server/QueryLifecycle.java b/server/src/main/java/io/druid/server/QueryLifecycle.java index d02bfb6a5f5b..1f25f370e279 100644 --- a/server/src/main/java/io/druid/server/QueryLifecycle.java +++ b/server/src/main/java/io/druid/server/QueryLifecycle.java @@ -32,14 +32,12 @@ import io.druid.query.DruidMetrics; import io.druid.query.GenericQueryMetricsFactory; import io.druid.query.Query; -import io.druid.query.QueryContexts; import io.druid.query.QueryInterruptedException; import io.druid.query.QueryMetrics; import io.druid.query.QueryPlus; import io.druid.query.QuerySegmentWalker; import io.druid.query.QueryToolChest; import io.druid.query.QueryToolChestWarehouse; -import io.druid.server.initialization.ServerConfig; import io.druid.server.log.RequestLogger; import io.druid.server.security.Access; import io.druid.server.security.AuthenticationResult; @@ -75,7 +73,6 @@ public class QueryLifecycle private final GenericQueryMetricsFactory queryMetricsFactory; private final ServiceEmitter emitter; private final RequestLogger requestLogger; - private final ServerConfig serverConfig; private final AuthorizerMapper authorizerMapper; private final long startMs; private final long startNs; @@ -91,7 +88,6 @@ public QueryLifecycle( final GenericQueryMetricsFactory queryMetricsFactory, final ServiceEmitter emitter, final RequestLogger requestLogger, - final ServerConfig serverConfig, final AuthorizerMapper authorizerMapper, final long startMs, final long startNs @@ -102,7 +98,6 @@ public QueryLifecycle( this.queryMetricsFactory = queryMetricsFactory; this.emitter = emitter; this.requestLogger = requestLogger; - this.serverConfig = serverConfig; this.authorizerMapper = authorizerMapper; this.startMs = startMs; this.startNs = startNs; @@ -172,12 +167,7 @@ public void initialize(final Query baseQuery) queryId = UUID.randomUUID().toString(); } - this.queryPlus = QueryPlus.wrap( - (Query) withTimeoutAndMaxScatterGatherBytes( - baseQuery.withId(queryId), - serverConfig - ) - ); + this.queryPlus = QueryPlus.wrap(baseQuery.withId(queryId)); this.toolChest = warehouse.getToolChest(baseQuery); } @@ -371,23 +361,6 @@ enum State DONE } - public static > QueryType withTimeoutAndMaxScatterGatherBytes( - final QueryType query, - ServerConfig serverConfig - ) - { - return (QueryType) QueryContexts.verifyMaxQueryTimeout( - QueryContexts.withMaxScatterGatherBytes( - QueryContexts.withDefaultTimeout( - (Query) query, - serverConfig.getDefaultQueryTimeout() - ), - serverConfig.getMaxScatterGatherBytes() - ), - serverConfig.getMaxQueryTimeout() - ); - } - public static class QueryResponse { private final Sequence results; diff --git a/server/src/main/java/io/druid/server/QueryLifecycleFactory.java b/server/src/main/java/io/druid/server/QueryLifecycleFactory.java index 745d23bb5c9e..9b8b1c5f147b 100644 --- a/server/src/main/java/io/druid/server/QueryLifecycleFactory.java +++ b/server/src/main/java/io/druid/server/QueryLifecycleFactory.java @@ -25,7 +25,6 @@ import io.druid.query.GenericQueryMetricsFactory; import io.druid.query.QuerySegmentWalker; import io.druid.query.QueryToolChestWarehouse; -import io.druid.server.initialization.ServerConfig; import io.druid.server.log.RequestLogger; import io.druid.server.security.AuthConfig; import io.druid.server.security.AuthorizerMapper; @@ -38,7 +37,6 @@ public class QueryLifecycleFactory private final GenericQueryMetricsFactory queryMetricsFactory; private final ServiceEmitter emitter; private final RequestLogger requestLogger; - private final ServerConfig serverConfig; private final AuthorizerMapper authorizerMapper; @Inject @@ -48,7 +46,6 @@ public QueryLifecycleFactory( final GenericQueryMetricsFactory queryMetricsFactory, final ServiceEmitter emitter, final RequestLogger requestLogger, - final ServerConfig serverConfig, final AuthConfig authConfig, final AuthorizerMapper authorizerMapper ) @@ -58,7 +55,6 @@ public QueryLifecycleFactory( this.queryMetricsFactory = queryMetricsFactory; this.emitter = emitter; this.requestLogger = requestLogger; - this.serverConfig = serverConfig; this.authorizerMapper = authorizerMapper; } @@ -70,7 +66,6 @@ public QueryLifecycle factorize() queryMetricsFactory, emitter, requestLogger, - serverConfig, authorizerMapper, System.currentTimeMillis(), System.nanoTime() diff --git a/server/src/main/java/io/druid/server/SetAndVerifyContextQueryRunner.java b/server/src/main/java/io/druid/server/SetAndVerifyContextQueryRunner.java new file mode 100644 index 000000000000..637b9dd14fb0 --- /dev/null +++ b/server/src/main/java/io/druid/server/SetAndVerifyContextQueryRunner.java @@ -0,0 +1,73 @@ +/* + * Licensed to Metamarkets Group Inc. (Metamarkets) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. Metamarkets licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package io.druid.server; + +import io.druid.java.util.common.guava.Sequence; +import io.druid.query.Query; +import io.druid.query.QueryContexts; +import io.druid.query.QueryPlus; +import io.druid.query.QueryRunner; +import io.druid.server.initialization.ServerConfig; + +import java.util.Map; + +/** + * Use this QueryRunner to set and verify Query contexts. + */ +public class SetAndVerifyContextQueryRunner implements QueryRunner +{ + private final ServerConfig serverConfig; + private final QueryRunner baseRunner; + + public SetAndVerifyContextQueryRunner(ServerConfig serverConfig, QueryRunner baseRunner) + { + this.serverConfig = serverConfig; + this.baseRunner = baseRunner; + } + + @Override + public Sequence run(QueryPlus queryPlus, Map responseContext) + { + return baseRunner.run( + QueryPlus.wrap((Query) withTimeoutAndMaxScatterGatherBytes( + queryPlus.getQuery(), + serverConfig + )), + responseContext + ); + } + + public static > QueryType withTimeoutAndMaxScatterGatherBytes( + final QueryType query, + ServerConfig serverConfig + ) + { + return (QueryType) QueryContexts.verifyMaxQueryTimeout( + QueryContexts.withMaxScatterGatherBytes( + QueryContexts.withDefaultTimeout( + (Query) query, + Math.min(serverConfig.getDefaultQueryTimeout(), serverConfig.getMaxQueryTimeout()) + ), + serverConfig.getMaxScatterGatherBytes() + ), + serverConfig.getMaxQueryTimeout() + ); + } +} diff --git a/server/src/main/java/io/druid/server/coordination/ServerManager.java b/server/src/main/java/io/druid/server/coordination/ServerManager.java index 9b906325cbad..39da89d03fd3 100644 --- a/server/src/main/java/io/druid/server/coordination/ServerManager.java +++ b/server/src/main/java/io/druid/server/coordination/ServerManager.java @@ -54,6 +54,8 @@ import io.druid.query.spec.SpecificSegmentSpec; import io.druid.segment.ReferenceCountingSegment; import io.druid.server.SegmentManager; +import io.druid.server.SetAndVerifyContextQueryRunner; +import io.druid.server.initialization.ServerConfig; import io.druid.timeline.TimelineObjectHolder; import io.druid.timeline.VersionedIntervalTimeline; import io.druid.timeline.partition.PartitionChunk; @@ -79,6 +81,7 @@ public class ServerManager implements QuerySegmentWalker private final ObjectMapper objectMapper; private final CacheConfig cacheConfig; private final SegmentManager segmentManager; + private final ServerConfig serverConfig; @Inject public ServerManager( @@ -89,7 +92,8 @@ public ServerManager( @Smile ObjectMapper objectMapper, Cache cache, CacheConfig cacheConfig, - SegmentManager segmentManager + SegmentManager segmentManager, + ServerConfig serverConfig ) { this.conglomerate = conglomerate; @@ -102,6 +106,7 @@ public ServerManager( this.cacheConfig = cacheConfig; this.segmentManager = segmentManager; + this.serverConfig = serverConfig; } @Override @@ -275,40 +280,43 @@ private QueryRunner buildAndDecorateQueryRunner( { SpecificSegmentSpec segmentSpec = new SpecificSegmentSpec(segmentDescriptor); String segmentId = adapter.getIdentifier(); - return CPUTimeMetricQueryRunner.safeBuild( - new SpecificSegmentQueryRunner( - new MetricsEmittingQueryRunner( - emitter, - toolChest, - new BySegmentQueryRunner( - segmentId, - adapter.getDataInterval().getStart(), - new CachingQueryRunner( + return new SetAndVerifyContextQueryRunner( + serverConfig, + CPUTimeMetricQueryRunner.safeBuild( + new SpecificSegmentQueryRunner( + new MetricsEmittingQueryRunner( + emitter, + toolChest, + new BySegmentQueryRunner( segmentId, - segmentDescriptor, - objectMapper, - cache, - toolChest, - new MetricsEmittingQueryRunner( - emitter, + adapter.getDataInterval().getStart(), + new CachingQueryRunner( + segmentId, + segmentDescriptor, + objectMapper, + cache, toolChest, - new ReferenceCountingSegmentQueryRunner(factory, adapter, segmentDescriptor), - QueryMetrics::reportSegmentTime, - queryMetrics -> queryMetrics.segment(segmentId) - ), - cachingExec, - cacheConfig - ) - ), - QueryMetrics::reportSegmentAndCacheTime, - queryMetrics -> queryMetrics.segment(segmentId) - ).withWaitMeasuredFromNow(), - segmentSpec - ), - toolChest, - emitter, - cpuTimeAccumulator, - false + new MetricsEmittingQueryRunner( + emitter, + toolChest, + new ReferenceCountingSegmentQueryRunner(factory, adapter, segmentDescriptor), + QueryMetrics::reportSegmentTime, + queryMetrics -> queryMetrics.segment(segmentId) + ), + cachingExec, + cacheConfig + ) + ), + QueryMetrics::reportSegmentAndCacheTime, + queryMetrics -> queryMetrics.segment(segmentId) + ).withWaitMeasuredFromNow(), + segmentSpec + ), + toolChest, + emitter, + cpuTimeAccumulator, + false + ) ); } } diff --git a/server/src/test/java/io/druid/server/QueryResourceTest.java b/server/src/test/java/io/druid/server/QueryResourceTest.java index 7bb399b4aa77..24a7fcf1931c 100644 --- a/server/src/test/java/io/druid/server/QueryResourceTest.java +++ b/server/src/test/java/io/druid/server/QueryResourceTest.java @@ -42,7 +42,6 @@ import io.druid.query.Result; import io.druid.query.SegmentDescriptor; import io.druid.query.timeboundary.TimeBoundaryResultValue; -import io.druid.server.initialization.ServerConfig; import io.druid.server.log.TestRequestLogger; import io.druid.server.metrics.NoopServiceEmitter; import io.druid.server.security.Access; @@ -56,7 +55,6 @@ import io.druid.server.security.Resource; import org.easymock.EasyMock; import org.joda.time.Interval; -import org.joda.time.Period; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -84,21 +82,6 @@ public class QueryResourceTest private static final ObjectMapper jsonMapper = new DefaultObjectMapper(); private static final AuthenticationResult authenticationResult = new AuthenticationResult("druid", "druid"); - - public static final ServerConfig serverConfig = new ServerConfig() - { - @Override - public int getNumThreads() - { - return 1; - } - - @Override - public Period getMaxIdleTime() - { - return Period.seconds(1); - } - }; private final HttpServletRequest testServletRequest = EasyMock.createMock(HttpServletRequest.class); public static final QuerySegmentWalker testSegmentWalker = new QuerySegmentWalker() { @@ -154,7 +137,6 @@ public void setup() new DefaultGenericQueryMetricsFactory(jsonMapper), new NoopServiceEmitter(), testRequestLogger, - serverConfig, new AuthConfig(), AuthTestUtils.TEST_AUTHORIZER_MAPPER ), @@ -265,7 +247,6 @@ public Access authorize(AuthenticationResult authenticationResult, Resource reso new DefaultGenericQueryMetricsFactory(jsonMapper), new NoopServiceEmitter(), testRequestLogger, - serverConfig, new AuthConfig(null, null, null), authMapper ), @@ -373,7 +354,6 @@ public Access authorize(AuthenticationResult authenticationResult, Resource reso new DefaultGenericQueryMetricsFactory(jsonMapper), new NoopServiceEmitter(), testRequestLogger, - serverConfig, new AuthConfig(null, null, null), authMapper ), @@ -495,7 +475,6 @@ public Access authorize(AuthenticationResult authenticationResult, Resource reso new DefaultGenericQueryMetricsFactory(jsonMapper), new NoopServiceEmitter(), testRequestLogger, - serverConfig, new AuthConfig(null, null, null), authMapper ), diff --git a/server/src/test/java/io/druid/server/coordination/ServerManagerTest.java b/server/src/test/java/io/druid/server/coordination/ServerManagerTest.java index e2fcbe53baf3..e53e756f094c 100644 --- a/server/src/test/java/io/druid/server/coordination/ServerManagerTest.java +++ b/server/src/test/java/io/druid/server/coordination/ServerManagerTest.java @@ -66,6 +66,7 @@ import io.druid.segment.loading.SegmentLoader; import io.druid.segment.loading.SegmentLoadingException; import io.druid.server.SegmentManager; +import io.druid.server.initialization.ServerConfig; import io.druid.server.metrics.NoopServiceEmitter; import io.druid.timeline.DataSegment; import io.druid.timeline.partition.NoneShardSpec; @@ -155,7 +156,8 @@ public > QueryRunnerFactory findFact new DefaultObjectMapper(), new LocalCacheProvider().get(), new CacheConfig(), - segmentManager + segmentManager, + new ServerConfig() ); loadQueryable("test", "1", Intervals.of("P1d/2011-04-01")); diff --git a/server/src/test/java/io/druid/server/coordination/ZkCoordinatorTest.java b/server/src/test/java/io/druid/server/coordination/ZkCoordinatorTest.java index fbd407265280..952afceaa95b 100644 --- a/server/src/test/java/io/druid/server/coordination/ZkCoordinatorTest.java +++ b/server/src/test/java/io/druid/server/coordination/ZkCoordinatorTest.java @@ -46,6 +46,7 @@ import io.druid.segment.loading.SegmentLoaderConfig; import io.druid.server.SegmentManager; import io.druid.server.initialization.BatchDataSegmentAnnouncerConfig; +import io.druid.server.initialization.ServerConfig; import io.druid.server.initialization.ZkPathsConfig; import io.druid.server.metrics.NoopServiceEmitter; import io.druid.timeline.DataSegment; @@ -130,7 +131,8 @@ public void setUp() throws Exception new DefaultObjectMapper(), new LocalCacheProvider().get(), new CacheConfig(), - segmentManager + segmentManager, + new ServerConfig() ); final ZkPathsConfig zkPaths = new ZkPathsConfig() diff --git a/sql/src/test/java/io/druid/sql/calcite/util/CalciteTests.java b/sql/src/test/java/io/druid/sql/calcite/util/CalciteTests.java index a3a328f3c683..6a00b247090e 100644 --- a/sql/src/test/java/io/druid/sql/calcite/util/CalciteTests.java +++ b/sql/src/test/java/io/druid/sql/calcite/util/CalciteTests.java @@ -90,7 +90,6 @@ import io.druid.segment.TestHelper; import io.druid.segment.incremental.IncrementalIndexSchema; import io.druid.server.QueryLifecycleFactory; -import io.druid.server.initialization.ServerConfig; import io.druid.server.log.NoopRequestLogger; import io.druid.server.security.AuthConfig; import io.druid.server.security.AuthTestUtils; @@ -325,7 +324,6 @@ public > QueryToolChest getToolChest new DefaultGenericQueryMetricsFactory(INJECTOR.getInstance(Key.get(ObjectMapper.class, Json.class))), new ServiceEmitter("dummy", "dummy", new NoopEmitter()), new NoopRequestLogger(), - new ServerConfig(), new AuthConfig(), AuthTestUtils.TEST_AUTHORIZER_MAPPER ); From d2105a773614e10eaf9078931dfe9c6735b73127 Mon Sep 17 00:00:00 2001 From: Akash Dwivedi Date: Mon, 23 Oct 2017 19:33:33 -0700 Subject: [PATCH 10/10] remove whitespace. --- .../main/java/io/druid/server/initialization/ServerConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/io/druid/server/initialization/ServerConfig.java b/server/src/main/java/io/druid/server/initialization/ServerConfig.java index 70a844084b6e..c64a82b002d2 100644 --- a/server/src/main/java/io/druid/server/initialization/ServerConfig.java +++ b/server/src/main/java/io/druid/server/initialization/ServerConfig.java @@ -108,7 +108,7 @@ public boolean equals(Object o) defaultQueryTimeout == that.defaultQueryTimeout && maxScatterGatherBytes == that.maxScatterGatherBytes && Objects.equals(maxIdleTime, that.maxIdleTime) && - maxQueryTimeout == that.maxQueryTimeout ; + maxQueryTimeout == that.maxQueryTimeout; } @Override