:) That is a very good question. This should definitely be fixed in 3.5. I think your general idea in that tracker comment is right on:
One option that would make this a lot less ugly would be to deprecate > support for 4letterwords on the client port in 3.5.0 (dep, not remove, > although provide an option to turn off via config), we'd designate a new > port specifically for 4letterwords. We'd fix this problem on the new port, > the old port would have the existing limitations. > > 3.6.0 we would remove 4lw on client port entirely. > > This is good for a number of reasons IMO – one is that having 4lw on the > client port is a bit of a security issue in some customers - as any client > has access to this port and it cannot by definition be firewalled. Many > admins would like to firewall this. > > In the process we could: > 1) make the new port fully b/w compatible with the existing functionality > 2) enable long lived sessions rather than polling > 3) provide support for "extended command syntax" which would enhance 4lw > features (for example to control the format of the output) > 4) etc... > Especially the points 1-4... we need this to be a handshake model, not just a connect and dump model. I want to work on this, but I will probably need someone a bit better at python to rewrite your monitoring server to use it. I would also welcome help on this issue, if there's someone else is interested in tackling it, I am happy to provide feedback and guidance. Should I start clean and make a new tracker or fold it into 1197? C On Wed, Dec 28, 2011 at 5:12 PM, Patrick Hunt <[email protected]> wrote: > On Wed, Dec 28, 2011 at 1:53 PM, Camille Fournier <[email protected]> > wrote: > > Fair enough. Syncs for all! It's a drop in the bucket compared to the > fact > > that we aren't handling the fundamental socket connections for 4lws > > correctly anyway. > > sorry. I see a blog post coming on. ;-) > > You're referring to the following (any more?) > https://issues.apache.org/jira/browse/ZOOKEEPER-1197 > https://issues.apache.org/jira/browse/ZOOKEEPER-1237 > > is this comment still a correct interpretation of the issue? > > https://issues.apache.org/jira/browse/ZOOKEEPER-737?focusedCommentId=13109067&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13109067 > > What would you like to do about these? I had proposed having a > separate 4lw port some time back in order to simplify/isolate. Should > we do this for 3.5.0? (deprecate the old port usage but keep it around > for a while) Something else? > > Patrick > > > On Wed, Dec 28, 2011 at 4:32 PM, Patrick Hunt <[email protected]> wrote: > > > >> On Wed, Dec 28, 2011 at 1:26 PM, Camille Fournier <[email protected]> > >> wrote: > >> > I'm not sure I agree in the assumption that monitoring pulls happen > >> > infrequently... > >> > >> Well that would be bad news then - see "stat" command processing and > >> similar. All the more reason to look at this in more depth. > >> > >> Patrick > >> > >> > >> > On Dec 28, 2011 4:24 PM, "Patrick Hunt" <[email protected]> wrote: > >> > > >> >> They seem like distinct changes to me. In particular getting the size > >> >> is going to happen infrequently (monitoring pull) so I don't see a > >> >> problem fixing the existing patch in the same way the code currently > >> >> handles cnxns access, with a separate jira to do the refactoring. Am > I > >> >> missing something? > >> >> > >> >> Patrick > >> >> > >> >> On Wed, Dec 28, 2011 at 1:10 PM, Camille Fournier < > [email protected]> > >> >> wrote: > >> >> > I don't think creating it as a flat sync is a good idea, so if we > want > >> >> this > >> >> > I think we need to refactor that structure to be concurrent. > >> >> > > >> >> > C > >> >> > On Dec 28, 2011 2:24 PM, "Patrick Hunt" <[email protected]> wrote: > >> >> > > >> >> >> I think it needs to be fixed. It's obviously incorrect. Also if > >> >> >> someone changes the underlying implementation at some point it > might > >> >> >> bite them. > >> >> >> > >> >> >> Given it wasn't applied to 3.4 branch yet I'd suggest revert, fix > the > >> >> >> patch, then reapply to both branches. (that's easiest/bulletproof > >> imo) > >> >> >> > >> >> >> I'd recommend a new ticket to fix the issues you identified > >> (refactor, > >> >> >> etc...) Neha was looking for further items to work on, this would > be > >> a > >> >> >> good one. > >> >> >> > >> >> >> Patrick > >> >> >> > >> >> >> On Wed, Dec 28, 2011 at 11:18 AM, Camille Fournier < > >> [email protected]> > >> >> >> wrote: > >> >> >> > Also, Pat, the JIRA is still open. I will look to revert in a > >> minute > >> >> >> > although I think the sync changes may necessitate a new JIRA > >> entirely. > >> >> >> > > >> >> >> > On Wed, Dec 28, 2011 at 1:31 PM, Camille Fournier < > >> [email protected] > >> >> > > >> >> >> wrote: > >> >> >> >> After looking for a few mins, here are my observations: > >> >> >> >> > >> >> >> >> The implementation of HashSet in jdk 1.6 uses an underlying > >> HashMap, > >> >> >> which > >> >> >> >> uses a bog-standard int for the size. So, I completely agree > that > >> we > >> >> can > >> >> >> >> get invalid results for a point in time. But does anyone really > >> care > >> >> >> about > >> >> >> >> the *exact* moment-in-time number of cnxns in the system, in a > >> system > >> >> >> where > >> >> >> >> cnxns are coming and going? At best you'll see a value that > will > >> >> likely > >> >> >> be > >> >> >> >> out of date the moment you read it. > >> >> >> >> > >> >> >> >> But, if we're going to do this, I do think there may be a case > for > >> >> >> >> refactoring to a concurrent data structure given that we are > >> randomly > >> >> >> >> syncing on the cnxns set in a way that makes adding additional > >> >> >> interactions > >> >> >> >> with it error prone in this way. And we should definitely > remove > >> that > >> >> >> >> getConnections method, if anyone ever iterated over that set > they > >> >> would > >> >> >> be > >> >> >> >> in a sad concurrency situation. > >> >> >> >> Seems possibly worth a whole new ticket to do this. What do you > >> >> think? > >> >> >> >> > >> >> >> >> Thanks, > >> >> >> >> C > >> >> >> >> > >> >> >> >> On Wed, Dec 28, 2011 at 1:12 PM, Camille Fournier < > >> >> [email protected] > >> >> >> >wrote: > >> >> >> >> > >> >> >> >>> I'm not sure it's meaningful enough to be worth the sync > >> overhead. > >> >> We > >> >> >> >>> should look into that. The alternative if we must is using a > >> proper > >> >> >> >>> concurrent collection. Neha, any thoughts? > >> >> >> >>> > >> >> >> >>> C > >> >> >> >>> On Dec 28, 2011 12:45 PM, "Patrick Hunt" <[email protected]> > >> wrote: > >> >> >> >>> > >> >> >> >>>> I believe there is a bug in this commit. The "cnxns" size() > >> call is > >> >> >> >>>> not being synchronized. This will lead to invalid results at > >> best, > >> >> at > >> >> >> >>>> worst outright failure (hard to say w/o knowing the > >> implementation > >> >> of > >> >> >> >>>> HashSet). > >> >> >> >>>> > >> >> >> >>>> Camille can you work with Neha to get this fixed? Perhaps in > the > >> >> >> >>>> meantime (if it's going to take a while) you can revert this > >> >> change, > >> >> >> >>>> re-open the jira, update the patch, and reapply at some later > >> time? > >> >> >> >>>> > >> >> >> >>>> Patrick > >> >> >> >>>> > >> >> >> >>>> On Wed, Dec 28, 2011 at 6:55 AM, <[email protected]> > wrote: > >> >> >> >>>> > Author: camille > >> >> >> >>>> > Date: Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > New Revision: 1225200 > >> >> >> >>>> > > >> >> >> >>>> > URL: http://svn.apache.org/viewvc?rev=1225200&view=rev > >> >> >> >>>> > Log: > >> >> >> >>>> > ZOOKEEPER-1321: Add number of client connections metric in > JMX > >> >> and > >> >> >> srvr > >> >> >> >>>> (Neha Narkhede via camille) > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > zookeeper/trunk/CHANGES.txt > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxnFactory.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxn.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxnFactory.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerCnxnFactory.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerStats.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/Zab1_0Test.java > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > > zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java > >> >> >> >>>> > > >> >> >> >>>> > Modified: zookeeper/trunk/CHANGES.txt > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- zookeeper/trunk/CHANGES.txt (original) > >> >> >> >>>> > +++ zookeeper/trunk/CHANGES.txt Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -162,6 +162,8 @@ IMPROVEMENTS: > >> >> >> >>>> > > >> >> >> >>>> > ZOOKEEPER-1342. quorum Listener & LearnerCnxAcceptor are > >> >> missing > >> >> >> >>>> > thread names (Rakesh R via phunt) > >> >> >> >>>> > + > >> >> >> >>>> > + ZOOKEEPER-1321. Add number of client connections metric > in > >> JMX > >> >> >> and > >> >> >> >>>> srvr (Neha Narkhede via camille) > >> >> >> >>>> > > >> >> >> >>>> > Release 3.4.0 - > >> >> >> >>>> > > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxn.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -749,7 +749,8 @@ public class NIOServerCnxn extends > Serve > >> >> >> >>>> > > >> >> >> >>>> > print("packets_received", > >> >> stats.getPacketsReceived()); > >> >> >> >>>> > print("packets_sent", stats.getPacketsSent()); > >> >> >> >>>> > - > >> >> >> >>>> > + print("num_alive_connections", > >> >> >> >>>> stats.getNumAliveClientConnections()); > >> >> >> >>>> > + > >> >> >> >>>> > print("outstanding_requests", > >> >> >> >>>> stats.getOutstandingRequests()); > >> >> >> >>>> > > >> >> >> >>>> > print("server_state", stats.getServerState()); > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxnFactory.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxnFactory.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxnFactory.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NIOServerCnxnFactory.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -32,14 +32,14 @@ import java.util.HashMap; > >> >> >> >>>> > import java.util.HashSet; > >> >> >> >>>> > import java.util.Set; > >> >> >> >>>> > > >> >> >> >>>> > +import javax.security.auth.login.Configuration; > >> >> >> >>>> > +import javax.security.auth.login.LoginException; > >> >> >> >>>> > + > >> >> >> >>>> > import org.apache.zookeeper.Login; > >> >> >> >>>> > import > >> >> org.apache.zookeeper.server.auth.SaslServerCallbackHandler; > >> >> >> >>>> > import org.slf4j.Logger; > >> >> >> >>>> > import org.slf4j.LoggerFactory; > >> >> >> >>>> > > >> >> >> >>>> > -import javax.security.auth.login.Configuration; > >> >> >> >>>> > -import javax.security.auth.login.LoginException; > >> >> >> >>>> > - > >> >> >> >>>> > public class NIOServerCnxnFactory extends > ServerCnxnFactory > >> >> >> implements > >> >> >> >>>> Runnable { > >> >> >> >>>> > private static final Logger LOG = > >> >> >> >>>> LoggerFactory.getLogger(NIOServerCnxnFactory.class); > >> >> >> >>>> > > >> >> >> >>>> > @@ -78,7 +78,6 @@ public class NIOServerCnxnFactory extend > >> >> >> >>>> > > >> >> >> >>>> > int maxClientCnxns = 60; > >> >> >> >>>> > > >> >> >> >>>> > - > >> >> >> >>>> > /** > >> >> >> >>>> > * Construct a new server connection factory which will > >> >> accept > >> >> >> an > >> >> >> >>>> unlimited number > >> >> >> >>>> > * of concurrent connections from each client (up to > the > >> file > >> >> >> >>>> descriptor > >> >> >> >>>> > @@ -122,7 +121,7 @@ public class NIOServerCnxnFactory > extend > >> >> >> >>>> > public void setMaxClientCnxnsPerHost(int max) { > >> >> >> >>>> > maxClientCnxns = max; > >> >> >> >>>> > } > >> >> >> >>>> > - > >> >> >> >>>> > + > >> >> >> >>>> > @Override > >> >> >> >>>> > public void start() { > >> >> >> >>>> > // ensure thread is started once and only once > >> >> >> >>>> > @@ -187,7 +186,7 @@ public class NIOServerCnxnFactory > extend > >> >> >> >>>> > return s.size(); > >> >> >> >>>> > } > >> >> >> >>>> > } > >> >> >> >>>> > - > >> >> >> >>>> > + > >> >> >> >>>> > public void run() { > >> >> >> >>>> > while (!ss.socket().isClosed()) { > >> >> >> >>>> > try { > >> >> >> >>>> > @@ -323,4 +322,8 @@ public class NIOServerCnxnFactory > extend > >> >> >> >>>> > return cnxns; > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > + @Override > >> >> >> >>>> > + public int getNumAliveConnections() { > >> >> >> >>>> > + return cnxns.size(); > >> >> >> >>>> > + } > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxn.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxn.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxn.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxn.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -560,7 +560,8 @@ public class NettyServerCnxn extends > Ser > >> >> >> >>>> > > >> >> >> >>>> > print("packets_received", > >> >> stats.getPacketsReceived()); > >> >> >> >>>> > print("packets_sent", stats.getPacketsSent()); > >> >> >> >>>> > - > >> >> >> >>>> > + print("num_alive_connections", > >> >> >> >>>> stats.getNumAliveClientConnections()); > >> >> >> >>>> > + > >> >> >> >>>> > print("outstanding_requests", > >> >> >> >>>> stats.getOutstandingRequests()); > >> >> >> >>>> > > >> >> >> >>>> > print("server_state", stats.getServerState()); > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxnFactory.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxnFactory.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxnFactory.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/NettyServerCnxnFactory.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -411,5 +411,10 @@ public class NettyServerCnxnFactory > exte > >> >> >> >>>> > } > >> >> >> >>>> > } > >> >> >> >>>> > } > >> >> >> >>>> > + > >> >> >> >>>> > + @Override > >> >> >> >>>> > + public int getNumAliveConnections() { > >> >> >> >>>> > + return cnxns.size(); > >> >> >> >>>> > + } > >> >> >> >>>> > > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerCnxnFactory.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerCnxnFactory.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerCnxnFactory.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerCnxnFactory.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -24,15 +24,16 @@ import java.nio.ByteBuffer; > >> >> >> >>>> > import java.util.HashMap; > >> >> >> >>>> > > >> >> >> >>>> > import javax.management.JMException; > >> >> >> >>>> > -import org.slf4j.Logger; > >> >> >> >>>> > -import org.slf4j.LoggerFactory; > >> >> >> >>>> > -import org.apache.zookeeper.jmx.MBeanRegistry; > >> >> >> >>>> > + > >> >> >> >>>> > import org.apache.zookeeper.Login; > >> >> >> >>>> > +import org.apache.zookeeper.jmx.MBeanRegistry; > >> >> >> >>>> > import > >> >> org.apache.zookeeper.server.auth.SaslServerCallbackHandler; > >> >> >> >>>> > +import org.slf4j.Logger; > >> >> >> >>>> > +import org.slf4j.LoggerFactory; > >> >> >> >>>> > > >> >> >> >>>> > public abstract class ServerCnxnFactory { > >> >> >> >>>> > > >> >> >> >>>> > - public static final String > ZOOKEEPER_SERVER_CNXN_FACTORY > >> = > >> >> >> >>>> "zookeeper.serverCnxnFactory"; > >> >> >> >>>> > + public static final String > ZOOKEEPER_SERVER_CNXN_FACTORY > >> = > >> >> >> >>>> "zookeeper.serverCnxnFactory"; > >> >> >> >>>> > > >> >> >> >>>> > public interface PacketProcessor { > >> >> >> >>>> > public void processPacket(ByteBuffer packet, > >> ServerCnxn > >> >> >> src); > >> >> >> >>>> > @@ -49,6 +50,8 @@ public abstract class ServerCnxnFactory > >> >> >> >>>> > > >> >> >> >>>> > public abstract Iterable<ServerCnxn> getConnections(); > >> >> >> >>>> > > >> >> >> >>>> > + public abstract int getNumAliveConnections(); > >> >> >> >>>> > + > >> >> >> >>>> > public abstract void closeSession(long sessionId); > >> >> >> >>>> > > >> >> >> >>>> > public abstract void configure(InetSocketAddress addr, > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerStats.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerStats.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerStats.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ServerStats.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -19,6 +19,7 @@ > >> >> >> >>>> > package org.apache.zookeeper.server; > >> >> >> >>>> > > >> >> >> >>>> > > >> >> >> >>>> > + > >> >> >> >>>> > /** > >> >> >> >>>> > * Basic Server Statistics > >> >> >> >>>> > */ > >> >> >> >>>> > @@ -29,13 +30,14 @@ public class ServerStats { > >> >> >> >>>> > private long minLatency = Long.MAX_VALUE; > >> >> >> >>>> > private long totalLatency = 0; > >> >> >> >>>> > private long count = 0; > >> >> >> >>>> > - > >> >> >> >>>> > + > >> >> >> >>>> > private final Provider provider; > >> >> >> >>>> > > >> >> >> >>>> > public interface Provider { > >> >> >> >>>> > public long getOutstandingRequests(); > >> >> >> >>>> > public long getLastProcessedZxid(); > >> >> >> >>>> > public String getState(); > >> >> >> >>>> > + public int getNumAliveConnections(); > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > public ServerStats(Provider provider) { > >> >> >> >>>> > @@ -75,9 +77,14 @@ public class ServerStats { > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > public String getServerState() { > >> >> >> >>>> > - return provider.getState(); > >> >> >> >>>> > + return provider.getState(); > >> >> >> >>>> > } > >> >> >> >>>> > - > >> >> >> >>>> > + > >> >> >> >>>> > + /** The number of client connections alive to this > >> server */ > >> >> >> >>>> > + public int getNumAliveClientConnections() { > >> >> >> >>>> > + return provider.getNumAliveConnections(); > >> >> >> >>>> > + } > >> >> >> >>>> > + > >> >> >> >>>> > @Override > >> >> >> >>>> > public String toString(){ > >> >> >> >>>> > StringBuilder sb = new StringBuilder(); > >> >> >> >>>> > @@ -85,6 +92,8 @@ public class ServerStats { > >> >> >> >>>> > + getAvgLatency() + "/" + getMaxLatency() + > >> >> "\n"); > >> >> >> >>>> > sb.append("Received: " + getPacketsReceived() + > "\n"); > >> >> >> >>>> > sb.append("Sent: " + getPacketsSent() + "\n"); > >> >> >> >>>> > + sb.append("Connections: " + > >> >> getNumAliveClientConnections() > >> >> >> + > >> >> >> >>>> "\n"); > >> >> >> >>>> > + > >> >> >> >>>> > if (provider != null) { > >> >> >> >>>> > sb.append("Outstanding: " + > >> getOutstandingRequests() > >> >> + > >> >> >> >>>> "\n"); > >> >> >> >>>> > sb.append("Zxid: 0x"+ > >> >> >> >>>> Long.toHexString(getLastProcessedZxid())+ "\n"); > >> >> >> >>>> > @@ -123,7 +132,6 @@ public class ServerStats { > >> >> >> >>>> > packetsReceived = 0; > >> >> >> >>>> > packetsSent = 0; > >> >> >> >>>> > } > >> >> >> >>>> > - > >> >> >> >>>> > synchronized public void reset() { > >> >> >> >>>> > resetLatency(); > >> >> >> >>>> > resetRequestCounters(); > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServer.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -109,7 +109,7 @@ public class ZooKeeperServer implements > >> >> >> >>>> > private ServerCnxnFactory serverCnxnFactory; > >> >> >> >>>> > > >> >> >> >>>> > private final ServerStats serverStats; > >> >> >> >>>> > - > >> >> >> >>>> > + > >> >> >> >>>> > void removeCnxn(ServerCnxn cnxn) { > >> >> >> >>>> > zkDb.removeCnxn(cnxn); > >> >> >> >>>> > } > >> >> >> >>>> > @@ -254,7 +254,6 @@ public class ZooKeeperServer implements > >> >> >> >>>> > } > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > - > >> >> >> >>>> > /** > >> >> >> >>>> > * This should be called from a synchronized block on > >> this! > >> >> >> >>>> > */ > >> >> >> >>>> > @@ -678,6 +677,14 @@ public class ZooKeeperServer > implements > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > /** > >> >> >> >>>> > + * return the total number of client connections that > are > >> >> alive > >> >> >> >>>> > + * to this server > >> >> >> >>>> > + */ > >> >> >> >>>> > + public int getNumAliveConnections() { > >> >> >> >>>> > + return serverCnxnFactory.getNumAliveConnections(); > >> >> >> >>>> > + } > >> >> >> >>>> > + > >> >> >> >>>> > + /** > >> >> >> >>>> > * trunccate the log to get in sync with others > >> >> >> >>>> > * if in a quorum > >> >> >> >>>> > * @param zxid the zxid that it needs to get in sync > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerBean.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -140,4 +140,8 @@ public class ZooKeeperServerBean > impleme > >> >> >> >>>> > serverStats.resetRequestCounters(); > >> >> >> >>>> > serverStats.resetLatency(); > >> >> >> >>>> > } > >> >> >> >>>> > + > >> >> >> >>>> > + public long getNumAliveConnections() { > >> >> >> >>>> > + return zks.getNumAliveConnections(); > >> >> >> >>>> > + } > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/main/org/apache/zookeeper/server/ZooKeeperServerMXBean.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -103,4 +103,8 @@ public interface ZooKeeperServerMXBean > { > >> >> >> >>>> > * Reset max latency statistics only. > >> >> >> >>>> > */ > >> >> >> >>>> > public void resetMaxLatency(); > >> >> >> >>>> > + /** > >> >> >> >>>> > + * @return number of alive client connections > >> >> >> >>>> > + */ > >> >> >> >>>> > + public long getNumAliveConnections(); > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/Zab1_0Test.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/Zab1_0Test.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/Zab1_0Test.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/Zab1_0Test.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -212,6 +212,10 @@ public class Zab1_0Test { > >> >> >> >>>> > } > >> >> >> >>>> > public void closeAll() { > >> >> >> >>>> > } > >> >> >> >>>> > + @Override > >> >> >> >>>> > + public int getNumAliveConnections() { > >> >> >> >>>> > + return 0; > >> >> >> >>>> > + } > >> >> >> >>>> > } > >> >> >> >>>> > static Socket[] getSocketPair() throws IOException { > >> >> >> >>>> > ServerSocket ss = new ServerSocket(); > >> >> >> >>>> > > >> >> >> >>>> > Modified: > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java > >> >> >> >>>> > URL: > >> >> >> >>>> > >> >> >> > >> >> > >> > http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java?rev=1225200&r1=1225199&r2=1225200&view=diff > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> > >> >> > >> > ============================================================================== > >> >> >> >>>> > --- > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java > >> >> >> >>>> (original) > >> >> >> >>>> > +++ > >> >> >> >>>> > >> >> >> > >> >> > >> > zookeeper/trunk/src/java/test/org/apache/zookeeper/test/FourLetterWordsTest.java > >> >> >> >>>> Wed Dec 28 14:55:37 2011 > >> >> >> >>>> > @@ -94,6 +94,9 @@ public class FourLetterWordsTest extends > >> >> >> >>>> > verify("srvr", "Outstanding"); > >> >> >> >>>> > verify("cons", "queued"); > >> >> >> >>>> > verify("mntr", "zk_server_state\tstandalone"); > >> >> >> >>>> > + verify("mntr", "num_alive_connections"); > >> >> >> >>>> > + verify("stat", "Connections"); > >> >> >> >>>> > + verify("srvr", "Connections"); > >> >> >> >>>> > } > >> >> >> >>>> > > >> >> >> >>>> > private String sendRequest(String cmd) throws > IOException > >> { > >> >> >> >>>> > @@ -136,6 +139,8 @@ public class FourLetterWordsTest > extends > >> >> >> >>>> > line = in.readLine(); > >> >> >> >>>> > Assert.assertTrue(Pattern.matches("^Sent: \\d+$", > >> line)); > >> >> >> >>>> > line = in.readLine(); > >> >> >> >>>> > + Assert.assertTrue(Pattern.matches("^Connections: > >> \\d+$", > >> >> >> >>>> line)); > >> >> >> >>>> > + line = in.readLine(); > >> >> >> >>>> > Assert.assertTrue(Pattern.matches("^Outstanding: > >> \\d+$", > >> >> >> line)); > >> >> >> >>>> > line = in.readLine(); > >> >> >> >>>> > Assert.assertTrue(Pattern.matches("^Zxid: > >> >> 0x[\\da-fA-F]+$", > >> >> >> >>>> line)); > >> >> >> >>>> > > >> >> >> >>>> > > >> >> >> >>>> > >> >> >> >>> > >> >> >> > >> >> > >> >
