aboutsummaryrefslogtreecommitdiffstats
path: root/zookeeper-server
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2020-12-07 18:33:23 +0100
committerHarald Musum <musum@verizonmedia.com>2020-12-07 18:33:23 +0100
commitb0f74766d1b2af781d93da7d2ad89c89c8e9825b (patch)
treec4becfac705a4fd0469ac96a32d5e62a61a3d50e /zookeeper-server
parent2effa9bfef3ad615887f4ecf3190ad87ccc22c6a (diff)
Refactor to prepare for mving more code to zokeeper-server-common
Diffstat (limited to 'zookeeper-server')
-rw-r--r--zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java30
-rw-r--r--zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java12
-rw-r--r--zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java30
-rw-r--r--zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java32
-rw-r--r--zookeeper-server/zookeeper-server-3.5.6/src/test/java/com/yahoo/vespa/zookeeper/ReconfigurerTest.java14
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java5
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ReconfigException.java4
-rw-r--r--zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java4
8 files changed, 95 insertions, 36 deletions
diff --git a/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java b/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
index 55ddd4778f1..b9cc573d06f 100644
--- a/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
+++ b/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
@@ -4,6 +4,13 @@ package com.yahoo.vespa.zookeeper;
import com.google.inject.Inject;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.component.AbstractComponent;
+import org.apache.zookeeper.server.admin.AdminServer;
+import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
+import org.apache.zookeeper.server.quorum.QuorumPeerMain;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
/**
* Starts or reconfigures zookeeper cluster
@@ -14,7 +21,28 @@ public class ReconfigurableVespaZooKeeperServer extends AbstractComponent implem
@Inject
public ReconfigurableVespaZooKeeperServer(Reconfigurer reconfigurer, ZookeeperServerConfig zookeeperServerConfig) {
- reconfigurer.startOrReconfigure(zookeeperServerConfig);
+ reconfigurer.startOrReconfigure(zookeeperServerConfig, this);
+ }
+
+ public void start(Path path) {
+ String[] args = new String[]{ path.toFile().getAbsolutePath()};
+ new Server().initializeAndRun(args);
+ }
+
+ /**
+ * Extends QuorumPeerMain to be able to call initializeAndRun()
+ */
+ static class Server extends QuorumPeerMain {
+
+ @Override
+ protected void initializeAndRun(String[] args) {
+ try {
+ super.initializeAndRun(args);
+ } catch (QuorumPeerConfig.ConfigException | IOException | AdminServer.AdminServerException e) {
+ throw new RuntimeException("Exception when initializing or running ZooKeeper server", e);
+ }
+ }
+
}
}
diff --git a/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java b/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java
index 6a87d8547c1..3466b0a8d22 100644
--- a/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java
+++ b/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java
@@ -46,13 +46,13 @@ public class Reconfigurer extends AbstractComponent {
log.log(Level.FINE, "Created ZooKeeperReconfigurer");
}
- void startOrReconfigure(ZookeeperServerConfig newConfig) {
- startOrReconfigure(newConfig, Reconfigurer::defaultSleeper);
+ void startOrReconfigure(ZookeeperServerConfig newConfig, VespaZooKeeperServer server) {
+ startOrReconfigure(newConfig, Reconfigurer::defaultSleeper, server);
}
- void startOrReconfigure(ZookeeperServerConfig newConfig, Consumer<Duration> sleeper) {
+ void startOrReconfigure(ZookeeperServerConfig newConfig, Consumer<Duration> sleeper, VespaZooKeeperServer server) {
if (zooKeeperRunner == null)
- zooKeeperRunner = startServer(newConfig);
+ zooKeeperRunner = startServer(newConfig, server);
if (shouldReconfigure(newConfig))
reconfigure(newConfig, sleeper);
@@ -74,8 +74,8 @@ public class Reconfigurer extends AbstractComponent {
return !newConfig.equals(activeConfig());
}
- private ZooKeeperRunner startServer(ZookeeperServerConfig zookeeperServerConfig) {
- ZooKeeperRunner runner = new ZooKeeperRunner(zookeeperServerConfig);
+ private ZooKeeperRunner startServer(ZookeeperServerConfig zookeeperServerConfig, VespaZooKeeperServer server) {
+ ZooKeeperRunner runner = new ZooKeeperRunner(zookeeperServerConfig, server);
activeConfig = zookeeperServerConfig;
return runner;
}
diff --git a/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java b/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
index 3c42d881ecc..abcf91527c6 100644
--- a/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
+++ b/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
@@ -4,6 +4,12 @@ package com.yahoo.vespa.zookeeper;
import com.google.inject.Inject;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.component.AbstractComponent;
+import org.apache.zookeeper.server.admin.AdminServer;
+import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
+import org.apache.zookeeper.server.quorum.QuorumPeerMain;
+
+import java.io.IOException;
+import java.nio.file.Path;
/**
* Main component controlling startup and stop of zookeeper server
@@ -17,7 +23,7 @@ public class VespaZooKeeperServerImpl extends AbstractComponent implements Vespa
@Inject
public VespaZooKeeperServerImpl(ZookeeperServerConfig zookeeperServerConfig) {
- this.zooKeeperRunner = new ZooKeeperRunner(zookeeperServerConfig);
+ this.zooKeeperRunner = new ZooKeeperRunner(zookeeperServerConfig, this);
}
@Override
@@ -26,4 +32,26 @@ public class VespaZooKeeperServerImpl extends AbstractComponent implements Vespa
super.deconstruct();
}
+ public void start(Path path) {
+ String[] args = new String[]{ path.toFile().getAbsolutePath()};
+ new Server().initializeAndRun(args);
+ }
+
+ /**
+ * Extends QuorumPeerMain to be able to call initializeAndRun()
+ */
+ static class Server extends QuorumPeerMain {
+
+ @Override
+ protected void initializeAndRun(String[] args) {
+ try {
+ super.initializeAndRun(args);
+ } catch (QuorumPeerConfig.ConfigException | IOException | AdminServer.AdminServerException e) {
+ throw new RuntimeException("Exception when initializing or running ZooKeeper server", e);
+ }
+ }
+
+ }
+
+
}
diff --git a/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java b/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
index 0ce905c90f9..492cfffa1ad 100644
--- a/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
+++ b/zookeeper-server/zookeeper-server-3.5.6/src/main/java/com/yahoo/vespa/zookeeper/ZooKeeperRunner.java
@@ -4,11 +4,9 @@ package com.yahoo.vespa.zookeeper;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.concurrent.DaemonThreadFactory;
import com.yahoo.security.tls.TransportSecurityUtils;
-import org.apache.zookeeper.server.admin.AdminServer;
-import org.apache.zookeeper.server.quorum.QuorumPeerConfig;
-import org.apache.zookeeper.server.quorum.QuorumPeerMain;
-import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
@@ -29,9 +27,11 @@ public class ZooKeeperRunner implements Runnable {
private final ExecutorService executorService;
private final ZookeeperServerConfig zookeeperServerConfig;
+ private final VespaZooKeeperServer server;
- public ZooKeeperRunner(ZookeeperServerConfig zookeeperServerConfig) {
+ public ZooKeeperRunner(ZookeeperServerConfig zookeeperServerConfig, VespaZooKeeperServer server) {
this.zookeeperServerConfig = zookeeperServerConfig;
+ this.server = server;
new Configurator(zookeeperServerConfig).writeConfigToDisk(TransportSecurityUtils.getOptions());
executorService = Executors.newSingleThreadExecutor(new DaemonThreadFactory("zookeeper server"));
executorService.submit(this);
@@ -53,26 +53,10 @@ public class ZooKeeperRunner implements Runnable {
@Override
public void run() {
- String[] args = new String[]{getDefaults().underVespaHome(zookeeperServerConfig.zooKeeperConfigFile())};
- log.log(Level.INFO, "Starting ZooKeeper server with config file " + args[0] +
+ 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) + ")");
- new Server().initializeAndRun(args);
- }
-
- /**
- * Extends QuoroumPeerMain to be able to call initializeAndRun()
- */
- private static class Server extends QuorumPeerMain {
-
- @Override
- protected void initializeAndRun(String[] args) {
- try {
- super.initializeAndRun(args);
- } catch (QuorumPeerConfig.ConfigException | IOException | AdminServer.AdminServerException e) {
- throw new RuntimeException("Exception when initializing or running ZooKeeper server", e);
- }
- }
-
+ server.start(path);
}
}
diff --git a/zookeeper-server/zookeeper-server-3.5.6/src/test/java/com/yahoo/vespa/zookeeper/ReconfigurerTest.java b/zookeeper-server/zookeeper-server-3.5.6/src/test/java/com/yahoo/vespa/zookeeper/ReconfigurerTest.java
index 662c88289d8..a93cc40d322 100644
--- a/zookeeper-server/zookeeper-server-3.5.6/src/test/java/com/yahoo/vespa/zookeeper/ReconfigurerTest.java
+++ b/zookeeper-server/zookeeper-server-3.5.6/src/test/java/com/yahoo/vespa/zookeeper/ReconfigurerTest.java
@@ -11,6 +11,7 @@ import org.junit.rules.TemporaryFolder;
import java.io.File;
import java.io.IOException;
+import java.nio.file.Path;
import java.util.stream.IntStream;
import static org.junit.Assert.assertEquals;
@@ -118,7 +119,7 @@ public class ReconfigurerTest {
return builder;
}
- private static class TestableReconfigurer extends Reconfigurer {
+ private static class TestableReconfigurer extends Reconfigurer implements VespaZooKeeperServer{
private final TestableZkAdmin zkReconfigurer;
@@ -128,9 +129,13 @@ public class ReconfigurerTest {
HostName.setHostNameForTestingOnly("node1");
}
- @Override
void startOrReconfigure(ZookeeperServerConfig newConfig) {
- super.startOrReconfigure(newConfig, l -> { });
+ startOrReconfigure(newConfig, this);
+ }
+
+ @Override
+ void startOrReconfigure(ZookeeperServerConfig newConfig, VespaZooKeeperServer server) {
+ super.startOrReconfigure(newConfig, l -> {}, this);
}
String connectionSpec() {
@@ -149,6 +154,9 @@ public class ReconfigurerTest {
return zkReconfigurer.reconfigurations;
}
+ @Override
+ public void start(Path path) { }
+
}
private static class TestableZkAdmin implements ZkAdmin {
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java
index 15e888df97e..88968cc0de9 100644
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java
+++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/DummyVespaZooKeeperServer.java
@@ -4,6 +4,8 @@ package com.yahoo.vespa.zookeeper;
import com.google.inject.Inject;
import com.yahoo.component.AbstractComponent;
+import java.nio.file.Path;
+
/**
* A dummy {@link VespaZooKeeperServer} implementation that can be used when a container cluster is not configured with standalone ZK cluster.
*
@@ -13,4 +15,7 @@ public class DummyVespaZooKeeperServer extends AbstractComponent implements Vesp
@Inject public DummyVespaZooKeeperServer() {}
+ @Override
+ public void start(Path path) {}
+
}
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ReconfigException.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ReconfigException.java
index ade9245615b..c4bb09eeedf 100644
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ReconfigException.java
+++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/ReconfigException.java
@@ -2,7 +2,8 @@
package com.yahoo.vespa.zookeeper;
/**
- * Interface for reconfiguring a zookeeper cluster.
+ * Exception used to wrap zookeeper exception when reconfiguration fails in a
+ * class that can be used without depending on ZooKeeper.
*
* @author hmusum
*/
@@ -16,4 +17,5 @@ public class ReconfigException extends RuntimeException {
public ReconfigException(String message) {
super(message);
}
+
}
diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java
index 5a1f31a75c3..dbe4d4987a4 100644
--- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java
+++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServer.java
@@ -1,6 +1,8 @@
// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.zookeeper;
+import java.nio.file.Path;
+
/**
* Interface for a component that writes zookeeper config and starts a zookeeper server.
*
@@ -8,4 +10,6 @@ package com.yahoo.vespa.zookeeper;
*/
public interface VespaZooKeeperServer {
+ void start(Path path);
+
}