From dee2c0c87e83ff11c6d1f5a68fc68e679a1a076e Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Mon, 2 Jan 2023 11:09:59 +0100 Subject: Make zookeeper server non-reconfigurable in self-hosted Add a new component to control whether zookeeper server in config server should be configurable --- .../com/yahoo/vespa/zookeeper/Reconfigurer.java | 3 +- .../zookeeper/ConfigServerZooKeeperServer.java | 45 ++++++++++++++++++++++ .../ReconfigurableVespaZooKeeperServer.java | 4 +- .../com/yahoo/vespa/zookeeper/VespaQuorumPeer.java | 6 +-- .../vespa/zookeeper/VespaZooKeeperServerImpl.java | 4 +- 5 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/ConfigServerZooKeeperServer.java (limited to 'zookeeper-server') diff --git a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java index 9f1ed3967f4..6719a68e1cd 100644 --- a/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java +++ b/zookeeper-server/zookeeper-server-common/src/main/java/com/yahoo/vespa/zookeeper/Reconfigurer.java @@ -54,7 +54,8 @@ public class Reconfigurer extends AbstractComponent { shutdown(); } - QuorumPeer startOrReconfigure(ZookeeperServerConfig newConfig, VespaZooKeeperServer server, + QuorumPeer startOrReconfigure(ZookeeperServerConfig newConfig, + VespaZooKeeperServer server, Supplier quorumPeerCreator) { if (zooKeeperRunner == null) { peer = quorumPeerCreator.get(); // Obtain the peer from the server. This will be shared with later servers. diff --git a/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/ConfigServerZooKeeperServer.java b/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/ConfigServerZooKeeperServer.java new file mode 100644 index 00000000000..803cf224042 --- /dev/null +++ b/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/ConfigServerZooKeeperServer.java @@ -0,0 +1,45 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.zookeeper; + +import com.yahoo.cloud.config.ConfigserverConfig; +import com.yahoo.cloud.config.ZookeeperServerConfig; +import com.yahoo.component.AbstractComponent; +import com.yahoo.component.annotation.Inject; +import java.nio.file.Path; + +/** + * + * Server used for starting config server, needed to be able to have different behavior for hosted and + * self-hosted Vespa. + * + * @author Harald Musum + */ +public class ConfigServerZooKeeperServer extends AbstractComponent implements VespaZooKeeperServer { + + private final VespaZooKeeperServer zooKeeperServer; + + @Inject + public ConfigServerZooKeeperServer(ZookeeperServerConfig zookeeperServerConfig, ConfigserverConfig configserverConfig) { + if (configserverConfig.hostedVespa()) + this.zooKeeperServer = new ReconfigurableVespaZooKeeperServer(new Reconfigurer(new VespaZooKeeperAdminImpl()), zookeeperServerConfig); + else + this.zooKeeperServer = new VespaZooKeeperServerImpl(zookeeperServerConfig); + } + + @Override + public void deconstruct() { zooKeeperServer.shutdown(); } + + @Override + public void shutdown() { + zooKeeperServer.shutdown(); + } + + @Override + public void start(Path configFilePath) { + zooKeeperServer.start(configFilePath); + } + + @Override + public boolean reconfigurable() { return zooKeeperServer.reconfigurable(); } + +} diff --git a/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java b/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java index a4c34416b4a..8161e4bba4b 100644 --- a/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java +++ b/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java @@ -21,7 +21,9 @@ public class ReconfigurableVespaZooKeeperServer extends AbstractComponent implem @Inject public ReconfigurableVespaZooKeeperServer(Reconfigurer reconfigurer, ZookeeperServerConfig zookeeperServerConfig) { - Validation.require(true, zookeeperServerConfig.dynamicReconfiguration(), "dynamicReconfiguration must be true"); + Validation.require(zookeeperServerConfig.dynamicReconfiguration(), + zookeeperServerConfig.dynamicReconfiguration(), + "dynamicReconfiguration must be true"); peer = reconfigurer.startOrReconfigure(zookeeperServerConfig, this, () -> peer = new VespaQuorumPeer()); } diff --git a/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java b/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java index 47ec03367c1..e5c35a185b5 100644 --- a/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java +++ b/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java @@ -13,8 +13,8 @@ import java.util.logging.Level; import java.util.logging.Logger; /** - * Starts/stops a ZooKeeper server. Extends QuorumPeerMain to be able to call initializeAndRun() and wraps - * exceptions so it can be used by code that does not depend on ZooKeeper. + * Starts or stops a ZooKeeper server. Extends QuorumPeerMain to be able to call initializeAndRun() and wraps + * exceptions so that it can be used by code that does not depend on ZooKeeper. * * @author hmusum */ @@ -41,7 +41,7 @@ class VespaQuorumPeer extends QuorumPeerMain implements QuorumPeer { // // When a VespaZooKeeperServer component receives a new config, the container will try to start a new // server with the new config, this will fail until the old server is deconstructed. If the old server - // fails to deconstruct/shut down, the new one will never start and if that happens forcing a restart is + // fails to deconstruct/shutdown, the new one will never start and if that happens forcing a restart is // the better option. Process.logAndDie("Failed to shut down ZooKeeper server properly, forcing shutdown", e); } diff --git a/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java b/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java index 104af272bd3..e5bfa60f47e 100644 --- a/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java +++ b/zookeeper-server/zookeeper-server/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java @@ -20,7 +20,9 @@ public class VespaZooKeeperServerImpl extends AbstractComponent implements Vespa @Inject public VespaZooKeeperServerImpl(ZookeeperServerConfig zookeeperServerConfig) { - Validation.require(false, zookeeperServerConfig.dynamicReconfiguration(), "dynamicReconfiguration must be false"); + Validation.require(! zookeeperServerConfig.dynamicReconfiguration(), + ! zookeeperServerConfig.dynamicReconfiguration(), + "dynamicReconfiguration must be false"); this.peer = new VespaQuorumPeer(); this.runner = new ZooKeeperRunner(zookeeperServerConfig, this); } -- cgit v1.2.3