diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-02-19 12:30:30 +0100 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-02-19 12:34:16 +0100 |
commit | 896879291572a2de2d421acf552bbf272f8bc44a (patch) | |
tree | 8aff17203bf3c606ed8f84497384891c41a7c838 /zookeeper-server/zookeeper-server-3.6.2 | |
parent | 1d1390fcfad2ace92795e47a15513a90d493cc95 (diff) |
Move ownership of QuorumPeer to Recoonfigurer
Diffstat (limited to 'zookeeper-server/zookeeper-server-3.6.2')
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 |