summaryrefslogtreecommitdiffstats
path: root/zookeeper-server/zookeeper-server-3.6.2
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-02-19 12:30:30 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-02-19 12:34:16 +0100
commit896879291572a2de2d421acf552bbf272f8bc44a (patch)
tree8aff17203bf3c606ed8f84497384891c41a7c838 /zookeeper-server/zookeeper-server-3.6.2
parent1d1390fcfad2ace92795e47a15513a90d493cc95 (diff)
Move ownership of QuorumPeer to Recoonfigurer
Diffstat (limited to 'zookeeper-server/zookeeper-server-3.6.2')
-rw-r--r--zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java16
-rw-r--r--zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java12
-rw-r--r--zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java3
3 files changed, 20 insertions, 11 deletions
diff --git a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
index d614aecbad2..0b08966e241 100644
--- a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
+++ b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/ReconfigurableVespaZooKeeperServer.java
@@ -6,29 +6,33 @@ import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.component.AbstractComponent;
import java.nio.file.Path;
+import java.time.Duration;
+import java.util.concurrent.atomic.AtomicReference;
/**
- * Starts or reconfigures zookeeper cluster
+ * Starts or reconfigures zookeeper cluster.
+ * The QuorumPeer conditionally created here is owned by the Reconfigurer;
+ * when it already has a peer, that peer is used here in case start or shutdown is required.
*
* @author hmusum
*/
public class ReconfigurableVespaZooKeeperServer extends AbstractComponent implements VespaZooKeeperServer {
- private final VespaQuorumPeer peer;
+ private final AtomicReference<QuorumPeer> peer = new AtomicReference<>();
@Inject
public ReconfigurableVespaZooKeeperServer(Reconfigurer reconfigurer, ZookeeperServerConfig zookeeperServerConfig) {
- this.peer = new VespaQuorumPeer();
- reconfigurer.startOrReconfigure(zookeeperServerConfig, this);
+ reconfigurer.startOrReconfigure(zookeeperServerConfig, this, VespaQuorumPeer::new, peer::set);
}
@Override
public void shutdown() {
- peer.shutdown();
+ peer.get().shutdown(Duration.ofMinutes(1));
}
+ @Override
public void start(Path configFilePath) {
- peer.start(configFilePath);
+ peer.get().start(configFilePath);
}
@Override
diff --git a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java
index ba11286404a..e003aa39f7b 100644
--- a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java
+++ b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaQuorumPeer.java
@@ -18,22 +18,26 @@ import java.util.logging.Logger;
*
* @author hmusum
*/
-class VespaQuorumPeer extends QuorumPeerMain {
+class VespaQuorumPeer extends QuorumPeerMain implements QuorumPeer {
private static final Logger log = java.util.logging.Logger.getLogger(Reconfigurer.class.getName());
private static final Duration timeToWaitForShutdown = Duration.ofSeconds(60);
+ @Override
public void start(Path path) {
initializeAndRun(new String[]{ path.toFile().getAbsolutePath()});
}
- public void shutdown() {
+ @Override
+ public void shutdown(Duration timeout) {
if (quorumPeer != null) {
log.log(Level.INFO, "Shutting down ZooKeeper server");
try {
quorumPeer.shutdown();
- quorumPeer.join(timeToWaitForShutdown.toMillis()); // Wait for shutdown to complete
- } catch (RuntimeException|InterruptedException e) {
+ quorumPeer.join(timeout.toMillis()); // Wait for shutdown to complete
+ if (quorumPeer.isAlive())
+ throw new IllegalStateException("Peer still alive after " + timeout);
+ } catch (RuntimeException | InterruptedException e) {
// If shutdown fails, we have no other option than forcing the JVM to stop and letting it be restarted.
//
// When a VespaZooKeeperServer component receives a new config, the container will try to start a new
diff --git a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
index 2a66bebe048..430aab802c2 100644
--- a/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
+++ b/zookeeper-server/zookeeper-server-3.6.2/src/main/java/com/yahoo/vespa/zookeeper/VespaZooKeeperServerImpl.java
@@ -6,6 +6,7 @@ import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.component.AbstractComponent;
import java.nio.file.Path;
+import java.time.Duration;
/**
* @author Ulf Lilleengen
@@ -30,7 +31,7 @@ public class VespaZooKeeperServerImpl extends AbstractComponent implements Vespa
@Override
public void shutdown() {
- peer.shutdown();
+ peer.shutdown(Duration.ofMinutes(1));
}
@Override