diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-12-09 23:02:54 +0100 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-12-09 23:02:54 +0100 |
commit | 96803c16b15588532e9cd21611b104518fe0a0d7 (patch) | |
tree | 70efd0e9af9c7b4ef933d535272e5888e0912e01 | |
parent | f3e2acd0df995ea17ddf016719d0f2ef33ef1427 (diff) |
2 hacks to be able to use ZooKeeper server 3.6
Explicitly depend on io.dropwizard.metrics and org.xerial.snappy since
they are used by metrics provider (even NullMetricsProvider) when
bootstrapping ServerMetrics in zookeeper code and cannot be found
when runnin in a container
Do some class loadin trick to circumvent zookeeper itself loading a class
with the threads current class loader, which does not work well in
a container
4 files changed, 24 insertions, 2 deletions
diff --git a/zookeeper-server/zookeeper-server-3.6.2/pom.xml b/zookeeper-server/zookeeper-server-3.6.2/pom.xml index c479c84ac86..f6a8333a809 100644 --- a/zookeeper-server/zookeeper-server-3.6.2/pom.xml +++ b/zookeeper-server/zookeeper-server-3.6.2/pom.xml @@ -32,6 +32,18 @@ <version>1.7.5</version> </dependency> <dependency> + <groupId>io.dropwizard.metrics</groupId> + <artifactId>metrics-core</artifactId> + <scope>compile</scope> + <version>3.2.5</version> + </dependency> + <dependency> + <groupId>org.xerial.snappy</groupId> + <artifactId>snappy-java</artifactId> + <scope>compile</scope> + <version>1.1.7</version> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java index df4b4e76c0b..e535f627f00 100644 --- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java +++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java @@ -92,6 +92,7 @@ public class Configurator { sb.append("standaloneEnabled=false").append("\n"); sb.append("reconfigEnabled=true").append("\n"); sb.append("skipACL=yes").append("\n"); + sb.append("metricsProvider.className=org.apache.zookeeper.metrics.impl.NullMetricsProvider\n"); ensureThisServerIsRepresented(config.myid(), config.server()); config.server().forEach(server -> addServerToCfg(sb, server, config.clientPort())); SSLContext sslContext = new SslContextBuilder().build(); diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java index 9b2c80cb3b1..9e9b6a0bbc9 100644 --- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java +++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java @@ -56,10 +56,18 @@ public class ZooKeeperRunner implements Runnable { Path path = Paths.get(getDefaults().underVespaHome(zookeeperServerConfig.zooKeeperConfigFile())); log.log(Level.INFO, "Starting ZooKeeper server with config file " + path.toFile().getAbsolutePath() + ". Trying to establish ZooKeeper quorum (members: " + zookeeperServerHostnames(zookeeperServerConfig) + ")"); + // Note: Hack to make this work in ZooKeeper 3.6, where metrics provider class is + // loaded by using Thread.currentThread().getContextClassLoader() which does not work + // well in the container + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); try { server.start(path); } catch (Throwable e) { - log.log(Level.SEVERE, "Starting ZooKeeper server failed:", e); + log.log(Level.SEVERE, "Starting ZooKeeper server failed", e); + throw new RuntimeException("Starting ZooKeeper server failed", e); + } finally { + Thread.currentThread().setContextClassLoader(tccl); } } diff --git a/zookeeper-server/zookeeper-server-common/src/test/java/com/yahoo/vespa/zookeeper/ConfiguratorTest.java b/zookeeper-server/zookeeper-server-common/src/test/java/com/yahoo/vespa/zookeeper/ConfiguratorTest.java index a106b6ba99e..0cdbd68421c 100644 --- a/zookeeper-server/zookeeper-server-common/src/test/java/com/yahoo/vespa/zookeeper/ConfiguratorTest.java +++ b/zookeeper-server/zookeeper-server-common/src/test/java/com/yahoo/vespa/zookeeper/ConfiguratorTest.java @@ -177,7 +177,8 @@ public class ConfiguratorTest { "quorumListenOnAllIPs=true\n" + "standaloneEnabled=false\n" + "reconfigEnabled=true\n" + - "skipACL=yes\n"; + "skipACL=yes\n" + + "metricsProvider.className=org.apache.zookeeper.metrics.impl.NullMetricsProvider\n"; } private String quorumKeyStoreAndTrustStoreConfig(File jksKeyStoreFilePath, File caCertificatesFilePath) { |