You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ma...@apache.org on 2010/03/12 19:26:46 UTC
svn commit: r922377 - in /hadoop/zookeeper/trunk: ./
src/docs/src/documentation/content/xdocs/
src/java/main/org/apache/zookeeper/server/
src/java/main/org/apache/zookeeper/server/quorum/
src/java/test/org/apache/zookeeper/test/
Author: mahadev
Date: Fri Mar 12 18:26:45 2010
New Revision: 922377
URL: http://svn.apache.org/viewvc?rev=922377&view=rev
Log:
ZOOKEEPER-601. allow configuration of session timeout min/max bounds (phunt via mahadev)
Added:
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java
Modified:
hadoop/zookeeper/trunk/CHANGES.txt
hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerConfig.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerBean.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerMXBean.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/ObserverZooKeeperServer.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java
Modified: hadoop/zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/CHANGES.txt (original)
+++ hadoop/zookeeper/trunk/CHANGES.txt Fri Mar 12 18:26:45 2010
@@ -355,6 +355,9 @@ IMPROVEMENTS:
ZOOKEEPER-692. upgrade junit to latest version (4.8.1) (phunt via mahadev)
+ ZOOKEEPER-601. allow configuration of session timeout min/max bounds (phunt
+ via mahadev)
+
NEW FEATURES:
ZOOKEEPER-539. generate eclipse project via ant target. (phunt via mahadev)
Modified: hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml (original)
+++ hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/zookeeperAdmin.xml Fri Mar 12 18:26:45 2010
@@ -162,7 +162,7 @@
<para>Create a configuration file. This file can be called anything.
Use the following settings as a starting point:</para>
- <para><computeroutput>
+ <programlisting>
tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
@@ -170,7 +170,7 @@ initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
-server.3=zoo3:2888:3888</computeroutput></para>
+server.3=zoo3:2888:3888</programlisting>
<para>You can find the meanings of these and other configuration
settings in the section <xref linkend="sc_configuration" />. A word
@@ -185,7 +185,9 @@ server.3=zoo3:2888:3888</computeroutput>
server id to each machine by creating a file named
<filename>myid</filename>, one for each server, which resides in
that server's data directory, as specified by the configuration file
- parameter <emphasis role="bold">dataDir</emphasis>. The myid file
+ parameter <emphasis role="bold">dataDir</emphasis>.</para></listitem>
+
+ <listitem><para>The myid file
consists of a single line containing only the text of that machine's
id. So <filename>myid</filename> of server 1 would contain the text
"1" and nothing else. The id must be unique within the
@@ -738,7 +740,7 @@ server.3=zoo3:2888:3888</computeroutput>
<term>clientPortBindAddress</term>
<listitem>
- <para><emphasis role="bold">New in 3.3:</emphasis> the
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> the
address (ipv4, ipv6 or hostname) to listen for client
connections; that is, the address that clients attempt
to connect to. This is optional, by default we bind in
@@ -749,6 +751,29 @@ server.3=zoo3:2888:3888</computeroutput>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>minSessionTimeout</term>
+ <listitem>
+ <para>(No Java system property)</para>
+
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> the
+ minimum session timeout in milliseconds that the server
+ will allow the client to negotiate. Defaults to 2 times
+ the <emphasis role="bold">tickTime</emphasis>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>maxSessionTimeout</term>
+ <listitem>
+ <para>(No Java system property)</para>
+
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> the
+ maximum session timeout in milliseconds that the server
+ will allow the client to negotiate. Defaults to 20 times
+ the <emphasis role="bold">tickTime</emphasis>.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</section>
@@ -1007,13 +1032,24 @@ server.3=zoo3:2888:3888</computeroutput>
<variablelist>
<varlistentry>
+ <term>conf</term>
+
+ <listitem>
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> Print
+ details about serving configuration.</para>
+ </listitem>
+
+ </varlistentry>
+
+ <varlistentry>
<term>cons</term>
<listitem>
- <para>List full connection/session details for all clients
- connected to this server. Includes information on numbers
- of packets received/sent, session id, operation latencies,
- last operation performed, etc...</para>
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> List
+ full connection/session details for all clients connected
+ to this server. Includes information on numbers of packets
+ received/sent, session id, operation latencies, last
+ operation performed, etc...</para>
</listitem>
</varlistentry>
@@ -1022,7 +1058,8 @@ server.3=zoo3:2888:3888</computeroutput>
<term>crst</term>
<listitem>
- <para>Reset connection/session statistics for all connections.</para>
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> Reset
+ connection/session statistics for all connections.</para>
</listitem>
</varlistentry>
@@ -1070,7 +1107,8 @@ server.3=zoo3:2888:3888</computeroutput>
<term>srvr</term>
<listitem>
- <para>Lists full details for the server.</para>
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> Lists
+ full details for the server.</para>
</listitem>
</varlistentry>
@@ -1087,7 +1125,8 @@ server.3=zoo3:2888:3888</computeroutput>
<term>wchs</term>
<listitem>
- <para>Lists brief information on watches for the server.</para>
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> Lists
+ brief information on watches for the server.</para>
</listitem>
</varlistentry>
@@ -1095,10 +1134,12 @@ server.3=zoo3:2888:3888</computeroutput>
<term>wchc</term>
<listitem>
- <para>Lists detailed information on watches for the server, by session.
- This outputs a list of sessions(connections) with associated watches
- (paths). Note, depending on the number of watches this operation may be
- expensive (ie impact server performance), use it carefully.</para>
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> Lists
+ detailed information on watches for the server, by
+ session. This outputs a list of sessions(connections)
+ with associated watches (paths). Note, depending on the
+ number of watches this operation may be expensive (ie
+ impact server performance), use it carefully.</para>
</listitem>
</varlistentry>
@@ -1106,10 +1147,12 @@ server.3=zoo3:2888:3888</computeroutput>
<term>wchp</term>
<listitem>
- <para>Lists detailed information on watches for the server, by path.
- This outputs a list of paths (znodes) with associated sessions. Note,
- depending on the number of watches this operation may be expensive
- (ie impact server performance), use it carefully.</para>
+ <para><emphasis role="bold">New in 3.3.0:</emphasis> Lists
+ detailed information on watches for the server, by path.
+ This outputs a list of paths (znodes) with associated
+ sessions. Note, depending on the number of watches this
+ operation may be expensive (ie impact server performance),
+ use it carefully.</para>
</listitem>
</varlistentry>
</variablelist>
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java Fri Mar 12 18:26:45 2010
@@ -115,7 +115,6 @@ public class NIOServerCnxn implements Wa
int maxClientCnxns = 10;
-
/**
* Construct a new server connection factory which will accept an unlimited number
* of concurrent connections from each client (up to the file descriptor
@@ -185,6 +184,10 @@ public class NIOServerCnxn implements Wa
return ss.socket().getLocalPort();
}
+ public int getMaxClientCnxns() {
+ return maxClientCnxns;
+ }
+
private void addCnxn(NIOServerCnxn cnxn) {
synchronized (cnxns) {
cnxns.add(cnxn);
@@ -354,6 +357,10 @@ public class NIOServerCnxn implements Wa
final Factory factory;
+ /** The ZooKeeperServer for this connection. May be null if the server
+ * is not currently serving requests (for example if the server is not
+ * an active quorum participant.
+ */
private final ZooKeeperServer zk;
private SocketChannel sock;
@@ -719,11 +726,13 @@ public class NIOServerCnxn implements Wa
}
sessionTimeout = connReq.getTimeOut();
byte passwd[] = connReq.getPasswd();
- if (sessionTimeout < zk.tickTime * 2) {
- sessionTimeout = zk.tickTime * 2;
- }
- if (sessionTimeout > zk.tickTime * 20) {
- sessionTimeout = zk.tickTime * 20;
+ int minSessionTimeout = zk.getMinSessionTimeout();
+ if (sessionTimeout < minSessionTimeout) {
+ sessionTimeout = minSessionTimeout;
+ }
+ int maxSessionTimeout = zk.getMaxSessionTimeout();
+ if (sessionTimeout > maxSessionTimeout) {
+ sessionTimeout = maxSessionTimeout;
}
// We don't want to receive any packets until we are sure that the
// session is setup
@@ -762,6 +771,13 @@ public class NIOServerCnxn implements Wa
* See <a href="{@docRoot}/../../../docs/zookeeperAdmin.html#sc_zkCommands">
* Zk Admin</a>. this link is for all the commands.
*/
+ private final static int confCmd =
+ ByteBuffer.wrap("conf".getBytes()).getInt();
+
+ /*
+ * See <a href="{@docRoot}/../../../docs/zookeeperAdmin.html#sc_zkCommands">
+ * Zk Admin</a>. this link is for all the commands.
+ */
private final static int consCmd =
ByteBuffer.wrap("cons".getBytes()).getInt();
@@ -853,6 +869,7 @@ public class NIOServerCnxn implements Wa
// specify all of the commands that are available
static {
+ cmd2String.put(confCmd, "conf");
cmd2String.put(consCmd, "cons");
cmd2String.put(crstCmd, "crst");
cmd2String.put(dumpCmd, "dump");
@@ -984,6 +1001,13 @@ public class NIOServerCnxn implements Wa
pwriter.println(e.getValue());
}
return true;
+ } else if (len == confCmd) {
+ if (zk == null) {
+ pwriter.println(ZK_NOT_SERVING);
+ return true;
+ }
+ zk.dumpConf(pwriter);
+ return true;
} else if (len == srstCmd) {
if (zk == null) {
pwriter.println(ZK_NOT_SERVING);
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerConfig.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerConfig.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerConfig.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerConfig.java Fri Mar 12 18:26:45 2010
@@ -31,11 +31,19 @@ import org.apache.zookeeper.server.quoru
*
*/
public class ServerConfig {
+ ////
+ //// If you update the configuration parameters be sure
+ //// to update the "conf" 4letter word
+ ////
protected InetSocketAddress clientPortAddress;
protected String dataDir;
protected String dataLogDir;
protected int tickTime = ZooKeeperServer.DEFAULT_TICK_TIME;
protected int maxClientCnxns;
+ /** defaults to -1 if not set explicitly */
+ protected int minSessionTimeout = -1;
+ /** defaults to -1 if not set explicitly */
+ protected int maxSessionTimeout = -1;
/**
* Parse arguments for server configuration
@@ -85,6 +93,8 @@ public class ServerConfig {
dataLogDir = config.getDataLogDir();
tickTime = config.getTickTime();
maxClientCnxns = config.getMaxClientCnxns();
+ minSessionTimeout = config.getMinSessionTimeout();
+ maxSessionTimeout = config.getMaxSessionTimeout();
}
public InetSocketAddress getClientPortAddress() {
@@ -94,4 +104,8 @@ public class ServerConfig {
public String getDataLogDir() { return dataLogDir; }
public int getTickTime() { return tickTime; }
public int getMaxClientCnxns() { return maxClientCnxns; }
+ /** minimum session timeout in milliseconds, -1 if unset */
+ public int getMinSessionTimeout() { return minSessionTimeout; }
+ /** maximum session timeout in milliseconds, -1 if unset */
+ public int getMaxSessionTimeout() { return maxSessionTimeout; }
}
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java Fri Mar 12 18:26:45 2010
@@ -87,6 +87,10 @@ public class ZooKeeperServer implements
public static final int DEFAULT_TICK_TIME = 3000;
protected int tickTime = DEFAULT_TICK_TIME;
+ /** value of -1 indicates unset, use default */
+ protected int minSessionTimeout = -1;
+ /** value of -1 indicates unset, use default */
+ protected int maxSessionTimeout = -1;
protected SessionTracker sessionTracker;
private FileTxnSnapLog txnLogFactory = null;
private ConcurrentHashMap<Long, Integer> sessionsWithTimeouts;
@@ -134,15 +138,21 @@ public class ZooKeeperServer implements
* @param dataDir the directory to put the data
* @throws IOException
*/
- public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime,
+ public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime,
+ int minSessionTimeout, int maxSessionTimeout,
DataTreeBuilder treeBuilder, ZKDatabase zkDb) throws IOException {
serverStats = new ServerStats(this);
this.txnLogFactory = txnLogFactory;
this.zkDb = zkDb;
this.tickTime = tickTime;
+ this.minSessionTimeout = minSessionTimeout;
+ this.maxSessionTimeout = maxSessionTimeout;
- LOG.info("Created server with tickTime " + tickTime + " datadir " +
- txnLogFactory.getDataDir() + " snapdir " + txnLogFactory.getSnapDir());
+ LOG.info("Created server with tickTime " + tickTime
+ + " minSessionTimeout " + getMinSessionTimeout()
+ + " maxSessionTimeout " + getMaxSessionTimeout()
+ + " datadir " + txnLogFactory.getDataDir()
+ + " snapdir " + txnLogFactory.getSnapDir());
}
/**
@@ -154,13 +164,34 @@ public class ZooKeeperServer implements
*/
public ZooKeeperServer(FileTxnSnapLog txnLogFactory, int tickTime,
DataTreeBuilder treeBuilder) throws IOException {
- this(txnLogFactory, tickTime, treeBuilder, new ZKDatabase(txnLogFactory));
+ this(txnLogFactory, tickTime, -1, -1, treeBuilder,
+ new ZKDatabase(txnLogFactory));
}
public ServerStats serverStats() {
return serverStats;
}
-
+
+ public void dumpConf(PrintWriter pwriter) {
+ pwriter.print("clientPort=");
+ pwriter.println(getClientPort());
+ pwriter.print("dataDir=");
+ pwriter.println(zkDb.snapLog.getSnapDir().getAbsolutePath());
+ pwriter.print("dataLogDir=");
+ pwriter.println(zkDb.snapLog.getDataDir().getAbsolutePath());
+ pwriter.print("tickTime=");
+ pwriter.println(getTickTime());
+ pwriter.print("maxClientCnxns=");
+ pwriter.println(serverCnxnFactory.getMaxClientCnxns());
+ pwriter.print("minSessionTimeout=");
+ pwriter.println(getMinSessionTimeout());
+ pwriter.print("maxSessionTimeout=");
+ pwriter.println(getMaxSessionTimeout());
+
+ pwriter.print("serverId=");
+ pwriter.println(getServerId());
+ }
+
/**
* This constructor is for backward compatibility with the existing unit
* test code.
@@ -169,7 +200,7 @@ public class ZooKeeperServer implements
public ZooKeeperServer(File snapDir, File logDir, int tickTime)
throws IOException {
this( new FileTxnSnapLog(snapDir, logDir),
- tickTime,new BasicDataTreeBuilder());
+ tickTime, new BasicDataTreeBuilder());
}
/**
@@ -177,8 +208,12 @@ public class ZooKeeperServer implements
*
* @throws IOException
*/
- public ZooKeeperServer(FileTxnSnapLog txnLogFactory,DataTreeBuilder treeBuilder) throws IOException {
- this(txnLogFactory, DEFAULT_TICK_TIME, treeBuilder, new ZKDatabase(txnLogFactory));
+ public ZooKeeperServer(FileTxnSnapLog txnLogFactory,
+ DataTreeBuilder treeBuilder)
+ throws IOException
+ {
+ this(txnLogFactory, DEFAULT_TICK_TIME, -1, -1, treeBuilder,
+ new ZKDatabase(txnLogFactory));
}
/**
@@ -622,9 +657,28 @@ public class ZooKeeperServer implements
}
public void setTickTime(int tickTime) {
+ LOG.info("tickTime set to " + tickTime);
this.tickTime = tickTime;
}
+ public int getMinSessionTimeout() {
+ return minSessionTimeout == -1 ? tickTime * 2 : minSessionTimeout;
+ }
+
+ public void setMinSessionTimeout(int min) {
+ LOG.info("minSessionTimeout set to " + min);
+ this.minSessionTimeout = min;
+ }
+
+ public int getMaxSessionTimeout() {
+ return maxSessionTimeout == -1 ? tickTime * 20 : maxSessionTimeout;
+ }
+
+ public void setMaxSessionTimeout(int max) {
+ LOG.info("maxSessionTimeout set to " + max);
+ this.maxSessionTimeout = max;
+ }
+
public int getClientPort() {
return serverCnxnFactory != null ? serverCnxnFactory.ss.socket().getLocalPort() : -1;
}
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java Fri Mar 12 18:26:45 2010
@@ -89,6 +89,35 @@ public class ZooKeeperServerBean impleme
zks.setTickTime(tickTime);
}
+ public int getMaxClientCnxnsPerHost() {
+ NIOServerCnxn.Factory fac = zks.getServerCnxnFactory();
+ if (fac == null) {
+ return -1;
+ }
+ return fac.getMaxClientCnxns();
+ }
+
+ public void setMaxClientCnxnsPerHost(int max) {
+ // if fac is null the exception will be propagated to the client
+ zks.getServerCnxnFactory().maxClientCnxns = max;
+ }
+
+ public int getMinSessionTimeout() {
+ return zks.getMinSessionTimeout();
+ }
+
+ public void setMinSessionTimeout(int min) {
+ zks.setMinSessionTimeout(min);
+ }
+
+ public int getMaxSessionTimeout() {
+ return zks.getMaxSessionTimeout();
+ }
+
+ public void setMaxSessionTimeout(int max) {
+ zks.setMaxSessionTimeout(max);
+ }
+
public long getPacketsReceived() {
return zks.serverStats().getPacketsReceived();
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java Fri Mar 12 18:26:45 2010
@@ -59,14 +59,38 @@ public interface ZooKeeperServerMXBean {
*/
public long getOutstandingRequests();
/**
- * Current TickTime of server
+ * Current TickTime of server in milliseconds
*/
public int getTickTime();
/**
- * Set TickTime of server
+ * Set TickTime of server in milliseconds
*/
public void setTickTime(int tickTime);
+ /** Current maxClientCnxns allowed from a particular host */
+ public int getMaxClientCnxnsPerHost();
+
+ /** Set maxClientCnxns allowed from a particular host */
+ public void setMaxClientCnxnsPerHost(int max);
+
+ /**
+ * Current minSessionTimeout of the server in milliseconds
+ */
+ public int getMinSessionTimeout();
+ /**
+ * Set minSessionTimeout of server in milliseconds
+ */
+ public void setMinSessionTimeout(int min);
+
+ /**
+ * Current maxSessionTimeout of the server in milliseconds
+ */
+ public int getMaxSessionTimeout();
+ /**
+ * Set maxSessionTimeout of server in milliseconds
+ */
+ public void setMaxSessionTimeout(int max);
+
/**
* Reset packet and latency statistics
*/
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMain.java Fri Mar 12 18:26:45 2010
@@ -103,8 +103,10 @@ public class ZooKeeperServerMain {
File(config.dataLogDir), new File(config.dataDir));
zkServer.setTxnLogFactory(ftxn);
zkServer.setTickTime(config.tickTime);
- cnxnFactory = new NIOServerCnxn.Factory(
- config.getClientPortAddress(), config.getMaxClientCnxns());
+ zkServer.setMinSessionTimeout(config.minSessionTimeout);
+ zkServer.setMaxSessionTimeout(config.maxSessionTimeout);
+ cnxnFactory = new NIOServerCnxn.Factory(config.getClientPortAddress(),
+ config.getMaxClientCnxns());
cnxnFactory.startup(zkServer);
cnxnFactory.join();
if (zkServer.isRunning()) {
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FollowerZooKeeperServer.java Fri Mar 12 18:26:45 2010
@@ -40,7 +40,8 @@ import org.apache.zookeeper.txn.TxnHeade
* A SyncRequestProcessor is also spawned off to log proposals from the leader.
*/
public class FollowerZooKeeperServer extends LearnerZooKeeperServer {
- private static final Logger LOG = Logger.getLogger(FollowerZooKeeperServer.class);
+ private static final Logger LOG =
+ Logger.getLogger(FollowerZooKeeperServer.class);
CommitProcessor commitProcessor;
@@ -58,8 +59,8 @@ public class FollowerZooKeeperServer ext
*/
FollowerZooKeeperServer(FileTxnSnapLog logFactory,QuorumPeer self,
DataTreeBuilder treeBuilder, ZKDatabase zkDb) throws IOException {
- super(logFactory, self.tickTime,treeBuilder, zkDb);
- this.self = self;
+ super(logFactory, self.tickTime, self.minSessionTimeout,
+ self.maxSessionTimeout, treeBuilder, zkDb, self);
this.pendingSyncs = new ConcurrentLinkedQueue<Request>();
}
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LeaderZooKeeperServer.java Fri Mar 12 18:26:45 2010
@@ -29,7 +29,6 @@ import org.apache.zookeeper.server.Reque
import org.apache.zookeeper.server.ServerCnxn;
import org.apache.zookeeper.server.SessionTrackerImpl;
import org.apache.zookeeper.server.ZKDatabase;
-import org.apache.zookeeper.server.ZooKeeperServer;
import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
/**
@@ -39,9 +38,7 @@ import org.apache.zookeeper.server.persi
* CommitProcessor -> Leader.ToBeAppliedRequestProcessor ->
* FinalRequestProcessor
*/
-public class LeaderZooKeeperServer extends ZooKeeperServer {
- private QuorumPeer self;
-
+public class LeaderZooKeeperServer extends QuorumZooKeeperServer {
CommitProcessor commitProcessor;
/**
@@ -49,10 +46,10 @@ public class LeaderZooKeeperServer exten
* @param dataDir
* @throws IOException
*/
- LeaderZooKeeperServer(FileTxnSnapLog logFactory,QuorumPeer self,
+ LeaderZooKeeperServer(FileTxnSnapLog logFactory, QuorumPeer self,
DataTreeBuilder treeBuilder, ZKDatabase zkDb) throws IOException {
- super(logFactory, self.tickTime,treeBuilder, zkDb);
- this.self = self;
+ super(logFactory, self.tickTime, self.minSessionTimeout,
+ self.maxSessionTimeout, treeBuilder, zkDb, self);
}
public Leader getLeader(){
@@ -155,6 +152,15 @@ public class LeaderZooKeeperServer exten
return "leader";
}
+ /**
+ * Returns the id of the associated QuorumPeer, which will do for a unique
+ * id of this server.
+ */
+ @Override
+ public long getServerId() {
+ return self.getId();
+ }
+
@Override
protected void revalidateSession(ServerCnxn cnxn, long sessionId,
int sessionTimeout) throws IOException, InterruptedException {
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LearnerZooKeeperServer.java Fri Mar 12 18:26:45 2010
@@ -22,23 +22,22 @@ import java.util.HashMap;
import org.apache.zookeeper.jmx.MBeanRegistry;
import org.apache.zookeeper.server.DataTreeBean;
-import org.apache.zookeeper.server.Request;
import org.apache.zookeeper.server.ServerCnxn;
import org.apache.zookeeper.server.ZKDatabase;
-import org.apache.zookeeper.server.ZooKeeperServer;
import org.apache.zookeeper.server.ZooKeeperServerBean;
import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
/**
* Parent class for all ZooKeeperServers for Learners
*/
-public abstract class LearnerZooKeeperServer extends ZooKeeperServer {
-
- protected QuorumPeer self;
-
+public abstract class LearnerZooKeeperServer extends QuorumZooKeeperServer {
public LearnerZooKeeperServer(FileTxnSnapLog logFactory, int tickTime,
- DataTreeBuilder treeBuilder, ZKDatabase zkDb) throws IOException {
- super(logFactory,tickTime,treeBuilder, zkDb);
+ int minSessionTimeout, int maxSessionTimeout,
+ DataTreeBuilder treeBuilder, ZKDatabase zkDb, QuorumPeer self)
+ throws IOException
+ {
+ super(logFactory, tickTime, minSessionTimeout, maxSessionTimeout,
+ treeBuilder, zkDb, self);
}
/**
@@ -65,6 +64,7 @@ public abstract class LearnerZooKeeperSe
* Returns the id of the associated QuorumPeer, which will do for a unique
* id of this server.
*/
+ @Override
public long getServerId() {
return self.getId();
}
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerBean.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerBean.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerBean.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerBean.java Fri Mar 12 18:26:45 2010
@@ -18,6 +18,7 @@
package org.apache.zookeeper.server.quorum;
+import org.apache.zookeeper.server.NIOServerCnxn;
import org.apache.zookeeper.server.quorum.QuorumPeer;
/**
@@ -42,6 +43,22 @@ public class LocalPeerBean extends Serve
return peer.getTickTime();
}
+ public int getMaxClientCnxnsPerHost() {
+ NIOServerCnxn.Factory fac = peer.getCnxnFactory();
+ if (fac == null) {
+ return -1;
+ }
+ return fac.getMaxClientCnxns();
+ }
+
+ public int getMinSessionTimeout() {
+ return peer.getMinSessionTimeout();
+ }
+
+ public int getMaxSessionTimeout() {
+ return peer.getMaxSessionTimeout();
+ }
+
public int getInitLimit() {
return peer.getInitLimit();
}
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerMXBean.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerMXBean.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerMXBean.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/LocalPeerMXBean.java Fri Mar 12 18:26:45 2010
@@ -31,6 +31,19 @@ public interface LocalPeerMXBean extends
*/
public int getTickTime();
+ /** Current maxClientCnxns allowed from a particular host */
+ public int getMaxClientCnxnsPerHost();
+
+ /**
+ * @return the minimum number of milliseconds allowed for a session timeout
+ */
+ public int getMinSessionTimeout();
+
+ /**
+ * @return the maximum number of milliseconds allowed for a session timeout
+ */
+ public int getMaxSessionTimeout();
+
/**
* @return the number of ticks that the initial sync phase can take
*/
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/ObserverZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/ObserverZooKeeperServer.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/ObserverZooKeeperServer.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/ObserverZooKeeperServer.java Fri Mar 12 18:26:45 2010
@@ -34,7 +34,8 @@ import org.apache.zookeeper.server.persi
*
*/
public class ObserverZooKeeperServer extends LearnerZooKeeperServer {
- private static final Logger LOG = Logger.getLogger(ObserverZooKeeperServer.class);
+ private static final Logger LOG =
+ Logger.getLogger(ObserverZooKeeperServer.class);
/*
* Request processors
@@ -50,8 +51,8 @@ public class ObserverZooKeeperServer ext
ObserverZooKeeperServer(FileTxnSnapLog logFactory, QuorumPeer self,
DataTreeBuilder treeBuilder, ZKDatabase zkDb) throws IOException {
- super(logFactory, self.tickTime, treeBuilder, zkDb);
- this.self = self;
+ super(logFactory, self.tickTime, self.minSessionTimeout,
+ self.maxSessionTimeout, treeBuilder, zkDb, self);
}
public Observer getObserver() {
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java Fri Mar 12 18:26:45 2010
@@ -202,23 +202,35 @@ public class QuorumPeer extends Thread i
/**
* The number of milliseconds of each tick
*/
- int tickTime;
+ protected int tickTime;
+
+ /**
+ * Minimum number of milliseconds to allow for session timeout.
+ * A value of -1 indicates unset, use default.
+ */
+ protected int minSessionTimeout = -1;
+
+ /**
+ * Maximum number of milliseconds to allow for session timeout.
+ * A value of -1 indicates unset, use default.
+ */
+ protected int maxSessionTimeout = -1;
/**
* The number of ticks that the initial synchronization phase can take
*/
- int initLimit;
+ protected int initLimit;
/**
* The number of ticks that can pass between sending a request and getting
* an acknowledgment
*/
- int syncLimit;
+ protected int syncLimit;
/**
* The current tick
*/
- int tick;
+ protected int tick;
/**
* This class simply responds to requests for the current leader of this
@@ -788,9 +800,32 @@ public class QuorumPeer extends Thread i
* Set the number of milliseconds of each tick
*/
public void setTickTime(int tickTime) {
+ LOG.info("tickTime set to " + tickTime);
this.tickTime = tickTime;
}
+ /** minimum session timeout in milliseconds */
+ public int getMinSessionTimeout() {
+ return minSessionTimeout == -1 ? tickTime * 2 : minSessionTimeout;
+ }
+
+ /** minimum session timeout in milliseconds */
+ public void setMinSessionTimeout(int min) {
+ LOG.info("minSessionTimeout set to " + min);
+ this.minSessionTimeout = min;
+ }
+
+ /** maximum session timeout in milliseconds */
+ public int getMaxSessionTimeout() {
+ return maxSessionTimeout == -1 ? tickTime * 20 : maxSessionTimeout;
+ }
+
+ /** minimum session timeout in milliseconds */
+ public void setMaxSessionTimeout(int max) {
+ LOG.info("maxSessionTimeout set to " + max);
+ this.maxSessionTimeout = max;
+ }
+
/**
* Get the number of ticks that the initial synchronization phase can take
*/
@@ -802,6 +837,7 @@ public class QuorumPeer extends Thread i
* Set the number of ticks that the initial synchronization phase can take
*/
public void setInitLimit(int initLimit) {
+ LOG.info("initLimit set to " + initLimit);
this.initLimit = initLimit;
}
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerConfig.java Fri Mar 12 18:26:45 2010
@@ -33,11 +33,11 @@ import java.util.Map.Entry;
import org.apache.log4j.Logger;
import org.apache.zookeeper.server.ZooKeeperServer;
-import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer;
import org.apache.zookeeper.server.quorum.QuorumPeer.LearnerType;
-import org.apache.zookeeper.server.quorum.flexible.QuorumVerifier;
-import org.apache.zookeeper.server.quorum.flexible.QuorumMaj;
+import org.apache.zookeeper.server.quorum.QuorumPeer.QuorumServer;
import org.apache.zookeeper.server.quorum.flexible.QuorumHierarchical;
+import org.apache.zookeeper.server.quorum.flexible.QuorumMaj;
+import org.apache.zookeeper.server.quorum.flexible.QuorumVerifier;
public class QuorumPeerConfig {
private static final Logger LOG = Logger.getLogger(QuorumPeerConfig.class);
@@ -46,12 +46,16 @@ public class QuorumPeerConfig {
protected String dataDir;
protected String dataLogDir;
protected int tickTime = ZooKeeperServer.DEFAULT_TICK_TIME;
+ protected int maxClientCnxns = 10;
+ /** defaults to -1 if not set explicitly */
+ protected int minSessionTimeout = -1;
+ /** defaults to -1 if not set explicitly */
+ protected int maxSessionTimeout = -1;
protected int initLimit;
protected int syncLimit;
protected int electionAlg = 3;
protected int electionPort = 2182;
- protected int maxClientCnxns = 10;
protected final HashMap<Long,QuorumServer> servers =
new HashMap<Long, QuorumServer>();
protected final HashMap<Long,QuorumServer> observers =
@@ -130,14 +134,18 @@ public class QuorumPeerConfig {
clientPortAddress = value.trim();
} else if (key.equals("tickTime")) {
tickTime = Integer.parseInt(value);
+ } else if (key.equals("maxClientCnxns")) {
+ maxClientCnxns = Integer.parseInt(value);
+ } else if (key.equals("minSessionTimeout")) {
+ minSessionTimeout = Integer.parseInt(value);
+ } else if (key.equals("maxSessionTimeout")) {
+ maxSessionTimeout = Integer.parseInt(value);
} else if (key.equals("initLimit")) {
initLimit = Integer.parseInt(value);
} else if (key.equals("syncLimit")) {
syncLimit = Integer.parseInt(value);
} else if (key.equals("electionAlg")) {
electionAlg = Integer.parseInt(value);
- } else if (key.equals("maxClientCnxns")) {
- maxClientCnxns = Integer.parseInt(value);
} else if (key.equals("peerType")) {
if (value.toLowerCase().equals("observer")) {
peerType = LearnerType.OBSERVER;
@@ -229,6 +237,10 @@ public class QuorumPeerConfig {
if (tickTime == 0) {
throw new IllegalArgumentException("tickTime is not set");
}
+ if (minSessionTimeout > maxSessionTimeout) {
+ throw new IllegalArgumentException(
+ "minSessionTimeout must not be larger than maxSessionTimeout");
+ }
if (servers.size() > 1) {
if (initLimit == 0) {
throw new IllegalArgumentException("initLimit is not set");
@@ -305,14 +317,16 @@ public class QuorumPeerConfig {
public String getDataDir() { return dataDir; }
public String getDataLogDir() { return dataLogDir; }
public int getTickTime() { return tickTime; }
+ public int getMaxClientCnxns() { return maxClientCnxns; }
+ public int getMinSessionTimeout() { return minSessionTimeout; }
+ public int getMaxSessionTimeout() { return maxSessionTimeout; }
public int getInitLimit() { return initLimit; }
public int getSyncLimit() { return syncLimit; }
public int getElectionAlg() { return electionAlg; }
- public int getElectionPort() { return electionPort; }
- public int getMaxClientCnxns() { return maxClientCnxns; }
-
- public QuorumVerifier getQuorumVerifier() {
+ public int getElectionPort() { return electionPort; }
+
+ public QuorumVerifier getQuorumVerifier() {
return quorumVerifier;
}
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java (original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeerMain.java Fri Mar 12 18:26:45 2010
@@ -131,6 +131,8 @@ public class QuorumPeerMain {
quorumPeer.setElectionType(config.getElectionAlg());
quorumPeer.setMyid(config.getServerId());
quorumPeer.setTickTime(config.getTickTime());
+ quorumPeer.setMinSessionTimeout(config.getMinSessionTimeout());
+ quorumPeer.setMaxSessionTimeout(config.getMaxSessionTimeout());
quorumPeer.setInitLimit(config.getInitLimit());
quorumPeer.setSyncLimit(config.getSyncLimit());
quorumPeer.setQuorumVerifier(config.getQuorumVerifier());
Added: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java?rev=922377&view=auto
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java (added)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/QuorumZooKeeperServer.java Fri Mar 12 18:26:45 2010
@@ -0,0 +1,62 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.zookeeper.server.quorum;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import org.apache.zookeeper.server.ZKDatabase;
+import org.apache.zookeeper.server.ZooKeeperServer;
+import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
+
+/**
+ * Abstract base class for all ZooKeeperServers that participate in
+ * a quorum.
+ */
+public abstract class QuorumZooKeeperServer extends ZooKeeperServer {
+ protected final QuorumPeer self;
+
+ protected QuorumZooKeeperServer(FileTxnSnapLog logFactory, int tickTime,
+ int minSessionTimeout, int maxSessionTimeout,
+ DataTreeBuilder treeBuilder, ZKDatabase zkDb, QuorumPeer self)
+ throws IOException
+ {
+ super(logFactory, tickTime, minSessionTimeout, maxSessionTimeout,
+ treeBuilder, zkDb);
+ this.self = self;
+ }
+
+ @Override
+ public void dumpConf(PrintWriter pwriter) {
+ super.dumpConf(pwriter);
+
+ pwriter.print("initLimit=");
+ pwriter.println(self.getInitLimit());
+ pwriter.print("syncLimit=");
+ pwriter.println(self.getSyncLimit());
+ pwriter.print("electionAlg=");
+ pwriter.println(self.getElectionType());
+ pwriter.print("electionPort=");
+ pwriter.println(self.quorumPeers.get(self.getId()).electionAddr
+ .getPort());
+ pwriter.print("quorumPort=");
+ pwriter.println(self.quorumPeers.get(self.getId()).addr.getPort());
+ pwriter.print("peerType=");
+ pwriter.println(self.getPeerType().ordinal());
+ }
+}
Modified: hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java (original)
+++ hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsQuorumTest.java Fri Mar 12 18:26:45 2010
@@ -29,14 +29,14 @@ public class FourLetterWordsQuorumTest e
protected static final Logger LOG =
Logger.getLogger(FourLetterWordsQuorumTest.class);
- /** Test the various four letter words
- * ruok,envi,stat,srvr,cons,dump,srst,crst */
+ /** Test the various four letter words */
@Test
public void testFourLetterWords() throws Exception {
String servers[] = hostPort.split(",");
for (String hp : servers) {
verify(hp, "ruok", "imok");
verify(hp, "envi", "java.version");
+ verify(hp, "conf", "clientPort");
verify(hp, "stat", "Outstanding");
verify(hp, "srvr", "Outstanding");
verify(hp, "cons", "queued");
@@ -74,6 +74,7 @@ public class FourLetterWordsQuorumTest e
verify(hp, "ruok", "imok");
verify(hp, "envi", "java.version");
+ verify(hp, "conf", "clientPort");
verify(hp, "stat", "Outstanding");
verify(hp, "srvr", "Outstanding");
verify(hp, "cons", "queued");
Modified: hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java (original)
+++ hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java Fri Mar 12 18:26:45 2010
@@ -28,12 +28,12 @@ public class FourLetterWordsTest extends
protected static final Logger LOG =
Logger.getLogger(FourLetterWordsTest.class);
- /** Test the various four letter words
- * ruok,envi,stat,srvr,cons,dump,srst,crst */
+ /** Test the various four letter words */
@Test
public void testFourLetterWords() throws Exception {
verify("ruok", "imok");
verify("envi", "java.version");
+ verify("conf", "clientPort");
verify("stat", "Outstanding");
verify("srvr", "Outstanding");
verify("cons", "queued");
@@ -71,6 +71,7 @@ public class FourLetterWordsTest extends
verify("ruok", "imok");
verify("envi", "java.version");
+ verify("conf", "clientPort");
verify("stat", "Outstanding");
verify("srvr", "Outstanding");
verify("cons", "queued");
Modified: hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java?rev=922377&r1=922376&r2=922377&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java (original)
+++ hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/SessionTest.java Fri Mar 12 18:26:45 2010
@@ -333,4 +333,36 @@ public class SessionTest extends TestCas
}
}
+ @Test
+ public void testMinMaxSessionTimeout() throws Exception {
+ // override the defaults
+ final int MINSESS = 20000;
+ final int MAXSESS = 240000;
+ ZooKeeperServer zs = serverFactory.getZooKeeperServer();
+ zs.setMinSessionTimeout(MINSESS);
+ zs.setMaxSessionTimeout(MAXSESS);
+
+ // validate typical case - requested == negotiated
+ int timeout = 120000;
+ DisconnectableZooKeeper zk = createClient(timeout);
+ assertEquals(timeout, zk.getSessionTimeout());
+ // make sure tostring works in both cases
+ LOG.info(zk.toString());
+ zk.close();
+ LOG.info(zk.toString());
+
+ // validate lower limit
+ zk = createClient(MINSESS/2);
+ assertEquals(MINSESS, zk.getSessionTimeout());
+ LOG.info(zk.toString());
+ zk.close();
+ LOG.info(zk.toString());
+
+ // validate upper limit
+ zk = createClient(MAXSESS * 2);
+ assertEquals(MAXSESS, zk.getSessionTimeout());
+ LOG.info(zk.toString());
+ zk.close();
+ LOG.info(zk.toString());
+ }
}