summaryrefslogtreecommitdiffstats
path: root/zookeeper-server/zookeeper-server-common/src/main
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-12-09 23:02:54 +0100
committerHarald Musum <musum@verizonmedia.com>2020-12-09 23:02:54 +0100
commit96803c16b15588532e9cd21611b104518fe0a0d7 (patch)
tree70efd0e9af9c7b4ef933d535272e5888e0912e01 /zookeeper-server/zookeeper-server-common/src/main
parentf3e2acd0df995ea17ddf016719d0f2ef33ef1427 (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')
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Configurator.java1
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java10
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);
}
}