diff --git a/common/src/main/java/io/druid/metadata/PasswordProvider.java b/common/src/main/java/io/druid/metadata/PasswordProvider.java
index 7d8292a2bf6b..ec8855aeb214 100644
--- a/common/src/main/java/io/druid/metadata/PasswordProvider.java
+++ b/common/src/main/java/io/druid/metadata/PasswordProvider.java
@@ -24,7 +24,7 @@
/**
- * Implement this for different ways to (optionally securely) access db passwords.
+ * Implement this for different ways to (optionally securely) access secrets.
*/
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", defaultImpl = DefaultPasswordProvider.class)
@JsonSubTypes(value = {
diff --git a/common/src/test/java/io/druid/metadata/MetadataStorageConnectorConfigTest.java b/common/src/test/java/io/druid/metadata/MetadataStorageConnectorConfigTest.java
index 8ad962fd9488..00be7fd284b5 100644
--- a/common/src/test/java/io/druid/metadata/MetadataStorageConnectorConfigTest.java
+++ b/common/src/test/java/io/druid/metadata/MetadataStorageConnectorConfigTest.java
@@ -76,7 +76,7 @@ public void testEquals() throws IOException
private static final ObjectMapper jsonMapper = new ObjectMapper();
@Test
- public void testMetadaStorageConnectionConfigSimplePassword() throws Exception
+ public void testMetadataStorageConnectionConfigSimplePassword() throws Exception
{
testMetadataStorageConnectionConfig(
true,
@@ -90,7 +90,7 @@ public void testMetadaStorageConnectionConfigSimplePassword() throws Exception
}
@Test
- public void testMetadaStorageConnectionConfigWithDefaultProviderPassword() throws Exception
+ public void testMetadataStorageConnectionConfigWithDefaultProviderPassword() throws Exception
{
testMetadataStorageConnectionConfig(
true,
diff --git a/distribution/pom.xml b/distribution/pom.xml
index 83b42df61ed0..e35f2ced7f17 100644
--- a/distribution/pom.xml
+++ b/distribution/pom.xml
@@ -110,6 +110,8 @@
io.druid.extensions:druid-stats
-c
io.druid.extensions:druid-examples
+ -c
+ io.druid.extensions:simple-client-sslcontext
${druid.distribution.pulldeps.opts}
diff --git a/docs/content/configuration/broker.md b/docs/content/configuration/broker.md
index 98fa02f129cd..349d96442ffd 100644
--- a/docs/content/configuration/broker.md
+++ b/docs/content/configuration/broker.md
@@ -15,7 +15,8 @@ The broker node uses several of the global configs in [Configuration](../configu
|Property|Description|Default|
|--------|-----------|-------|
|`druid.host`|The host for the current node. This is used to advertise the current processes location as reachable from another node and should generally be specified such that `http://${druid.host}/` could actually talk to this process|InetAddress.getLocalHost().getCanonicalHostName()|
-|`druid.port`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8082|
+|`druid.plaintextPort`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8082|
+|`druid.tlsPort`|TLS port for HTTPS connector, if [druid.server.http.tls](../operations/tls-support.html) is set then this config will be used. If `druid.host` contains port then that port will be ignored. This should be a non-negative Integer.|8282|
|`druid.service`|The name of the service. This is used as a dimension when emitting metrics and alerts to differentiate between the various services|druid/broker|
### Query Configs
diff --git a/docs/content/configuration/coordinator.md b/docs/content/configuration/coordinator.md
index cde94abe7e16..5a38a338fb1a 100644
--- a/docs/content/configuration/coordinator.md
+++ b/docs/content/configuration/coordinator.md
@@ -15,7 +15,8 @@ The coordinator node uses several of the global configs in [Configuration](../co
|Property|Description|Default|
|--------|-----------|-------|
|`druid.host`|The host for the current node. This is used to advertise the current processes location as reachable from another node and should generally be specified such that `http://${druid.host}/` could actually talk to this process|InetAddress.getLocalHost().getCanonicalHostName()|
-|`druid.port`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8081|
+|`druid.plaintextPort`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8081|
+|`druid.tlsPort`|TLS port for HTTPS connector, if [druid.server.http.tls](../operations/tls-support.html) is set then this config will be used. If `druid.host` contains port then that port will be ignored. This should be a non-negative Integer.|8281|
|`druid.service`|The name of the service. This is used as a dimension when emitting metrics and alerts to differentiate between the various services|druid/coordinator|
### Coordinator Operation
diff --git a/docs/content/configuration/historical.md b/docs/content/configuration/historical.md
index d97c3e294f04..321408e78e16 100644
--- a/docs/content/configuration/historical.md
+++ b/docs/content/configuration/historical.md
@@ -15,7 +15,8 @@ The historical node uses several of the global configs in [Configuration](../con
|Property|Description|Default|
|--------|-----------|-------|
|`druid.host`|The host for the current node. This is used to advertise the current processes location as reachable from another node and should generally be specified such that `http://${druid.host}/` could actually talk to this process|InetAddress.getLocalHost().getCanonicalHostName()|
-|`druid.port`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8083|
+|`druid.plaintextPort`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8083|
+|`druid.tlsPort`|TLS port for HTTPS connector, if [druid.server.http.tls](../operations/tls-support.html) is set then this config will be used. If `druid.host` contains port then that port will be ignored. This should be a non-negative Integer.|8283|
|`druid.service`|The name of the service. This is used as a dimension when emitting metrics and alerts to differentiate between the various services|druid/historical|
### General Configuration
diff --git a/docs/content/configuration/index.md b/docs/content/configuration/index.md
index 10609730caa9..5f054ea74d51 100644
--- a/docs/content/configuration/index.md
+++ b/docs/content/configuration/index.md
@@ -234,7 +234,7 @@ These properties specify the jdbc connection and other configuration around the
|`druid.metadata.storage.type`|The type of metadata storage to use. Choose from "mysql", "postgresql", or "derby".|derby|
|`druid.metadata.storage.connector.connectURI`|The jdbc uri for the database to connect to|none|
|`druid.metadata.storage.connector.user`|The username to connect with.|none|
-|`druid.metadata.storage.connector.password`|The password provider or String password used to connect with.|none|
+|`druid.metadata.storage.connector.password`|The [Password Provider](../operations/password-provider.html) or String password used to connect with.|none|
|`druid.metadata.storage.connector.createTables`|If Druid requires a table and it doesn't exist, create it?|true|
|`druid.metadata.storage.tables.base`|The base name for tables.|druid|
|`druid.metadata.storage.tables.segments`|The table to use to look for segments.|druid_segments|
@@ -246,26 +246,6 @@ These properties specify the jdbc connection and other configuration around the
|`druid.metadata.storage.tables.supervisors`|Used by the indexing service to store supervisor configurations.|druid_supervisors|
|`druid.metadata.storage.tables.audit`|The table to use for audit history of configuration changes e.g. Coordinator rules.|druid_audit|
-#### Password Provider
-
-Environment variable password provider provides password by looking at specified environment variable. Use this in order to avoid specifying password in runtime.properties file.
-e.g
-
-```json
-{
- "type": "environment",
- "variable": "METADATA_STORAGE_PASSWORD"
-}
-```
-
-The values are described below.
-
-|Field|Type|Description|Required|
-|-----|----|-----------|--------|
-|`type`|String|password provider type|Yes: `environment`|
-|`variable`|String|environment variable to read password from|Yes|
-
-
### Deep Storage
The configurations concern how to push and pull [Segments](../design/segments.html) from deep storage.
diff --git a/docs/content/configuration/indexing-service.md b/docs/content/configuration/indexing-service.md
index 2d00c140514f..36d6f8603a84 100644
--- a/docs/content/configuration/indexing-service.md
+++ b/docs/content/configuration/indexing-service.md
@@ -9,14 +9,24 @@ The indexing service uses several of the global configs in [Configuration](../co
### Must be set on Overlord and Middle Manager
-#### Node Configs
+#### Overlord Node Configs
|Property|Description|Default|
|--------|-----------|-------|
|`druid.host`|The host for the current node. This is used to advertise the current processes location as reachable from another node and should generally be specified such that `http://${druid.host}/` could actually talk to this process|InetAddress.getLocalHost().getCanonicalHostName()|
-|`druid.port`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8090|
+|`druid.plaintextPort`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8090|
+|`druid.tlsPort`|TLS port for HTTPS connector, if [druid.server.http.tls](../operations/tls-support.html) is set then this config will be used. If `druid.host` contains port then that port will be ignored. This should be a non-negative Integer.|8290|
|`druid.service`|The name of the service. This is used as a dimension when emitting metrics and alerts to differentiate between the various services|druid/overlord|
+#### MiddleManager Node Configs
+
+|Property|Description|Default|
+|--------|-----------|-------|
+|`druid.host`|The host for the current node. This is used to advertise the current processes location as reachable from another node and should generally be specified such that `http://${druid.host}/` could actually talk to this process|InetAddress.getLocalHost().getCanonicalHostName()|
+|`druid.plaintextPort`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8091|
+|`druid.tlsPort`|TLS port for HTTPS connector, if [druid.server.http.tls](../operations/tls-support.html) is set then this config will be used. If `druid.host` contains port then that port will be ignored. This should be a non-negative Integer.|8291|
+|`druid.service`|The name of the service. This is used as a dimension when emitting metrics and alerts to differentiate between the various services|druid/middlemanager|
+
#### Task Logging
If you are running the indexing service in remote mode, the task logs must be stored in S3, Azure Blob Store, Google Cloud Storage or HDFS.
@@ -297,8 +307,9 @@ Middle managers pass their configurations down to their child peons. The middle
|`druid.indexer.runner.javaOpts`|*DEPRECATED* A string of -X Java options to pass to the peon's JVM. Quotable parameters or parameters with spaces are encouraged to use javaOptsArray|""|
|`druid.indexer.runner.javaOptsArray`|A json array of strings to be passed in as options to the peon's jvm. This is additive to javaOpts and is recommended for properly handling arguments which contain quotes or spaces like `["-XX:OnOutOfMemoryError=kill -9 %p"]`|`[]`|
|`druid.indexer.runner.maxZnodeBytes`|The maximum size Znode in bytes that can be created in Zookeeper.|524288|
-|`druid.indexer.runner.startPort`|The port that peons begin running on.|8100|
-|`druid.indexer.runner.separateIngestionEndpoint`|*Deprecated.* Use separate server and consequently separate jetty thread pool for ingesting events|false|
+|`druid.indexer.runner.startPort`|Starting port used for peon processes, should be greater than 1023.|8100|
+|`druid.indexer.runner.tlsStartPort`|Starting TLS port for peon processes, should be greater than 1023.|8300|
+|`druid.indexer.runner.separateIngestionEndpoint`|*Deprecated.* Use separate server and consequently separate jetty thread pool for ingesting events. Not supported with TLS.|false|
|`druid.worker.ip`|The IP of the worker.|localhost|
|`druid.worker.version`|Version identifier for the middle manager.|0|
|`druid.worker.capacity`|Maximum number of tasks the middle manager can accept.|Number of available processors - 1|
diff --git a/docs/content/configuration/realtime.md b/docs/content/configuration/realtime.md
index ca634e6072df..8fc157b3f3ab 100644
--- a/docs/content/configuration/realtime.md
+++ b/docs/content/configuration/realtime.md
@@ -16,7 +16,8 @@ The realtime node uses several of the global configs in [Configuration](../confi
|Property|Description|Default|
|--------|-----------|-------|
|`druid.host`|The host for the current node. This is used to advertise the current processes location as reachable from another node and should generally be specified such that `http://${druid.host}/` could actually talk to this process|InetAddress.getLocalHost().getCanonicalHostName()|
-|`druid.port`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8084|
+|`druid.plaintextPort`|This is the port to actually listen on; unless port mapping is used, this will be the same port as is on `druid.host`|8084|
+|`druid.tlsPort`|TLS port for HTTPS connector, if [druid.server.http.tls](../operations/tls-support.html) is set then this config will be used. If `druid.host` contains port then that port will be ignored. This should be a non-negative Integer.|8284|
|`druid.service`|The name of the service. This is used as a dimension when emitting metrics and alerts to differentiate between the various services|druid/realtime|
### Realtime Operation
diff --git a/docs/content/development/extensions-core/simple-client-sslcontext.md b/docs/content/development/extensions-core/simple-client-sslcontext.md
new file mode 100644
index 000000000000..de7dfb1d6641
--- /dev/null
+++ b/docs/content/development/extensions-core/simple-client-sslcontext.md
@@ -0,0 +1,22 @@
+---
+layout: doc_page
+---
+
+## Simple SSLContext Provider Module
+
+This module contains a simple implementation of [SSLContext](http://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLContext.html)
+that will be injected to be used with HttpClient that Druid nodes use internally to communicate with each other. To learn more about
+Java's SSL support, please refer to [this](http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html) guide.
+
+# Configuration
+
+|Property|Description|Default|Required|
+|--------|-----------|-------|--------|
+|`druid.client.https.protocol`|SSL protocol to use.|`TLSv1.2`|no|
+|`druid.client.https.trustStoreType`|The type of the key store where trusted root certificates are stored.|`java.security.KeyStore.getDefaultType()`|no|
+|`druid.client.https.trustStorePath`|The file path or URL of the TLS/SSL Key store where trusted root certificates are stored.|none|yes|
+|`druid.client.https.trustStoreAlgorithm`|Algorithm to be used by TrustManager to validate certificate chains|`javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()`|no|
+|`druid.client.https.trustStorePassword`|The [Password Provider](../../operations/password-provider.html) or String password for the Trust Store.|none|yes|
+
+This [document](http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html) lists all the possible
+values for the above mentioned configs among others provided by Java implementation.
\ No newline at end of file
diff --git a/docs/content/development/extensions.md b/docs/content/development/extensions.md
index d6bfca71dba0..d2aedbe77fba 100644
--- a/docs/content/development/extensions.md
+++ b/docs/content/development/extensions.md
@@ -37,6 +37,7 @@ Core extensions are maintained by Druid committers.
|druid-stats|Statistics related module including variance and standard deviation.|[link](../development/extensions-core/stats.html)|
|mysql-metadata-storage|MySQL metadata store.|[link](../development/extensions-core/mysql.html)|
|postgresql-metadata-storage|PostgreSQL metadata store.|[link](../development/extensions-core/postgresql.html)|
+|simple-client-sslcontext|Simple SSLContext provider module to be used by internal HttpClient talking to other nodes over HTTPS.|[link](../development/extensions-core/simple-client-sslcontext.html)|
# Community Extensions
diff --git a/docs/content/development/modules.md b/docs/content/development/modules.md
index e44d3db2de9e..33bfc1045186 100644
--- a/docs/content/development/modules.md
+++ b/docs/content/development/modules.md
@@ -178,6 +178,23 @@ Adding new Jersey resources to a module requires calling the following code to b
Jerseys.addResource(binder, NewResource.class);
```
+### Adding a new Password Provider implementation
+
+You will need to implement `io.druid.metadata.PasswordProvider` interface. For every place where Druid uses PasswordProvider, a new instance of the implementation will be created,
+thus make sure all the necessary information required for fetching each password is supplied during object instantiation.
+In your implementation of `io.druid.initialization.DruidModule`, `getJacksonModules` should look something like this -
+
+``` java
+ return ImmutableList.of(
+ new SimpleModule("SomePasswordProviderModule")
+ .registerSubtypes(
+ new NamedType(SomePasswordProvider.class, "some")
+ )
+ );
+```
+
+where `SomePasswordProvider` is the implementation of `PasswordProvider` interface, you can have a look at `io.druid.metadata.EnvironmentVariablePasswordProvider` for example.
+
### Bundle your extension with all the other Druid extensions
When you do `mvn install`, Druid extensions will be packaged within the Druid tarball and `extensions` directory, which are both underneath `distribution/target/`.
diff --git a/docs/content/operations/password-provider.md b/docs/content/operations/password-provider.md
new file mode 100644
index 000000000000..42ddae14f30d
--- /dev/null
+++ b/docs/content/operations/password-provider.md
@@ -0,0 +1,31 @@
+#### Password Provider
+
+Druid needs some passwords for accessing various secured systems like metadata store, Key Store containing server certificates etc.
+All these passwords have corresponding runtime properties associated with them, for example `druid.metadata.storage.connector.password` corresponds to the metadata store password.
+
+By default users can directly set the passwords in plaintext for these runtime properties, for example `druid.metadata.storage.connector.password=pwd` sets the metadata store password
+to be used by Druid to connect to metadata store to `pwd`. Apart from this, users can use environment variables to get password in following way -
+
+Environment variable password provider provides password by looking at specified environment variable. Use this in order to avoid specifying password in runtime.properties file.
+e.g
+
+```json
+{ "type": "environment", "variable": "METADATA_STORAGE_PASSWORD" }
+```
+
+The values are described below.
+
+|Field|Type|Description|Required|
+|-----|----|-----------|--------|
+|`type`|String|password provider type|Yes: `environment`|
+|`variable`|String|environment variable to read password from|Yes|
+
+However, many times users may want their own way to optionally securely fetch password during runtime of the Druid process.
+Druid allows this by users to implement their own `PasswordProvider` interface and create a Druid extension to register this implementation at Druid process startup.
+Please have a look at "Adding a new Password Provider implementation" on this [page](../development/modules.html) to learn more.
+
+To use this implementation, simply set the relevant password runtime property to something similar as was done for Environment variable password provider like -
+
+```json
+{ "type": "", "": "", ... }
+```
\ No newline at end of file
diff --git a/docs/content/operations/tls-support.md b/docs/content/operations/tls-support.md
new file mode 100644
index 000000000000..08747d769d1b
--- /dev/null
+++ b/docs/content/operations/tls-support.md
@@ -0,0 +1,46 @@
+---
+layout: doc_page
+---
+
+TLS Support
+===============
+
+# General Configuration
+
+|Property|Description|Default|
+|--------|-----------|-------|
+|`druid.server.http.plaintext`|Enable/Disable HTTP connector.|`true`|
+|`druid.server.http.tls`|Enable/Disable HTTPS connector.|`false`|
+
+Although not recommended but both HTTP and HTTPS connectors can be enabled at a time and respective ports are configurable using `druid.plaintextPort`
+and `druid.tlsPort` properties on each node. Please see `Configuration` section of individual nodes to check the valid and default values for these ports.
+
+# Jetty Server TLS Configuration
+
+Druid uses Jetty as an embedded web server. To get familiar with TLS/SSL in general and related concepts like Certificates etc.
+reading this [Jetty documentation](http://www.eclipse.org/jetty/documentation/9.3.x/configuring-ssl.html) might be helpful.
+To get more in depth knowledge of TLS/SSL support in Java in general, please refer to this [guide](http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html).
+The documentation [here](http://www.eclipse.org/jetty/documentation/9.3.x/configuring-ssl.html#configuring-sslcontextfactory)
+can help in understanding TLS/SSL configurations listed below. This [document](http://docs.oracle.com/javase/8/docs/technotes/guides/security/StandardNames.html) lists all the possible
+values for the below mentioned configs among others provided by Java implementation.
+
+|Property|Description|Default|Required|
+|--------|-----------|-------|--------|
+|`druid.server.https.keyStorePath`|The file path or URL of the TLS/SSL Key store.|none|yes|
+|`druid.server.https.keyStoreType`|The type of the key store.|none|yes|
+|`druid.server.https.certAlias`|Alias of TLS/SSL certificate for the connector.|none|yes|
+|`druid.server.https.keyStorePassword`|The [Password Provider](../operations/password-provider.html) or String password for the Key Store.|none|yes|
+|`druid.server.https.keyManagerPassword`|The [Password Provider](../operations/password-provider.html) or String password for the Key Manager.|none|no|
+
+# Druid's internal communication over TLS
+
+Whenever possible Druid nodes will use HTTPS to talk to each other. To enable this communication Druid's HttpClient needs to
+be configured with a proper [SSLContext](http://docs.oracle.com/javase/8/docs/api/javax/net/ssl/SSLContext.html) that is able
+to validate the Server Certificates, otherwise communication will fail.
+
+Since, there are various ways to configure SSLContext, by default, Druid looks for an instance of SSLContext Guice binding
+while creating the HttpClient. This binding can be achieved writing a [Druid extension](../development/extensions.html)
+which can provide an instance of SSLContext. Druid comes with a simple extension present [here](../development/extensions-core/simple-client-sslcontext.html)
+which should be useful enough for most simple cases, see [this](./including-extensions.html) for how to include extensions.
+If this extension does not satisfy the requirement then please follow the extension [implementation] (https://github.com/druid-io/druid/tree/master/extensions-core/simple-client-sslcontext)
+to create your own extension.
\ No newline at end of file
diff --git a/docs/content/toc.md b/docs/content/toc.md
index 6b9474735f46..6eca667d36c9 100644
--- a/docs/content/toc.md
+++ b/docs/content/toc.md
@@ -78,6 +78,8 @@ layout: toc
* [Insert Segment Tool](/docs/VERSION/operations/insert-segment-to-db.html)
* [Pull Dependencies Tool](/docs/VERSION/operations/pull-deps.html)
* [Recommendations](/docs/VERSION/operations/recommendations.html)
+ * [TLS Support](/docs/VERSION/operations/tls-support.html)
+ * [Password Provider](/docs/VERSION/operations/password-provider.html)
## Configuration
* [Common Configuration](/docs/VERSION/configuration/index.html)
diff --git a/extensions-contrib/orc-extensions/src/test/java/io/druid/data/input/orc/OrcHadoopInputRowParserTest.java b/extensions-contrib/orc-extensions/src/test/java/io/druid/data/input/orc/OrcHadoopInputRowParserTest.java
index c9f7bede1eab..1dfe672d0fa2 100644
--- a/extensions-contrib/orc-extensions/src/test/java/io/druid/data/input/orc/OrcHadoopInputRowParserTest.java
+++ b/extensions-contrib/orc-extensions/src/test/java/io/druid/data/input/orc/OrcHadoopInputRowParserTest.java
@@ -59,6 +59,7 @@ public void configure(Binder binder)
{
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test");
binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0);
+ binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1);
}
},
new OrcExtensionsModule()
diff --git a/extensions-contrib/time-min-max/src/test/java/io/druid/query/aggregation/TimestampMinMaxAggregatorTest.java b/extensions-contrib/time-min-max/src/test/java/io/druid/query/aggregation/TimestampMinMaxAggregatorTest.java
index b74f56ce40c3..340864ab479b 100644
--- a/extensions-contrib/time-min-max/src/test/java/io/druid/query/aggregation/TimestampMinMaxAggregatorTest.java
+++ b/extensions-contrib/time-min-max/src/test/java/io/druid/query/aggregation/TimestampMinMaxAggregatorTest.java
@@ -112,6 +112,7 @@ public void configure(Binder binder)
{
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test");
binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0);
+ binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1);
}
},
new TimestampMinMaxModule()
diff --git a/extensions-core/caffeine-cache/src/test/java/io/druid/client/cache/CaffeineCacheTest.java b/extensions-core/caffeine-cache/src/test/java/io/druid/client/cache/CaffeineCacheTest.java
index b842c4a34b09..2605673ba20c 100644
--- a/extensions-core/caffeine-cache/src/test/java/io/druid/client/cache/CaffeineCacheTest.java
+++ b/extensions-core/caffeine-cache/src/test/java/io/druid/client/cache/CaffeineCacheTest.java
@@ -76,6 +76,7 @@ public void testBasicInjection() throws Exception
binder -> {
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("druid/test/redis");
binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0);
+ binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1);
binder.bind(CaffeineCacheConfig.class).toInstance(config);
binder.bind(Cache.class).toProvider(CaffeineCacheProviderWithConfig.class).in(ManageLifecycle.class);
@@ -103,6 +104,7 @@ public void testSimpleInjection()
binder -> {
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("druid/test/redis");
binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0);
+ binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1);
binder.bind(Cache.class).toProvider(CacheProvider.class);
JsonConfigProvider.bind(binder, uuid, CacheProvider.class);
@@ -387,6 +389,7 @@ public void testFromProperties()
binder -> {
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("druid/test");
binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0);
+ binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1);
JsonConfigProvider.bind(binder, keyPrefix, CaffeineCacheConfig.class);
}
)
@@ -417,6 +420,7 @@ public void testMixedCaseFromProperties()
binder -> {
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("druid/test");
binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0);
+ binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1);
JsonConfigProvider.bind(binder, keyPrefix, CaffeineCacheConfig.class);
}
)
@@ -444,6 +448,7 @@ public void testDefaultFromProperties()
binder -> {
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("druid/test");
binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0);
+ binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1);
JsonConfigProvider.bind(binder, keyPrefix, CaffeineCacheConfig.class);
}
)
diff --git a/extensions-core/kafka-extraction-namespace/src/test/java/io/druid/query/lookup/TestKafkaExtractionCluster.java b/extensions-core/kafka-extraction-namespace/src/test/java/io/druid/query/lookup/TestKafkaExtractionCluster.java
index 96c1970f773f..ca7b94a2fc05 100644
--- a/extensions-core/kafka-extraction-namespace/src/test/java/io/druid/query/lookup/TestKafkaExtractionCluster.java
+++ b/extensions-core/kafka-extraction-namespace/src/test/java/io/druid/query/lookup/TestKafkaExtractionCluster.java
@@ -248,6 +248,7 @@ public void configure(Binder binder)
{
binder.bindConstant().annotatedWith(Names.named("serviceName")).to("test");
binder.bindConstant().annotatedWith(Names.named("servicePort")).to(0);
+ binder.bindConstant().annotatedWith(Names.named("tlsServicePort")).to(-1);
}
},
// These injections fail under IntelliJ but are required for maven
diff --git a/extensions-core/kafka-indexing-service/src/main/java/io/druid/indexing/kafka/KafkaIndexTaskClient.java b/extensions-core/kafka-indexing-service/src/main/java/io/druid/indexing/kafka/KafkaIndexTaskClient.java
index db1618bf1f02..d87d47bfc2f1 100644
--- a/extensions-core/kafka-indexing-service/src/main/java/io/druid/indexing/kafka/KafkaIndexTaskClient.java
+++ b/extensions-core/kafka-indexing-service/src/main/java/io/druid/indexing/kafka/KafkaIndexTaskClient.java
@@ -182,7 +182,9 @@ public Map pause(final String id, final long timeout)
if (response.getStatus().equals(HttpResponseStatus.OK)) {
log.info("Task [%s] paused successfully", id);
- return jsonMapper.readValue(response.getContent(), new TypeReference