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 /zookeeper-server/zookeeper-server-common/src/main/java | |
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
Diffstat (limited to 'zookeeper-server/zookeeper-server-common/src/main/java')
2 files changed, 10 insertions, 1 deletions
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); } } |