diff options
author | Harald Musum <musum@verizonmedia.com> | 2020-12-07 18:33:23 +0100 |
---|---|---|
committer | Harald Musum <musum@verizonmedia.com> | 2020-12-07 18:33:23 +0100 |
commit | b0f74766d1b2af781d93da7d2ad89c89c8e9825b (patch) | |
tree | c4becfac705a4fd0469ac96a32d5e62a61a3d50e /zookeeper-server | |
parent | 2effa9bfef3ad615887f4ecf3190ad87ccc22c6a (diff) |
Refactor to prepare for mving more code to zokeeper-server-common
Diffstat (limited to 'zookeeper-server')
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); + } |