This is an automated email from the ASF dual-hosted git repository.
kfaraz 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 ffcb996468 Cleanup changes pulled out of PR #12368 (#12672)
ffcb996468 is described below
commit ffcb996468c343450258f90bd88a6b55aae4ef59
Author: Paul Rogers <[email protected]>
AuthorDate: Thu Jun 23 10:49:50 2022 -0700
Cleanup changes pulled out of PR #12368 (#12672)
This commit contains the cleanup needed for the new integration test
framework.
Changes:
- Fix log lines, misspellings, docs, etc.
- Allow the use of some of Druid's "JSON config" objects in tests
- Fix minor bug in `BaseNodeRoleWatcher`
---
.gitignore | 7 ++-
.travis.yml | 6 +-
.../org/apache/druid/guice/LifecycleModule.java | 2 +-
.../metadata/MetadataStorageConnectorConfig.java | 25 +++++++++
.../MetadataStorageConnectorConfigTest.java | 17 ++++++
distribution/docker/druid.sh | 4 +-
.../metadata/storage/mysql/MySQLConnector.java | 20 ++++---
.../storage/mysql/MySQLConnectorDriverConfig.java | 14 ++++-
.../mysql/MySQLConnectorDriverConfigTest.java | 11 ++++
.../FilteredHttpServerInventoryViewProvider.java | 8 +--
.../org/apache/druid/curator/CuratorConfig.java | 9 +++
.../org/apache/druid/curator/CuratorModule.java | 64 ++++++++++++++--------
.../org/apache/druid/curator/ExhibitorConfig.java | 12 +++-
.../apache/druid/curator/ZkEnablementConfig.java | 2 +-
.../curator/cache/PathChildrenCacheFactory.java | 14 +----
.../CuratorDruidNodeDiscoveryProvider.java | 4 +-
.../druid/discovery/BaseNodeRoleWatcher.java | 25 +++++----
.../apache/druid/discovery/DiscoveryDruidNode.java | 2 +-
.../druid/initialization/Initialization.java | 4 +-
.../druid/metadata/SQLMetadataConnector.java | 15 +++--
.../metadata/SegmentsMetadataManagerConfig.java | 2 +
.../apache/druid/curator/CuratorConfigTest.java | 19 +++++++
.../apache/druid/curator/CuratorModuleTest.java | 8 +--
.../org/apache/druid/curator/CuratorTestBase.java | 1 -
.../java/org/apache/druid/cli/CliCoordinator.java | 2 +-
.../java/org/apache/druid/cli/GuiceRunnable.java | 5 ++
.../druid/sql/calcite/schema/SystemSchema.java | 2 +-
27 files changed, 217 insertions(+), 87 deletions(-)
diff --git a/.gitignore b/.gitignore
index d92e548ba4..53d3303bf9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,7 @@ target
.settings/
.vscode
*.log
-*.DS_Store
+.DS_Store
_site
dependency-reduced-pom.xml
LICENSE.BINARY
@@ -21,7 +21,8 @@ NOTICE.BINARY
README.BINARY
README
*.lock
-**/.pmd
-**/.pmdruleset.xml
+.pmd
+.pmdruleset.xml
.java-version
integration-tests/gen-scripts/
+bin/
diff --git a/.travis.yml b/.travis.yml
index 39de33ee9b..709c408a47 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -34,8 +34,8 @@ env:
- DOCKER_IP=127.0.0.1 # for integration tests
- MVN="mvn -B"
- > # Various options to make execution of maven goals faster (e.g., mvn
install)
- MAVEN_SKIP="-Pskip-static-checks -Ddruid.console.skip=true
-Dmaven.javadoc.skip=true"
- - MAVEN_SKIP_TESTS="-Pskip-tests"
+ MAVEN_SKIP="-P skip-static-checks -Ddruid.console.skip=true
-Dmaven.javadoc.skip=true"
+ - MAVEN_SKIP_TESTS="-P skip-tests"
addons:
apt:
@@ -46,7 +46,7 @@ addons:
# Add various options to make 'mvn install' fast and skip javascript compile
(-Ddruid.console.skip=true) since it is not
# needed. Depending on network speeds, "mvn -q install" may take longer than
the default 10 minute timeout to print any
# output. To compensate, use travis_wait to extend the timeout.
-install: ./check_test_suite.py && travis_terminate 0 || echo 'Running maven
install...' && MAVEN_OPTS='-Xmx3000m' travis_wait 15 ${MVN} clean install -q
-ff -pl '!distribution' ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS} -T1C && ${MVN}
install -q -ff -pl 'distribution' ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS}
+install: ./check_test_suite.py && travis_terminate 0 || echo 'Running Maven
install...' && MAVEN_OPTS='-Xmx3000m' travis_wait 15 ${MVN} clean install -q
-ff -pl '!distribution' ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS} -T1C && ${MVN}
install -q -ff -pl 'distribution' ${MAVEN_SKIP} ${MAVEN_SKIP_TESTS}
# There are 3 stages of tests
# 1. Tests - phase 1
diff --git a/core/src/main/java/org/apache/druid/guice/LifecycleModule.java
b/core/src/main/java/org/apache/druid/guice/LifecycleModule.java
index 695b5ee3c2..c411526b91 100644
--- a/core/src/main/java/org/apache/druid/guice/LifecycleModule.java
+++ b/core/src/main/java/org/apache/druid/guice/LifecycleModule.java
@@ -61,7 +61,7 @@ public class LifecycleModule implements Module
* is materialized and injected, meaning that objects are not actually
instantiated in dependency order.
* Registering with the LifecyceModule, on the other hand, will instantiate
the objects after the normal object
* graph has already been instantiated, meaning that objects will be created
in dependency order and this will
- * only actually instantiate something that wasn't actually dependend upon.
+ * only actually instantiate something that wasn't actually depended upon.
*
* @param clazz the class to instantiate
* @return this, for chaining.
diff --git
a/core/src/main/java/org/apache/druid/metadata/MetadataStorageConnectorConfig.java
b/core/src/main/java/org/apache/druid/metadata/MetadataStorageConnectorConfig.java
index c9850096ec..512cd57d89 100644
---
a/core/src/main/java/org/apache/druid/metadata/MetadataStorageConnectorConfig.java
+++
b/core/src/main/java/org/apache/druid/metadata/MetadataStorageConnectorConfig.java
@@ -22,6 +22,7 @@ package org.apache.druid.metadata;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.apache.druid.java.util.common.StringUtils;
+import java.util.Map;
import java.util.Properties;
/**
@@ -49,6 +50,30 @@ public class MetadataStorageConnectorConfig
@JsonProperty("dbcp")
private Properties dbcpProperties;
+ public static MetadataStorageConnectorConfig create(
+ String connectUri,
+ String user,
+ String password,
+ Map<String, Object> properties
+ )
+ {
+ MetadataStorageConnectorConfig config = new
MetadataStorageConnectorConfig();
+ if (connectUri != null) {
+ config.connectURI = connectUri;
+ }
+ if (user != null) {
+ config.user = user;
+ }
+ if (password != null) {
+ config.passwordProvider = () -> password;
+ }
+ if (properties != null) {
+ config.dbcpProperties = new Properties();
+ config.dbcpProperties.putAll(properties);
+ }
+ return config;
+ }
+
@JsonProperty
public boolean isCreateTables()
{
diff --git
a/core/src/test/java/org/apache/druid/metadata/MetadataStorageConnectorConfigTest.java
b/core/src/test/java/org/apache/druid/metadata/MetadataStorageConnectorConfigTest.java
index c5e401ebb7..03a10c9540 100644
---
a/core/src/test/java/org/apache/druid/metadata/MetadataStorageConnectorConfigTest.java
+++
b/core/src/test/java/org/apache/druid/metadata/MetadataStorageConnectorConfigTest.java
@@ -20,10 +20,12 @@
package org.apache.druid.metadata;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableMap;
import org.junit.Assert;
import org.junit.Test;
import java.io.IOException;
+import java.util.Map;
import java.util.Properties;
public class MetadataStorageConnectorConfigTest
@@ -187,4 +189,19 @@ public class MetadataStorageConnectorConfigTest
Assert.assertEquals(dbcpProperties.getProperty("maxConnLifetimeMillis"),
"1200000");
Assert.assertEquals(dbcpProperties.getProperty("defaultQueryTimeout"),
"30000");
}
+
+ @Test
+ public void testCreate()
+ {
+ Map<String, Object> props = ImmutableMap.of("key", "value");
+ MetadataStorageConnectorConfig config =
MetadataStorageConnectorConfig.create(
+ "connectURI",
+ "user",
+ "pwd",
+ props);
+ Assert.assertEquals("connectURI", config.getConnectURI());
+ Assert.assertEquals("user", config.getUser());
+ Assert.assertEquals("pwd", config.getPassword());
+ Assert.assertEquals(1, config.getDbcpProperties().size());
+ }
}
diff --git a/distribution/docker/druid.sh b/distribution/docker/druid.sh
index ec4f9b434a..ec6387c477 100755
--- a/distribution/docker/druid.sh
+++ b/distribution/docker/druid.sh
@@ -20,11 +20,11 @@
#
# NOTE: this is a 'run' script for the stock tarball
-# It takes 1 required argument (the name of the service,
+# It takes one required argument (the name of the service,
# e.g. 'broker', 'historical' etc). Any additional arguments
# are passed to that service.
#
-# It accepts 'JAVA_OPTS' as an environment variable
+# This script accepts JAVA_OPTS as an environment variable
#
# Additional env vars:
# - DRUID_LOG4J -- set the entire log4j.xml verbatim
diff --git
a/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java
b/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java
index 46e1033124..78c6826ba8 100644
---
a/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java
+++
b/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnector.java
@@ -61,19 +61,24 @@ public class MySQLConnector extends SQLMetadataConnector
)
{
super(config, dbTables);
- log.info("Loading \"MySQL\" metadata connector driver %s",
driverConfig.getDriverClassName());
- tryLoadDriverClass(driverConfig.getDriverClassName(), true);
+ this.dbi = createDBI(config.get(), driverConfig, connectorSslConfig,
getValidationQuery());
if (driverConfig.getDriverClassName().contains("mysql")) {
myTransientExceptionClass =
tryLoadDriverClass(MYSQL_TRANSIENT_EXCEPTION_CLASS_NAME, false);
} else {
myTransientExceptionClass = null;
}
+ }
+
+ public static DBI createDBI(MetadataStorageConnectorConfig config,
MySQLConnectorDriverConfig driverConfig, MySQLConnectorSslConfig
connectorSslConfig, String validationQuery)
+ {
+ log.info("Loading \"MySQL\" metadata connector driver %s",
driverConfig.getDriverClassName());
+ tryLoadDriverClass(driverConfig.getDriverClassName(), true);
- final BasicDataSource datasource = getDatasource();
+ final BasicDataSource datasource = makeDatasource(config, validationQuery);
// MySQL driver is classloader isolated as part of the extension
// so we need to help JDBC find the driver
- datasource.setDriverClassLoader(getClass().getClassLoader());
+ datasource.setDriverClassLoader(MySQLConnector.class.getClassLoader());
datasource.setDriverClassName(driverConfig.getDriverClassName());
datasource.addConnectionProperty("useSSL",
String.valueOf(connectorSslConfig.isUseSSL()));
if (connectorSslConfig.isUseSSL()) {
@@ -141,9 +146,10 @@ public class MySQLConnector extends SQLMetadataConnector
// use double-quotes for quoting columns, so we can write SQL that works
with most databases
datasource.setConnectionInitSqls(ImmutableList.of("SET
sql_mode='ANSI_QUOTES'"));
- this.dbi = new DBI(datasource);
+ DBI dbi = new DBI(datasource);
log.info("Configured MySQL as metadata storage");
+ return dbi;
}
@Override
@@ -252,10 +258,10 @@ public class MySQLConnector extends SQLMetadataConnector
}
@Nullable
- private Class<?> tryLoadDriverClass(String className, boolean failIfNotFound)
+ private static Class<?> tryLoadDriverClass(String className, boolean
failIfNotFound)
{
try {
- return Class.forName(className, false, getClass().getClassLoader());
+ return Class.forName(className, false,
MySQLConnector.class.getClassLoader());
}
catch (ClassNotFoundException e) {
if (failIfNotFound) {
diff --git
a/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnectorDriverConfig.java
b/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnectorDriverConfig.java
index 0f6fa03245..fba20bea1f 100644
---
a/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnectorDriverConfig.java
+++
b/extensions-core/mysql-metadata-storage/src/main/java/org/apache/druid/metadata/storage/mysql/MySQLConnectorDriverConfig.java
@@ -20,13 +20,25 @@
package org.apache.druid.metadata.storage.mysql;
import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Strings;
import java.util.Objects;
public class MySQLConnectorDriverConfig
{
+ public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
+
@JsonProperty
- private String driverClassName = "com.mysql.jdbc.Driver";
+ private String driverClassName = MYSQL_DRIVER;
+
+ public static MySQLConnectorDriverConfig create(String driverClassName)
+ {
+ MySQLConnectorDriverConfig config = new MySQLConnectorDriverConfig();
+ if (!Strings.isNullOrEmpty(driverClassName)) {
+ config.driverClassName = driverClassName;
+ }
+ return config;
+ }
@JsonProperty
public String getDriverClassName()
diff --git
a/extensions-core/mysql-metadata-storage/src/test/java/org/apache/druid/metadata/storage/mysql/MySQLConnectorDriverConfigTest.java
b/extensions-core/mysql-metadata-storage/src/test/java/org/apache/druid/metadata/storage/mysql/MySQLConnectorDriverConfigTest.java
index c1d2e4e1ae..d86fa6a18d 100644
---
a/extensions-core/mysql-metadata-storage/src/test/java/org/apache/druid/metadata/storage/mysql/MySQLConnectorDriverConfigTest.java
+++
b/extensions-core/mysql-metadata-storage/src/test/java/org/apache/druid/metadata/storage/mysql/MySQLConnectorDriverConfigTest.java
@@ -22,6 +22,8 @@ package org.apache.druid.metadata.storage.mysql;
import nl.jqno.equalsverifier.EqualsVerifier;
import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+
public class MySQLConnectorDriverConfigTest
{
@Test
@@ -33,4 +35,13 @@ public class MySQLConnectorDriverConfigTest
.withNonnullFields("driverClassName")
.verify();
}
+
+ @Test
+ public void testCreate()
+ {
+ MySQLConnectorDriverConfig config =
MySQLConnectorDriverConfig.create(null);
+ assertEquals(MySQLConnectorDriverConfig.MYSQL_DRIVER,
config.getDriverClassName());
+ config = MySQLConnectorDriverConfig.create("myDriver");
+ assertEquals("myDriver", config.getDriverClassName());
+ }
}
diff --git
a/server/src/main/java/org/apache/druid/client/FilteredHttpServerInventoryViewProvider.java
b/server/src/main/java/org/apache/druid/client/FilteredHttpServerInventoryViewProvider.java
index c614a6aeae..bce9c562f6 100644
---
a/server/src/main/java/org/apache/druid/client/FilteredHttpServerInventoryViewProvider.java
+++
b/server/src/main/java/org/apache/druid/client/FilteredHttpServerInventoryViewProvider.java
@@ -36,20 +36,20 @@ public class FilteredHttpServerInventoryViewProvider
implements FilteredServerIn
@JacksonInject
@NotNull
@EscalatedClient
- HttpClient httpClient = null;
+ HttpClient httpClient;
@JacksonInject
@NotNull
@Smile
- ObjectMapper smileMapper = null;
+ ObjectMapper smileMapper;
@JacksonInject
@NotNull
- HttpServerInventoryViewConfig config = null;
+ HttpServerInventoryViewConfig config;
@JacksonInject
@NotNull
- private DruidNodeDiscoveryProvider druidNodeDiscoveryProvider = null;
+ private DruidNodeDiscoveryProvider druidNodeDiscoveryProvider;
@Override
public HttpServerInventoryView get()
diff --git a/server/src/main/java/org/apache/druid/curator/CuratorConfig.java
b/server/src/main/java/org/apache/druid/curator/CuratorConfig.java
index d6325233c2..68ce0812de 100644
--- a/server/src/main/java/org/apache/druid/curator/CuratorConfig.java
+++ b/server/src/main/java/org/apache/druid/curator/CuratorConfig.java
@@ -28,6 +28,8 @@ import javax.validation.constraints.Min;
public class CuratorConfig
{
+ public static final String CONFIG_PREFIX = "druid.zk.service";
+
static final String HOST = "host";
@JsonProperty(HOST)
private String zkHosts = "localhost";
@@ -56,6 +58,13 @@ public class CuratorConfig
@JsonProperty("authScheme")
private String authScheme = "digest";
+ public static CuratorConfig create(String hosts)
+ {
+ CuratorConfig config = new CuratorConfig();
+ config.zkHosts = hosts;
+ return config;
+ }
+
public String getZkHosts()
{
return zkHosts;
diff --git a/server/src/main/java/org/apache/druid/curator/CuratorModule.java
b/server/src/main/java/org/apache/druid/curator/CuratorModule.java
index 093265ea64..a7af692088 100644
--- a/server/src/main/java/org/apache/druid/curator/CuratorModule.java
+++ b/server/src/main/java/org/apache/druid/curator/CuratorModule.java
@@ -22,7 +22,6 @@ package org.apache.druid.curator;
import com.google.inject.Binder;
import com.google.inject.Module;
import com.google.inject.Provides;
-import io.netty.util.SuppressForbidden;
import org.apache.curator.RetryPolicy;
import org.apache.curator.ensemble.EnsembleProvider;
import org.apache.curator.ensemble.exhibitor.DefaultExhibitorRestClient;
@@ -48,35 +47,26 @@ import java.util.List;
public class CuratorModule implements Module
{
- static final String CURATOR_CONFIG_PREFIX = "druid.zk.service";
-
- static final String EXHIBITOR_CONFIG_PREFIX = "druid.exhibitor.service";
+ private static final Logger log = new Logger(CuratorModule.class);
private static final int BASE_SLEEP_TIME_MS = 1000;
-
private static final int MAX_SLEEP_TIME_MS = 45000;
-
private static final int MAX_RETRIES = 29;
- private static final Logger log = new Logger(CuratorModule.class);
-
@Override
public void configure(Binder binder)
{
- JsonConfigProvider.bind(binder, CURATOR_CONFIG_PREFIX,
ZkEnablementConfig.class);
- JsonConfigProvider.bind(binder, CURATOR_CONFIG_PREFIX,
CuratorConfig.class);
- JsonConfigProvider.bind(binder, EXHIBITOR_CONFIG_PREFIX,
ExhibitorConfig.class);
+ JsonConfigProvider.bind(binder, CuratorConfig.CONFIG_PREFIX,
ZkEnablementConfig.class);
+ JsonConfigProvider.bind(binder, CuratorConfig.CONFIG_PREFIX,
CuratorConfig.class);
+ JsonConfigProvider.bind(binder, ExhibitorConfig.CONFIG_PREFIX,
ExhibitorConfig.class);
}
- @Provides
- @LazySingleton
- @SuppressForbidden(reason = "System#err")
- public CuratorFramework makeCurator(ZkEnablementConfig zkEnablementConfig,
CuratorConfig config, EnsembleProvider ensembleProvider, Lifecycle lifecycle)
+ /**
+ * Create the Curator framework outside of Guice given the ZK config.
+ * Primarily for tests.
+ */
+ public static CuratorFramework createCurator(CuratorConfig config,
EnsembleProvider ensembleProvider)
{
- if (!zkEnablementConfig.isEnabled()) {
- throw new RuntimeException("Zookeeper is disabled, Can't create
CuratorFramework.");
- }
-
final CuratorFrameworkFactory.Builder builder =
CuratorFrameworkFactory.builder();
if (!Strings.isNullOrEmpty(config.getZkUser()) &&
!Strings.isNullOrEmpty(config.getZkPwd())) {
builder.authorization(
@@ -87,7 +77,7 @@ public class CuratorModule implements Module
RetryPolicy retryPolicy = new
BoundedExponentialBackoffRetry(BASE_SLEEP_TIME_MS, MAX_SLEEP_TIME_MS,
MAX_RETRIES);
- final CuratorFramework framework = builder
+ return builder
.ensembleProvider(ensembleProvider)
.sessionTimeoutMs(config.getZkSessionTimeoutMs())
.connectionTimeoutMs(config.getZkConnectionTimeoutMs())
@@ -95,6 +85,20 @@ public class CuratorModule implements Module
.compressionProvider(new
PotentiallyGzippedCompressionProvider(config.getEnableCompression()))
.aclProvider(config.getEnableAcl() ? new SecuredACLProvider() : new
DefaultACLProvider())
.build();
+ }
+
+ /**
+ * Provide the Curator framework via Guice, integrated with the Druid
lifecycle.
+ */
+ @Provides
+ @LazySingleton
+ public CuratorFramework makeCurator(ZkEnablementConfig zkEnablementConfig,
CuratorConfig config, EnsembleProvider ensembleProvider, Lifecycle lifecycle)
+ {
+ if (!zkEnablementConfig.isEnabled()) {
+ throw new RuntimeException("Zookeeper is disabled, cannot create
CuratorFramework.");
+ }
+
+ final CuratorFramework framework = createCurator(config, ensembleProvider);
framework.getUnhandledErrorListenable().addListener((message, e) -> {
log.error(e, "Unhandled error in Curator, stopping server.");
@@ -123,9 +127,11 @@ public class CuratorModule implements Module
return framework;
}
- @Provides
- @LazySingleton
- public EnsembleProvider makeEnsembleProvider(CuratorConfig config,
ExhibitorConfig exConfig)
+ /**
+ * Create an EnsembleProvider given the related configurations. Primarily
for tests
+ * which do not use Guice to do the work.
+ */
+ public static EnsembleProvider createEnsembleProvider(CuratorConfig config,
ExhibitorConfig exConfig)
{
if (exConfig.getHosts().isEmpty()) {
return new FixedEnsembleProvider(config.getZkHosts());
@@ -155,7 +161,17 @@ public class CuratorModule implements Module
};
}
- private Exhibitors.BackupConnectionStringProvider newBackupProvider(final
String zkHosts)
+ /**
+ * Provide an EnsembleProvider via Guice configuration.
+ */
+ @Provides
+ @LazySingleton
+ public EnsembleProvider makeEnsembleProvider(CuratorConfig config,
ExhibitorConfig exConfig)
+ {
+ return createEnsembleProvider(config, exConfig);
+ }
+
+ private static Exhibitors.BackupConnectionStringProvider
newBackupProvider(final String zkHosts)
{
return () -> zkHosts;
}
diff --git a/server/src/main/java/org/apache/druid/curator/ExhibitorConfig.java
b/server/src/main/java/org/apache/druid/curator/ExhibitorConfig.java
index df6640a101..97e7bb74df 100644
--- a/server/src/main/java/org/apache/druid/curator/ExhibitorConfig.java
+++ b/server/src/main/java/org/apache/druid/curator/ExhibitorConfig.java
@@ -30,6 +30,8 @@ import java.util.List;
*/
public class ExhibitorConfig
{
+ static final String CONFIG_PREFIX = "druid.exhibitor.service";
+
@JsonProperty
private List<String> hosts = new ArrayList<>();
@@ -48,6 +50,15 @@ public class ExhibitorConfig
@Min(0)
private int pollingMs = 10000;
+ public static ExhibitorConfig create(List<String> hosts)
+ {
+ ExhibitorConfig config = new ExhibitorConfig();
+ if (hosts != null) {
+ config.hosts = hosts;
+ }
+ return config;
+ }
+
public List<String> getHosts()
{
return hosts;
@@ -72,5 +83,4 @@ public class ExhibitorConfig
{
return pollingMs;
}
-
}
diff --git
a/server/src/main/java/org/apache/druid/curator/ZkEnablementConfig.java
b/server/src/main/java/org/apache/druid/curator/ZkEnablementConfig.java
index 8553509ecb..0e4eb31785 100644
--- a/server/src/main/java/org/apache/druid/curator/ZkEnablementConfig.java
+++ b/server/src/main/java/org/apache/druid/curator/ZkEnablementConfig.java
@@ -27,7 +27,7 @@ import java.util.Properties;
public class ZkEnablementConfig
{
- private static final String PROP_KEY_ENABLED =
StringUtils.format("%s.enabled", CuratorModule.CURATOR_CONFIG_PREFIX);
+ private static final String PROP_KEY_ENABLED =
StringUtils.format("%s.enabled", CuratorConfig.CONFIG_PREFIX);
public static final ZkEnablementConfig ENABLED = new
ZkEnablementConfig(true);
diff --git
a/server/src/main/java/org/apache/druid/curator/cache/PathChildrenCacheFactory.java
b/server/src/main/java/org/apache/druid/curator/cache/PathChildrenCacheFactory.java
index 5782174a47..076bbdf688 100644
---
a/server/src/main/java/org/apache/druid/curator/cache/PathChildrenCacheFactory.java
+++
b/server/src/main/java/org/apache/druid/curator/cache/PathChildrenCacheFactory.java
@@ -65,18 +65,10 @@ public class PathChildrenCacheFactory
{
private static final ThreadFactory DEFAULT_THREAD_FACTORY =
ThreadUtils.newThreadFactory("PathChildrenCache");
- private boolean cacheData;
- private boolean compressed;
+ private boolean cacheData = true;
+ private boolean compressed = false;
private ExecutorService exec;
- private boolean shutdownExecutorOnClose;
-
- public Builder()
- {
- cacheData = true;
- compressed = false;
- exec = null;
- shutdownExecutorOnClose = true;
- }
+ private boolean shutdownExecutorOnClose = true;
public Builder withCacheData(boolean cacheData)
{
diff --git
a/server/src/main/java/org/apache/druid/curator/discovery/CuratorDruidNodeDiscoveryProvider.java
b/server/src/main/java/org/apache/druid/curator/discovery/CuratorDruidNodeDiscoveryProvider.java
index 4639a6c517..e450040043 100644
---
a/server/src/main/java/org/apache/druid/curator/discovery/CuratorDruidNodeDiscoveryProvider.java
+++
b/server/src/main/java/org/apache/druid/curator/discovery/CuratorDruidNodeDiscoveryProvider.java
@@ -246,12 +246,12 @@ public class CuratorDruidNodeDiscoveryProvider extends
DruidNodeDiscoveryProvide
break;
}
default: {
- log.warn("Ignored event type[%s] for node watcher of role[%s].",
event.getType(), nodeRole.getJsonName());
+ log.warn("Ignored event type [%s] for node watcher of role
[%s].", event.getType(), nodeRole.getJsonName());
}
}
}
catch (Exception ex) {
- log.error(ex, "Unknown error in node watcher of role[%s].",
nodeRole.getJsonName());
+ log.error(ex, "Unknown error in node watcher of role [%s].",
nodeRole.getJsonName());
}
}
}
diff --git
a/server/src/main/java/org/apache/druid/discovery/BaseNodeRoleWatcher.java
b/server/src/main/java/org/apache/druid/discovery/BaseNodeRoleWatcher.java
index 793293a9aa..e5c92d72dd 100644
--- a/server/src/main/java/org/apache/druid/discovery/BaseNodeRoleWatcher.java
+++ b/server/src/main/java/org/apache/druid/discovery/BaseNodeRoleWatcher.java
@@ -120,7 +120,7 @@ public class BaseNodeRoleWatcher
synchronized (lock) {
if (!nodeRole.equals(druidNode.getNodeRole())) {
LOGGER.error(
- "Node[%s] of role[%s] addition ignored due to mismatched role
(expected role[%s]).",
+ "Node [%s] of role [%s] addition ignored due to mismatched role
(expected role [%s]).",
druidNode.getDruidNode().getUriToUse(),
druidNode.getNodeRole().getJsonName(),
nodeRole.getJsonName()
@@ -128,7 +128,7 @@ public class BaseNodeRoleWatcher
return;
}
- LOGGER.info("Node[%s] of role[%s] detected.",
druidNode.getDruidNode().getUriToUse(), nodeRole.getJsonName());
+ LOGGER.info("Node [%s] of role [%s] detected.",
druidNode.getDruidNode().getUriToUse(), nodeRole.getJsonName());
addNode(druidNode);
}
@@ -153,7 +153,7 @@ public class BaseNodeRoleWatcher
}
} else {
LOGGER.error(
- "Node[%s] of role[%s] discovered but existed already [%s].",
+ "Node [%s] of role [%s] discovered but existed already [%s].",
druidNode.getDruidNode().getUriToUse(),
nodeRole.getJsonName(),
prev
@@ -166,7 +166,7 @@ public class BaseNodeRoleWatcher
synchronized (lock) {
if (!nodeRole.equals(druidNode.getNodeRole())) {
LOGGER.error(
- "Node[%s] of role[%s] removal ignored due to mismatched role
(expected role[%s]).",
+ "Node [%s] of role [%s] removal ignored due to mismatched role
(expected role [%s]).",
druidNode.getDruidNode().getUriToUse(),
druidNode.getNodeRole().getJsonName(),
nodeRole.getJsonName()
@@ -174,7 +174,7 @@ public class BaseNodeRoleWatcher
return;
}
- LOGGER.info("Node[%s] of role[%s] went offline.",
druidNode.getDruidNode().getUriToUse(), nodeRole.getJsonName());
+ LOGGER.info("Node [%s] of role [%s] went offline.",
druidNode.getDruidNode().getUriToUse(), nodeRole.getJsonName());
removeNode(druidNode);
}
@@ -187,7 +187,7 @@ public class BaseNodeRoleWatcher
if (prev == null) {
LOGGER.error(
- "Noticed disappearance of unknown druid node [%s] of role[%s].",
+ "Noticed disappearance of unknown druid node [%s] of role [%s].",
druidNode.getDruidNode().getUriToUse(),
druidNode.getNodeRole().getJsonName()
);
@@ -200,7 +200,7 @@ public class BaseNodeRoleWatcher
for (DruidNodeDiscovery.Listener listener : nodeListeners) {
safeSchedule(
() -> listener.nodesRemoved(nodeRemoved),
- "Exception occured in nodeRemoved(node[%s] of role[%s]) in
listener [%s].",
+ "Exception occured in nodeRemoved(node [%s] of role [%s]) in
listener [%s].",
druidNode.getDruidNode().getUriToUse(),
druidNode.getNodeRole().getJsonName(),
listener
@@ -219,12 +219,15 @@ public class BaseNodeRoleWatcher
return;
}
- LOGGER.info("Node watcher of role[%s] is now initialized.",
nodeRole.getJsonName());
+ // It is important to take a snapshot here as list of nodes might change
by the time listeners process
+ // the changes.
+ List<DiscoveryDruidNode> currNodes = Lists.newArrayList(nodes.values());
+ LOGGER.info(
+ "Node watcher of role [%s] is now initialized with %d nodes.",
+ nodeRole.getJsonName(),
+ currNodes.size());
for (DruidNodeDiscovery.Listener listener : nodeListeners) {
- // It is important to take a snapshot here as list of nodes might
change by the time listeners process
- // the changes.
- List<DiscoveryDruidNode> currNodes =
Lists.newArrayList(nodes.values());
safeSchedule(
() -> {
listener.nodesAdded(currNodes);
diff --git
a/server/src/main/java/org/apache/druid/discovery/DiscoveryDruidNode.java
b/server/src/main/java/org/apache/druid/discovery/DiscoveryDruidNode.java
index 5b65e74236..17be440c83 100644
--- a/server/src/main/java/org/apache/druid/discovery/DiscoveryDruidNode.java
+++ b/server/src/main/java/org/apache/druid/discovery/DiscoveryDruidNode.java
@@ -51,7 +51,7 @@ public class DiscoveryDruidNode
/**
* Map of service name -> DruidServices.
- * This map has only the DruidServices that is understandable.
+ * This map has only the DruidServices that are understandable.
* It means, if there is some DruidService not understandable found while
converting rawServices to services,
* that DruidService will be ignored and not stored in this map.
*
diff --git
a/server/src/main/java/org/apache/druid/initialization/Initialization.java
b/server/src/main/java/org/apache/druid/initialization/Initialization.java
index 2db0993259..e9672795fa 100644
--- a/server/src/main/java/org/apache/druid/initialization/Initialization.java
+++ b/server/src/main/java/org/apache/druid/initialization/Initialization.java
@@ -449,7 +449,7 @@ public class Initialization
return
Guice.createInjector(Modules.override(intermediateModules).with(extensionModules.getModules()));
}
- private static class ModuleList
+ public static class ModuleList
{
private final Injector baseInjector;
private final Set<NodeRole> nodeRoles;
@@ -468,7 +468,7 @@ public class Initialization
this.modules = new ArrayList<>();
}
- private List<Module> getModules()
+ public List<Module> getModules()
{
return Collections.unmodifiableList(modules);
}
diff --git
a/server/src/main/java/org/apache/druid/metadata/SQLMetadataConnector.java
b/server/src/main/java/org/apache/druid/metadata/SQLMetadataConnector.java
index 781a4b99c8..2e24f97aa1 100644
--- a/server/src/main/java/org/apache/druid/metadata/SQLMetadataConnector.java
+++ b/server/src/main/java/org/apache/druid/metadata/SQLMetadataConnector.java
@@ -193,14 +193,14 @@ public abstract class SQLMetadataConnector implements
MetadataStorageConnector
public Void withHandle(Handle handle)
{
if (!tableExists(handle, tableName)) {
- log.info("Creating table[%s]", tableName);
+ log.info("Creating table [%s]", tableName);
final Batch batch = handle.createBatch();
for (String s : sql) {
batch.add(s);
}
batch.execute();
} else {
- log.info("Table[%s] already exists", tableName);
+ log.info("Table [%s] already exists", tableName);
}
return null;
}
@@ -702,10 +702,8 @@ public abstract class SQLMetadataConnector implements
MetadataStorageConnector
return config.get();
}
- protected BasicDataSource getDatasource()
+ protected static BasicDataSource
makeDatasource(MetadataStorageConnectorConfig connectorConfig, String
validationQuery)
{
- MetadataStorageConnectorConfig connectorConfig = getConfig();
-
BasicDataSource dataSource;
try {
@@ -725,12 +723,17 @@ public abstract class SQLMetadataConnector implements
MetadataStorageConnector
String uri = connectorConfig.getConnectURI();
dataSource.setUrl(uri);
- dataSource.setValidationQuery(getValidationQuery());
+ dataSource.setValidationQuery(validationQuery);
dataSource.setTestOnBorrow(true);
return dataSource;
}
+ protected BasicDataSource getDatasource()
+ {
+ return makeDatasource(getConfig(), getValidationQuery());
+ }
+
protected final <T> T inReadOnlyTransaction(
final TransactionCallback<T> callback
)
diff --git
a/server/src/main/java/org/apache/druid/metadata/SegmentsMetadataManagerConfig.java
b/server/src/main/java/org/apache/druid/metadata/SegmentsMetadataManagerConfig.java
index 5141582a98..89072c64af 100644
---
a/server/src/main/java/org/apache/druid/metadata/SegmentsMetadataManagerConfig.java
+++
b/server/src/main/java/org/apache/druid/metadata/SegmentsMetadataManagerConfig.java
@@ -26,6 +26,8 @@ import org.joda.time.Period;
*/
public class SegmentsMetadataManagerConfig
{
+ public static final String CONFIG_PREFIX = "druid.manager.segments";
+
@JsonProperty
private Period pollDuration = new Period("PT1M");
diff --git
a/server/src/test/java/org/apache/druid/curator/CuratorConfigTest.java
b/server/src/test/java/org/apache/druid/curator/CuratorConfigTest.java
index 55d6833015..ea0617ddda 100644
--- a/server/src/test/java/org/apache/druid/curator/CuratorConfigTest.java
+++ b/server/src/test/java/org/apache/druid/curator/CuratorConfigTest.java
@@ -23,6 +23,8 @@ import org.apache.druid.guice.JsonConfigTesterBase;
import org.junit.Assert;
import org.junit.Test;
+import java.util.Arrays;
+
public class CuratorConfigTest extends JsonConfigTesterBase<CuratorConfig>
{
@Test
@@ -42,4 +44,21 @@ public class CuratorConfigTest extends
JsonConfigTesterBase<CuratorConfig>
Assert.assertEquals("test-zk-pwd", config.getZkPwd());
Assert.assertEquals("auth", config.getAuthScheme());
}
+
+ @Test
+ public void testCreate()
+ {
+ CuratorConfig config = CuratorConfig.create("foo:2181,bar:2181");
+ Assert.assertEquals("foo:2181,bar:2181", config.getZkHosts());
+ Assert.assertEquals(false, config.getEnableAcl());
+ Assert.assertNull(config.getZkUser());
+ Assert.assertEquals("digest", config.getAuthScheme());
+ }
+
+ @Test
+ public void testExhibitorCreate()
+ {
+ ExhibitorConfig config = ExhibitorConfig.create(Arrays.asList("foo:2181",
"bar:2181"));
+ Assert.assertEquals(2, config.getHosts().size());
+ }
}
diff --git
a/server/src/test/java/org/apache/druid/curator/CuratorModuleTest.java
b/server/src/test/java/org/apache/druid/curator/CuratorModuleTest.java
index 18b6b6fc57..461416de02 100644
--- a/server/src/test/java/org/apache/druid/curator/CuratorModuleTest.java
+++ b/server/src/test/java/org/apache/druid/curator/CuratorModuleTest.java
@@ -48,10 +48,10 @@ import java.util.Properties;
public final class CuratorModuleTest
{
- private static final String CURATOR_HOST_KEY =
CuratorModule.CURATOR_CONFIG_PREFIX + "." + CuratorConfig.HOST;
+ private static final String CURATOR_HOST_KEY = CuratorConfig.CONFIG_PREFIX +
"." + CuratorConfig.HOST;
private static final String CURATOR_CONNECTION_TIMEOUT_MS_KEY =
- CuratorModule.CURATOR_CONFIG_PREFIX + "." +
CuratorConfig.CONNECTION_TIMEOUT_MS;
- private static final String EXHIBITOR_HOSTS_KEY =
CuratorModule.EXHIBITOR_CONFIG_PREFIX + ".hosts";
+ CuratorConfig.CONFIG_PREFIX + "." + CuratorConfig.CONNECTION_TIMEOUT_MS;
+ private static final String EXHIBITOR_HOSTS_KEY =
ExhibitorConfig.CONFIG_PREFIX + ".hosts";
@Rule
public final ExpectedSystemExit exit = ExpectedSystemExit.none();
@@ -164,7 +164,7 @@ public final class CuratorModuleTest
public void ignoresDeprecatedCuratorConfigProperties()
{
Properties props = new Properties();
- String deprecatedPropName = CuratorModule.CURATOR_CONFIG_PREFIX +
".terminateDruidProcessOnConnectFail";
+ String deprecatedPropName = CuratorConfig.CONFIG_PREFIX +
".terminateDruidProcessOnConnectFail";
props.setProperty(deprecatedPropName, "true");
Injector injector = newInjector(props);
diff --git a/server/src/test/java/org/apache/druid/curator/CuratorTestBase.java
b/server/src/test/java/org/apache/druid/curator/CuratorTestBase.java
index 7099ff31d8..8bc6e57396 100644
--- a/server/src/test/java/org/apache/druid/curator/CuratorTestBase.java
+++ b/server/src/test/java/org/apache/druid/curator/CuratorTestBase.java
@@ -59,7 +59,6 @@ public class CuratorTestBase
.retryPolicy(new RetryOneTime(1))
.compressionProvider(new PotentiallyGzippedCompressionProvider(true))
.build();
-
}
protected void setupZNodeForServer(DruidServer server, ZkPathsConfig
zkPathsConfig, ObjectMapper jsonMapper)
diff --git a/services/src/main/java/org/apache/druid/cli/CliCoordinator.java
b/services/src/main/java/org/apache/druid/cli/CliCoordinator.java
index 1be25d4e80..ea363696b4 100644
--- a/services/src/main/java/org/apache/druid/cli/CliCoordinator.java
+++ b/services/src/main/java/org/apache/druid/cli/CliCoordinator.java
@@ -186,7 +186,7 @@ public class CliCoordinator extends ServerRunnable
binder.bind(MetadataStorage.class).toProvider(MetadataStorageProvider.class);
- JsonConfigProvider.bind(binder, "druid.manager.segments",
SegmentsMetadataManagerConfig.class);
+ JsonConfigProvider.bind(binder,
SegmentsMetadataManagerConfig.CONFIG_PREFIX,
SegmentsMetadataManagerConfig.class);
JsonConfigProvider.bind(binder, "druid.manager.rules",
MetadataRuleManagerConfig.class);
JsonConfigProvider.bind(binder, "druid.manager.lookups",
LookupCoordinatorManagerConfig.class);
JsonConfigProvider.bind(binder, "druid.coordinator.balancer",
BalancerStrategyFactory.class);
diff --git a/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java
b/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java
index 30e4bdb281..a790bf0967 100644
--- a/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java
+++ b/services/src/main/java/org/apache/druid/cli/GuiceRunnable.java
@@ -124,6 +124,11 @@ public abstract class GuiceRunnable implements Runnable
}
public Lifecycle initLifecycle(Injector injector)
+ {
+ return initLifecycle(injector, log);
+ }
+
+ public static Lifecycle initLifecycle(Injector injector, Logger log)
{
try {
final Lifecycle lifecycle = injector.getInstance(Lifecycle.class);
diff --git
a/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
b/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
index 2b58169c37..83068e2c1f 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/schema/SystemSchema.java
@@ -1074,7 +1074,7 @@ public class SystemSchema extends AbstractSchema
if (responseHolder.getStatus().getCode() != HttpServletResponse.SC_OK) {
throw new RE(
- "Failed to talk to leader node at [%s]. Error code[%d],
description[%s].",
+ "Failed to talk to leader node at [%s]. Error code [%d],
description [%s].",
query,
responseHolder.getStatus().getCode(),
responseHolder.getStatus().getReasonPhrase()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]