From commits-return-7787-archive-asf-public=cust-asf.ponee.io@zookeeper.apache.org Wed May 15 09:56:51 2019 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [207.244.88.153]) by mx-eu-01.ponee.io (Postfix) with SMTP id DC91B180621 for ; Wed, 15 May 2019 11:56:50 +0200 (CEST) Received: (qmail 93598 invoked by uid 500); 15 May 2019 09:56:50 -0000 Mailing-List: contact commits-help@zookeeper.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@zookeeper.apache.org Delivered-To: mailing list commits@zookeeper.apache.org Received: (qmail 93564 invoked by uid 99); 15 May 2019 09:56:49 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 15 May 2019 09:56:49 +0000 Received: by gitbox.apache.org (ASF Mail Server at gitbox.apache.org, from userid 33) id C953F8739A; Wed, 15 May 2019 09:56:49 +0000 (UTC) Date: Wed, 15 May 2019 09:56:49 +0000 To: "commits@zookeeper.apache.org" Subject: [zookeeper] branch master updated: ZOOKEEPER-3353: Admin commands for showing initial settings MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Message-ID: <155791420969.10619.5183315080120372080@gitbox.apache.org> From: andor@apache.org X-Git-Host: gitbox.apache.org X-Git-Repo: zookeeper X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 31e92e0a4f287ca840e0c9418e3a9b706e9721db X-Git-Newrev: e45551fc7c691332ace7bff81926855e42ac2239 X-Git-Rev: e45551fc7c691332ace7bff81926855e42ac2239 X-Git-NotificationType: ref_changed_plus_diff X-Git-Multimail-Version: 1.5.dev Auto-Submitted: auto-generated This is an automated email from the ASF dual-hosted git repository. andor pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/zookeeper.git The following commit(s) were added to refs/heads/master by this push: new e45551f ZOOKEEPER-3353: Admin commands for showing initial settings e45551f is described below commit e45551fc7c691332ace7bff81926855e42ac2239 Author: Brian Nixon AuthorDate: Wed May 15 11:56:42 2019 +0200 ZOOKEEPER-3353: Admin commands for showing initial settings Author: Brian Nixon Reviewers: eolivelli@apache.org, andor@apache.org Closes #898 from enixon/properties-view and squashes the following commits: 03eccb902 [Brian Nixon] move parameter determining whether a Command needs a ZooKeeperServer into the CommandBase constructor f1eedd385 [Brian Nixon] remove four letter word version of commands 4e73b931e [Brian Nixon] ZOOKEEPER-3353: Admin commands for showing initial settings --- .../org/apache/zookeeper/server/ServerConfig.java | 2 + .../apache/zookeeper/server/ZooKeeperServer.java | 25 ++-- .../zookeeper/server/ZooKeeperServerMain.java | 2 +- .../org/apache/zookeeper/server/admin/Command.java | 6 + .../apache/zookeeper/server/admin/CommandBase.java | 14 +- .../apache/zookeeper/server/admin/Commands.java | 159 +++++++++++++-------- .../apache/zookeeper/server/quorum/QuorumPeer.java | 10 ++ .../zookeeper/server/quorum/QuorumPeerConfig.java | 13 +- .../server/quorum/QuorumZooKeeperServer.java | 2 +- .../server/quorum/ReadOnlyZooKeeperServer.java | 2 +- 10 files changed, 161 insertions(+), 74 deletions(-) diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerConfig.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerConfig.java index f06465d..26f4a57 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerConfig.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ServerConfig.java @@ -54,6 +54,7 @@ public class ServerConfig { protected Properties metricsProviderConfiguration = new Properties(); /** defaults to -1 if not set explicitly */ protected int listenBacklog = -1; + protected String initialConfig; /** JVM Pause Monitor feature switch */ protected boolean jvmPauseMonitorToRun = false; @@ -121,6 +122,7 @@ public class ServerConfig { metricsProviderClassName = config.getMetricsProviderClassName(); metricsProviderConfiguration = config.getMetricsProviderConfiguration(); listenBacklog = config.getClientPortListenBacklog(); + initialConfig = config.getInitialConfig(); } public InetSocketAddress getClientPortAddress() { diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java index d714591..28dc293 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServer.java @@ -116,6 +116,8 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider { protected JvmPauseMonitor jvmPauseMonitor; protected volatile State state = State.INITIAL; private boolean isResponseCachingEnabled = true; + /* contains the configuration file content read at startup */ + protected String initialConfig; protected enum State { INITIAL, RUNNING, SHUTDOWN, ERROR @@ -194,7 +196,7 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider { */ public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, - ZKDatabase zkDb) { + ZKDatabase zkDb, String initialConfig) { serverStats = new ServerStats(this); this.txnLogFactory = txnLogFactory; this.txnLogFactory.setServerStats(this.serverStats); @@ -210,6 +212,8 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider { connThrottle = new BlueThrottle(); + this.initialConfig = initialConfig; + LOG.info("Created server with tickTime " + tickTime + " minSessionTimeout " + getMinSessionTimeout() + " maxSessionTimeout " + getMaxSessionTimeout() @@ -218,14 +222,19 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider { + " snapdir " + txnLogFactory.getSnapDir()); } + public String getInitialConfig() { + return initialConfig; + } + /** * Adds JvmPauseMonitor and calls - * {@link #ZooKeeperServer(FileTxnSnapLog, int, int, int, int, ZKDatabase)} + * {@link #ZooKeeperServer(FileTxnSnapLog, int, int, int, int, ZKDatabase, String)} * */ public ZooKeeperServer(JvmPauseMonitor jvmPauseMonitor, FileTxnSnapLog txnLogFactory, int tickTime, - int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, ZKDatabase zkDb) { - this(txnLogFactory, tickTime, minSessionTimeout, maxSessionTimeout, clientPortListenBacklog, zkDb); + int minSessionTimeout, int maxSessionTimeout, int clientPortListenBacklog, + ZKDatabase zkDb, String initialConfig) { + this(txnLogFactory, tickTime, minSessionTimeout, maxSessionTimeout, clientPortListenBacklog, zkDb, initialConfig); this.jvmPauseMonitor = jvmPauseMonitor; if(jvmPauseMonitor != null) { LOG.info("Added JvmPauseMonitor to server"); @@ -238,9 +247,9 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider { * @param tickTime the ticktime for the server * @throws IOException */ - public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime) + public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, String initialConfig) throws IOException { - this(txnLogFactory, tickTime, -1, -1, -1, new ZKDatabase(txnLogFactory)); + this(txnLogFactory, tickTime, -1, -1, -1, new ZKDatabase(txnLogFactory), initialConfig); } public ServerStats serverStats() { @@ -300,7 +309,7 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider { public ZooKeeperServer(File snapDir, File logDir, int tickTime) throws IOException { this( new FileTxnSnapLog(snapDir, logDir), - tickTime); + tickTime, ""); } /** @@ -311,7 +320,7 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider { public ZooKeeperServer(FileTxnSnapLog txnLogFactory) throws IOException { - this(txnLogFactory, DEFAULT_TICK_TIME, -1, -1, -1, new ZKDatabase(txnLogFactory)); + this(txnLogFactory, DEFAULT_TICK_TIME, -1, -1, -1, new ZKDatabase(txnLogFactory), ""); } /** diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java index a00178f..817eee0 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/ZooKeeperServerMain.java @@ -142,7 +142,7 @@ public class ZooKeeperServerMain { } final ZooKeeperServer zkServer = new ZooKeeperServer(jvmPauseMonitor, txnLog, config.tickTime, config.minSessionTimeout, config.maxSessionTimeout, - config.listenBacklog, null); + config.listenBacklog, null, config.initialConfig); txnLog.setServerStats(zkServer.serverStats()); // Registers shutdown handler which will be used to know the diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Command.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Command.java index 6e41501..848612c 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Command.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Command.java @@ -51,6 +51,12 @@ public interface Command { String getDoc(); /** + * @return true if the command requires an active ZooKeeperServer or a + * synced peer in order to resolve + */ + boolean isServerRequired(); + + /** * Run this command. Commands take a ZooKeeperServer and String-valued * keyword arguments and return a map containing any information * constituting the response to the command. Commands are responsible for diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/CommandBase.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/CommandBase.java index b5f1bee..5f3769f 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/CommandBase.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/CommandBase.java @@ -26,18 +26,23 @@ public abstract class CommandBase implements Command { private final String primaryName; private final Set names; private final String doc; + private final boolean serverRequired; /** * @param names The possible names of this command, with the primary name first. */ protected CommandBase(List names) { - this(names, null); + this(names, true, null); + } + protected CommandBase(List names, boolean serverRequired) { + this(names, serverRequired, null); } - protected CommandBase(List names, String doc) { + protected CommandBase(List names, boolean serverRequired, String doc) { this.primaryName = names.get(0); this.names = new HashSet(names); this.doc = doc; + this.serverRequired = serverRequired; } @Override @@ -55,6 +60,11 @@ public abstract class CommandBase implements Command { return doc; } + @Override + public boolean isServerRequired() { + return serverRequired; + } + /** * @return A response with the command set to the primary name and the * error set to null (these are the two entries that all command diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Commands.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Commands.java index e653e31..72dfe7f 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Commands.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/admin/Commands.java @@ -18,14 +18,16 @@ package org.apache.zookeeper.server.admin; -import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Set; +import java.util.SortedMap; +import java.util.TreeMap; import org.apache.zookeeper.Environment; import org.apache.zookeeper.Environment.Entry; @@ -92,13 +94,14 @@ public class Commands { * - "error" key containing a String error message or null if no error */ public static CommandResponse runCommand(String cmdName, ZooKeeperServer zkServer, Map kwargs) { - if (!commands.containsKey(cmdName)) { + Command command = getCommand(cmdName); + if (command == null) { return new CommandResponse(cmdName, "Unknown command: " + cmdName); } - if (zkServer == null || !zkServer.isRunning()) { + if (command.isServerRequired() && (zkServer == null || !zkServer.isRunning())) { return new CommandResponse(cmdName, "This ZooKeeper instance is not currently serving requests"); } - return commands.get(cmdName).run(zkServer, kwargs); + return command.run(zkServer, kwargs); } /** @@ -134,6 +137,8 @@ public class Commands { registerCommand(new WatchCommand()); registerCommand(new WatchesByPathCommand()); registerCommand(new WatchSummaryCommand()); + registerCommand(new SystemPropertiesCommand()); + registerCommand(new InitialConfigurationCommand()); } /** @@ -244,7 +249,7 @@ public class Commands { */ public static class EnvCommand extends CommandBase { public EnvCommand() { - super(Arrays.asList("environment", "env", "envi")); + super(Arrays.asList("environment", "env", "envi"), false); } @Override @@ -263,7 +268,7 @@ public class Commands { */ public static class GetTraceMaskCommand extends CommandBase { public GetTraceMaskCommand() { - super(Arrays.asList("get_trace_mask", "gtmk")); + super(Arrays.asList("get_trace_mask", "gtmk"), false); } @Override @@ -317,79 +322,81 @@ public class Commands { */ public static class MonitorCommand extends CommandBase { public MonitorCommand() { - super(Arrays.asList("monitor", "mntr")); + super(Arrays.asList("monitor", "mntr"), false); } @Override public CommandResponse run(ZooKeeperServer zkServer, Map kwargs) { - ZKDatabase zkdb = zkServer.getZKDatabase(); - ServerStats stats = zkServer.serverStats(); - CommandResponse response = initializeResponse(); response.put("version", Version.getFullVersion()); - response.put("avg_latency", stats.getAvgLatency()); - response.put("max_latency", stats.getMaxLatency()); - response.put("min_latency", stats.getMinLatency()); + OSMXBean osMbean = new OSMXBean(); + response.put("open_file_descriptor_count", osMbean.getOpenFileDescriptorCount()); + response.put("max_file_descriptor_count", osMbean.getMaxFileDescriptorCount()); - response.put("packets_received", stats.getPacketsReceived()); - response.put("packets_sent", stats.getPacketsSent()); - response.put("num_alive_connections", stats.getNumAliveClientConnections()); + if (zkServer != null) { + ZKDatabase zkdb = zkServer.getZKDatabase(); + ServerStats stats = zkServer.serverStats(); + response.put("avg_latency", stats.getAvgLatency()); + response.put("max_latency", stats.getMaxLatency()); + response.put("min_latency", stats.getMinLatency()); - response.put("outstanding_requests", stats.getOutstandingRequests()); - response.put("uptime", stats.getUptime()); + response.put("packets_received", stats.getPacketsReceived()); + response.put("packets_sent", stats.getPacketsSent()); + response.put("num_alive_connections", stats.getNumAliveClientConnections()); - response.put("server_state", stats.getServerState()); - response.put("znode_count", zkdb.getNodeCount()); + response.put("outstanding_requests", stats.getOutstandingRequests()); + response.put("uptime", stats.getUptime()); - response.put("watch_count", zkdb.getDataTree().getWatchCount()); - response.put("ephemerals_count", zkdb.getDataTree().getEphemeralsCount()); - response.put("approximate_data_size", zkdb.getDataTree().cachedApproximateDataSize()); + response.put("server_state", stats.getServerState()); + response.put("znode_count", zkdb.getNodeCount()); - response.put("global_sessions", zkdb.getSessionCount()); - response.put("local_sessions", - zkServer.getSessionTracker().getLocalSessionCount()); + response.put("watch_count", zkdb.getDataTree().getWatchCount()); + response.put("ephemerals_count", zkdb.getDataTree().getEphemeralsCount()); + response.put("approximate_data_size", zkdb.getDataTree().cachedApproximateDataSize()); - OSMXBean osMbean = new OSMXBean(); - response.put("open_file_descriptor_count", osMbean.getOpenFileDescriptorCount()); - response.put("max_file_descriptor_count", osMbean.getMaxFileDescriptorCount()); - response.put("connection_drop_probability", zkServer.getConnectionDropChance()); + response.put("global_sessions", zkdb.getSessionCount()); + response.put("local_sessions", + zkServer.getSessionTracker().getLocalSessionCount()); - response.put("last_client_response_size", stats.getClientResponseStats().getLastBufferSize()); - response.put("max_client_response_size", stats.getClientResponseStats().getMaxBufferSize()); - response.put("min_client_response_size", stats.getClientResponseStats().getMinBufferSize()); + response.put("connection_drop_probability", zkServer.getConnectionDropChance()); - if (zkServer instanceof QuorumZooKeeperServer) { - QuorumPeer peer = ((QuorumZooKeeperServer) zkServer).self; - response.put("quorum_size", peer.getQuorumSize()); - } + response.put("last_client_response_size", stats.getClientResponseStats().getLastBufferSize()); + response.put("max_client_response_size", stats.getClientResponseStats().getMaxBufferSize()); + response.put("min_client_response_size", stats.getClientResponseStats().getMinBufferSize()); - if (zkServer instanceof LeaderZooKeeperServer) { - Leader leader = ((LeaderZooKeeperServer) zkServer).getLeader(); - - response.put("learners", leader.getLearners().size()); - response.put("synced_followers", leader.getForwardingFollowers().size()); - response.put("synced_non_voting_followers", leader.getNonVotingFollowers().size()); - response.put("synced_observers", leader.getObservingLearners().size()); - response.put("pending_syncs", leader.getNumPendingSyncs()); - response.put("leader_uptime", leader.getUptime()); - - response.put("last_proposal_size", leader.getProposalStats().getLastBufferSize()); - response.put("max_proposal_size", leader.getProposalStats().getMaxBufferSize()); - response.put("min_proposal_size", leader.getProposalStats().getMinBufferSize()); - } + if (zkServer instanceof QuorumZooKeeperServer) { + QuorumPeer peer = ((QuorumZooKeeperServer) zkServer).self; + response.put("quorum_size", peer.getQuorumSize()); + } + + if (zkServer instanceof LeaderZooKeeperServer) { + Leader leader = ((LeaderZooKeeperServer) zkServer).getLeader(); + + response.put("learners", leader.getLearners().size()); + response.put("synced_followers", leader.getForwardingFollowers().size()); + response.put("synced_non_voting_followers", leader.getNonVotingFollowers().size()); + response.put("synced_observers", leader.getObservingLearners().size()); + response.put("pending_syncs", leader.getNumPendingSyncs()); + response.put("leader_uptime", leader.getUptime()); - if (zkServer instanceof FollowerZooKeeperServer) { - Follower follower = ((FollowerZooKeeperServer) zkServer).getFollower(); - Integer syncedObservers = follower.getSyncedObserverSize(); - if (syncedObservers != null) { - response.put("synced_observers", syncedObservers); + response.put("last_proposal_size", leader.getProposalStats().getLastBufferSize()); + response.put("max_proposal_size", leader.getProposalStats().getMaxBufferSize()); + response.put("min_proposal_size", leader.getProposalStats().getMinBufferSize()); } - } - if (zkServer instanceof ObserverZooKeeperServer) { - response.put("observer_master_id", ((ObserverZooKeeperServer)zkServer).getObserver().getLearnerMasterId()); + if (zkServer instanceof FollowerZooKeeperServer) { + Follower follower = ((FollowerZooKeeperServer) zkServer).getFollower(); + Integer syncedObservers = follower.getSyncedObserverSize(); + if (syncedObservers != null) { + response.put("synced_observers", syncedObservers); + } + } + + if (zkServer instanceof ObserverZooKeeperServer) { + response.put("observer_master_id", ((ObserverZooKeeperServer) zkServer).getObserver().getLearnerMasterId()); + } } ServerMetrics.getMetrics() @@ -424,7 +431,7 @@ public class Commands { */ public static class SetTraceMaskCommand extends CommandBase { public SetTraceMaskCommand() { - super(Arrays.asList("set_trace_mask", "stmk")); + super(Arrays.asList("set_trace_mask", "stmk"), false); } @Override @@ -573,5 +580,37 @@ public class Commands { } } + /** + * All defined system properties. + */ + public static class SystemPropertiesCommand extends CommandBase { + public SystemPropertiesCommand() { + super(Arrays.asList("system_properties", "sysp"), false); + } + + @Override + public CommandResponse run(ZooKeeperServer zkServer, Map kwargs) { + CommandResponse response = initializeResponse(); + Properties systemProperties = System.getProperties(); + SortedMap sortedSystemProperties = new TreeMap<>(); + systemProperties.forEach((k, v) -> sortedSystemProperties.put(k.toString(), v.toString())); + response.putAll(sortedSystemProperties); + return response; + } + } + + public static class InitialConfigurationCommand extends CommandBase { + public InitialConfigurationCommand() { + super(Arrays.asList("initial_configuration", "icfg")); + } + + @Override + public CommandResponse run(ZooKeeperServer zkServer, Map kwargs) { + CommandResponse response = initializeResponse(); + response.put("initial_configuration", zkServer.getInitialConfig()); + return response; + } + } + private Commands() {} } diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java index 1996814..adede8f 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeer.java @@ -535,6 +535,8 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider private volatile boolean running = true; + private String initialConfig; + /** * The number of milliseconds of each tick */ @@ -1461,6 +1463,14 @@ public class QuorumPeer extends ZooKeeperThread implements QuorumStats.Provider this.myid = myid; } + public void setInitialConfig(String initialConfig) { + this.initialConfig = initialConfig; + } + + public String getInitialConfig() { + return initialConfig; + } + /** * Get the number of milliseconds of each tick */ diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java index 27bf055..3383319 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java @@ -29,6 +29,7 @@ import java.io.StringReader; import java.io.Writer; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -104,6 +105,8 @@ public class QuorumPeerConfig { protected int purgeInterval = 0; protected boolean syncEnabled = true; + protected String initialConfig; + protected LearnerType peerType = LearnerType.PARTICIPANT; /** @@ -172,7 +175,10 @@ public class QuorumPeerConfig { } finally { in.close(); } - + + /* Read entire config file as initial configuration */ + initialConfig = new String(Files.readAllBytes(configFile.toPath())); + parseProperties(cfg); } catch (IOException e) { throw new ConfigException("Error processing " + path, e); @@ -802,6 +808,11 @@ public class QuorumPeerConfig { public int getObserverMasterPort() { return observerMasterPort; } public File getDataDir() { return dataDir; } public File getDataLogDir() { return dataLogDir; } + + public String getInitialConfig() { + return initialConfig; + } + public int getTickTime() { return tickTime; } public int getMaxClientCnxns() { return maxClientCnxns; } public int getMinSessionTimeout() { return minSessionTimeout; } diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java index 566c945..72637b2 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java @@ -46,7 +46,7 @@ public abstract class QuorumZooKeeperServer extends ZooKeeperServer { int minSessionTimeout, int maxSessionTimeout, int listenBacklog, ZKDatabase zkDb, QuorumPeer self) { - super(logFactory, tickTime, minSessionTimeout, maxSessionTimeout, listenBacklog, zkDb); + super(logFactory, tickTime, minSessionTimeout, maxSessionTimeout, listenBacklog, zkDb, self.getInitialConfig()); this.self = self; } diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/ReadOnlyZooKeeperServer.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/ReadOnlyZooKeeperServer.java index 5c086b7..103ff21 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/ReadOnlyZooKeeperServer.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/quorum/ReadOnlyZooKeeperServer.java @@ -46,7 +46,7 @@ public class ReadOnlyZooKeeperServer extends ZooKeeperServer { ReadOnlyZooKeeperServer(FileTxnSnapLog logFactory, QuorumPeer self, ZKDatabase zkDb) { super(logFactory, self.tickTime, self.minSessionTimeout, - self.maxSessionTimeout, self.clientPortListenBacklog, zkDb); + self.maxSessionTimeout, self.clientPortListenBacklog, zkDb, self.getInitialConfig()); this.self = self; }