Sfoglia il codice sorgente

Renamed ZooLog to ZooTrace. Major cleanup of tracing.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/zookeeper/trunk@670949 13f79535-47bb-0310-9956-ffa450edef68
Andrew Kornev 17 anni fa
parent
commit
a6bc7d5479
24 ha cambiato i file con 542 aggiunte e 805 eliminazioni
  1. 11 8
      zookeeper/java/src/com/yahoo/zookeeper/ClientCnxn.java
  2. 9 9
      zookeeper/java/src/com/yahoo/zookeeper/ServerAdminClient.java
  3. 18 15
      zookeeper/java/src/com/yahoo/zookeeper/server/DataTree.java
  4. 3 3
      zookeeper/java/src/com/yahoo/zookeeper/server/FinalRequestProcessor.java
  5. 36 30
      zookeeper/java/src/com/yahoo/zookeeper/server/NIOServerCnxn.java
  6. 5 5
      zookeeper/java/src/com/yahoo/zookeeper/server/PrepRequestProcessor.java
  7. 19 16
      zookeeper/java/src/com/yahoo/zookeeper/server/SessionTrackerImpl.java
  8. 5 5
      zookeeper/java/src/com/yahoo/zookeeper/server/SyncRequestProcessor.java
  9. 5 4
      zookeeper/java/src/com/yahoo/zookeeper/server/WatchManager.java
  10. 48 46
      zookeeper/java/src/com/yahoo/zookeeper/server/ZooKeeperServer.java
  11. 0 364
      zookeeper/java/src/com/yahoo/zookeeper/server/ZooLog.java
  12. 90 0
      zookeeper/java/src/com/yahoo/zookeeper/server/ZooTrace.java
  13. 1 2
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/AuthFastLeaderElection.java
  14. 4 4
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/CommitProcessor.java
  15. 23 20
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/Follower.java
  16. 23 21
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/FollowerHandler.java
  17. 5 5
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/FollowerRequestProcessor.java
  18. 0 1
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/FollowerZooKeeperServer.java
  19. 0 1
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/Leader.java
  20. 0 1
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/LeaderElection.java
  21. 1 3
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/QuorumCnxManager.java
  22. 203 206
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/QuorumPeerConfig.java
  23. 0 1
      zookeeper/java/src/com/yahoo/zookeeper/server/quorum/SendAckRequestProcessor.java
  24. 33 35
      zookeeper/java/src/com/yahoo/zookeeper/server/util/Profiler.java

+ 11 - 8
zookeeper/java/src/com/yahoo/zookeeper/ClientCnxn.java

@@ -61,13 +61,13 @@ import com.yahoo.zookeeper.proto.SetDataResponse;
 import com.yahoo.zookeeper.proto.WatcherEvent;
 import com.yahoo.zookeeper.server.ByteBufferInputStream;
 import com.yahoo.zookeeper.server.ZooKeeperServer;
-import com.yahoo.zookeeper.server.ZooLog;
+import com.yahoo.zookeeper.server.ZooTrace;
 
 /**
  * This class manages the socket i/o for the client. ClientCnxn maintains a list
  * of available servers to connect to and "transparently" switches servers it is
  * connected to as needed.
- * 
+ *
  */
 class ClientCnxn {
     private static final Logger LOG = Logger.getLogger(ZooKeeperServer.class);
@@ -197,7 +197,7 @@ class ClientCnxn {
     /**
      * Creates a connection object. The actual network connect doesn't get
      * established until needed.
-     * 
+     *
      * @param hosts
      *                a comma separated list of hosts that can be connected to.
      * @param connectTimeout
@@ -677,7 +677,7 @@ class ClientCnxn {
                             }
                         }
                     }
-                    
+
                     selector.select(to);
                     Set<SelectionKey> selected;
                     synchronized (this) {
@@ -729,8 +729,8 @@ class ClientCnxn {
                 }
             }
             cleanup();
-            ZooLog.logTextTraceMessage("SendThread exitedloop.",
-                    ZooLog.textTraceMask);
+            ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                                     "SendThread exitedloop.");
         }
 
         private void cleanup() {
@@ -784,8 +784,11 @@ class ClientCnxn {
 
     @SuppressWarnings("unchecked")
     public void close() throws IOException {
-        ZooLog.logTextTraceMessage("Close ClientCnxn for session: " + sessionId
-                + "!", ZooLog.SESSION_TRACE_MASK);
+        long traceMask = ZooTrace.SESSION_TRACE_MASK;
+        if (ZooTrace.isTraceEnabled(LOG, traceMask)) {
+            ZooTrace.logTraceMessage(LOG, traceMask,
+                    "Close ClientCnxn for session: " + sessionId + "!");
+        }
         sendThread.close();
         waitingEvents.add(eventOfDeath);
     }

+ 9 - 9
zookeeper/java/src/com/yahoo/zookeeper/ServerAdminClient.java

@@ -26,7 +26,7 @@ import java.util.StringTokenizer;
 
 import org.apache.log4j.Logger;
 
-import com.yahoo.zookeeper.server.ZooLog;
+import com.yahoo.zookeeper.server.ZooTrace;
 
 public class ServerAdminClient {
     private static final Logger LOG = Logger.getLogger(ServerAdminClient.class);
@@ -34,21 +34,21 @@ public class ServerAdminClient {
     private static long getMask(String mask) {
         long retv = 0;
         if (mask.equalsIgnoreCase("CLIENT_REQUEST_TRACE_MASK")) {
-            retv = ZooLog.CLIENT_REQUEST_TRACE_MASK;
+            retv = ZooTrace.CLIENT_REQUEST_TRACE_MASK;
         } else if (mask.equalsIgnoreCase("CLIENT_DATA_PACKET_TRACE_MASK")) {
-            retv = ZooLog.CLIENT_DATA_PACKET_TRACE_MASK;
+            retv = ZooTrace.CLIENT_DATA_PACKET_TRACE_MASK;
         } else if (mask.equalsIgnoreCase("CLIENT_PING_TRACE_MASK")) {
-            retv = ZooLog.CLIENT_PING_TRACE_MASK;
+            retv = ZooTrace.CLIENT_PING_TRACE_MASK;
         } else if (mask.equalsIgnoreCase("SERVER_PACKET_TRACE_MASK")) {
-            retv = ZooLog.SERVER_PACKET_TRACE_MASK;
+            retv = ZooTrace.SERVER_PACKET_TRACE_MASK;
         } else if (mask.equalsIgnoreCase("SESSION_TRACE_MASK")) {
-            retv = ZooLog.SESSION_TRACE_MASK;
+            retv = ZooTrace.SESSION_TRACE_MASK;
         } else if (mask.equalsIgnoreCase("EVENT_DELIVERY_TRACE_MASK")) {
-            retv = ZooLog.EVENT_DELIVERY_TRACE_MASK;
+            retv = ZooTrace.EVENT_DELIVERY_TRACE_MASK;
         } else if (mask.equalsIgnoreCase("SERVER_PING_TRACE_MASK")) {
-            retv = ZooLog.SERVER_PING_TRACE_MASK;
+            retv = ZooTrace.SERVER_PING_TRACE_MASK;
         } else if (mask.equalsIgnoreCase("WARNING_TRACE_MASK")) {
-            retv = ZooLog.WARNING_TRACE_MASK;
+            retv = ZooTrace.WARNING_TRACE_MASK;
         }
         return retv;
     }

+ 18 - 15
zookeeper/java/src/com/yahoo/zookeeper/server/DataTree.java

@@ -92,7 +92,7 @@ public class DataTree {
     public int getNodeCount(){
         return nodes.size();
     }
-    
+
     public int getWatchCount(){
         return dataWatches.size()+childWatches.size();
     }
@@ -213,10 +213,12 @@ public class DataTree {
             }
             node.parent = null;
         }
-        ZooLog.logTextTraceMessage("dataWatches.triggerWatch " + path,
-                ZooLog.EVENT_DELIVERY_TRACE_MASK);
-        ZooLog.logTextTraceMessage("childWatches.triggerWatch " + parentName,
-                ZooLog.EVENT_DELIVERY_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG,
+                                 ZooTrace.EVENT_DELIVERY_TRACE_MASK,
+                                 "dataWatches.triggerWatch " + path);
+        ZooTrace.logTraceMessage(LOG,
+                                 ZooTrace.EVENT_DELIVERY_TRACE_MASK,
+                                 "childWatches.triggerWatch " + parentName);
         dataWatches.triggerWatch(path, Event.EventNodeDeleted);
         childWatches.triggerWatch(parentName.equals("")?"/":parentName, Event.EventNodeChildrenChanged);
     }
@@ -331,7 +333,7 @@ public class DataTree {
         /**
          * Equality is defined as the clientId and the cxid being the same. This
          * allows us to use hash tables to track completion of transactions.
-         * 
+         *
          * @see java.lang.Object#equals(java.lang.Object)
          */
         @Override
@@ -345,7 +347,7 @@ public class DataTree {
 
         /**
          * See equals() to find the rational for how this hashcode is generated.
-         * 
+         *
          * @see ProcessTxnResult#equals(Object)
          * @see java.lang.Object#hashCode()
          */
@@ -422,10 +424,11 @@ public class DataTree {
             for (String path : list) {
                 try {
                     deleteNode(path);
-                    ZooLog.logTextTraceMessage("Deleting ephemeral node "
-                            + path + " for session "
-                            + Long.toHexString(session),
-                            ZooLog.SESSION_TRACE_MASK);
+                    ZooTrace.logTraceMessage(LOG,
+                                             ZooTrace.SESSION_TRACE_MASK,
+                                             "Deleting ephemeral node "
+                                             + path + " for session "
+                                             + Long.toHexString(session));
                 } catch (KeeperException e) {
                     LOG.error("FIXMSG",e);
                 }
@@ -433,10 +436,10 @@ public class DataTree {
         }
     }
 
-    /** 
-     * this method uses a stringbuilder to create a new 
+    /**
+     * this method uses a stringbuilder to create a new
      * path for children. This is faster than string
-     * appends ( str1 + str2). 
+     * appends ( str1 + str2).
      * @param oa OutputArchive to write to.
      * @param path a string builder.
      * @throws IOException
@@ -460,7 +463,7 @@ public class DataTree {
         int off = path.length();
         if (children != null) {
             for (String child : children) {
-                //since this is single buffer being resused 
+                //since this is single buffer being resused
                 // we need
                 // to truncate the previous bytes of string.
                 path.delete(off, Integer.MAX_VALUE);

+ 3 - 3
zookeeper/java/src/com/yahoo/zookeeper/server/FinalRequestProcessor.java

@@ -71,11 +71,11 @@ public class FinalRequestProcessor implements RequestProcessor {
         // request.type + " id = " + request.sessionId + " cnxn " +
         // request.cnxn);
         // request.addRQRec(">final");
-        long traceMask = ZooLog.CLIENT_REQUEST_TRACE_MASK;
+        long traceMask = ZooTrace.CLIENT_REQUEST_TRACE_MASK;
         if (request.type == OpCode.ping) {
-            traceMask = ZooLog.SERVER_PING_TRACE_MASK;
+            traceMask = ZooTrace.SERVER_PING_TRACE_MASK;
         }
-        ZooLog.logRequest('E', request, "", traceMask);
+        ZooTrace.logRequest(LOG, traceMask, 'E', request, "");
         ProcessTxnResult rc = null;
         synchronized (zks.outstandingChanges) {
             while (!zks.outstandingChanges.isEmpty()

+ 36 - 30
zookeeper/java/src/com/yahoo/zookeeper/server/NIOServerCnxn.java

@@ -105,7 +105,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
                 this.outstandingLimit = 1;
             }
         }
-        
+
         public InetSocketAddress getLocalAddress(){
             return (InetSocketAddress)ss.socket().getLocalSocketAddress();
         }
@@ -120,7 +120,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
                 SelectionKey sk) throws IOException {
             return new NIOServerCnxn(zks, sock, sk, this);
         }
-        
+
         public void run() {
             while (!ss.socket().isClosed()) {
                 try {
@@ -152,8 +152,8 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
                     LOG.error("FIXMSG",e);
                 }
             }
-            ZooLog.logTextTraceMessage("NIOServerCnxn factory exitedloop.",
-                    ZooLog.textTraceMask);
+            ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                                     "NIOServerCnxn factory exitedloop.");
             clear();
             LOG.error("=====> Goodbye cruel world <======");
             // System.exit(0);
@@ -161,7 +161,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
 
         /**
          * clear all the connections in the selector
-         * 
+         *
          */
         synchronized public void clear() {
             selector.wakeup();
@@ -246,10 +246,13 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
         synchronized (factory) {
             try {
                 sk.selector().wakeup();
-                // ZooLog.logTextTraceMessage("Add a buffer to outgoingBuffers",
-                // ZooLog.CLIENT_DATA_PACKET_TRACE_MASK);
-                // ZooLog.logTextTraceMessage("sk " + sk + " is valid: " +
-                // sk.isValid(), ZooLog.CLIENT_DATA_PACKET_TRACE_MASK);
+                // ZooLog.logTraceMessage(LOG,
+                // ZooLog.CLIENT_DATA_PACKET_TRACE_MASK,
+                // "Add a buffer to outgoingBuffers");
+                // ZooLog.logTraceMessage(LOG,
+                // ZooLog.CLIENT_DATA_PACKET_TRACE_MASK,
+                //"sk " + sk + " is valid: " +
+                // sk.isValid(), );
                 outgoingBuffers.add(bb);
                 if (sk.isValid()) {
                     sk.interestOps(sk.interestOps() | SelectionKey.OP_WRITE);
@@ -291,12 +294,15 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
                 }
             }
             if (k.isWritable()) {
-                // ZooLog.logTextTraceMessage("outgoingBuffers.size() = " +
-                // outgoingBuffers.size(),
-                // ZooLog.CLIENT_DATA_PACKET_TRACE_MASK);
+                // ZooLog.logTraceMessage(LOG,
+                // ZooLog.CLIENT_DATA_PACKET_TRACE_MASK
+                // "outgoingBuffers.size() = " +
+                // outgoingBuffers.size());
                 if (outgoingBuffers.size() > 0) {
-                    // ZooLog.logTextTraceMessage("sk " + k + " is valid: " +
-                    // k.isValid(), ZooLog.CLIENT_DATA_PACKET_TRACE_MASK);
+                    // ZooLog.logTraceMessage(LOG,
+                    // ZooLog.CLIENT_DATA_PACKET_TRACE_MASK,
+                    // "sk " + k + " is valid: " +
+                    // k.isValid());
 
                     /*
                      * This is going to reset the buffer position to 0 and the
@@ -361,9 +367,9 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
                         ServerStats.getInstance().incrementPacketsSent();
                         outgoingBuffers.remove();
                     }
-                    // ZooLog.logTextTraceMessage("after send,
-                    // outgoingBuffers.size() = " + outgoingBuffers.size(),
-                    // ZooLog.CLIENT_DATA_PACKET_TRACE_MASK);
+                    // ZooLog.logTraceMessage(LOG,
+                    // ZooLog.CLIENT_DATA_PACKET_TRACE_MASK, "after send,
+                    // outgoingBuffers.size() = " + outgoingBuffers.size());
                 }
                 synchronized (this) {
                     if (outgoingBuffers.size() == 0) {
@@ -511,7 +517,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
             } else if (len == killCmd) {
                 System.exit(0);
             } else if (len == getTraceMaskCmd) {
-                long traceMask = ZooLog.getTextTraceLevel();
+                long traceMask = ZooTrace.getTextTraceLevel();
                 ByteBuffer resp = ByteBuffer.allocate(8);
                 resp.putLong(traceMask);
                 resp.flip();
@@ -529,7 +535,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
                 System.out.println("rc=" + rc);
                 incomingBuffer.flip();
                 long traceMask = incomingBuffer.getLong();
-                ZooLog.setTextTraceLevel(traceMask);
+                ZooTrace.setTextTraceLevel(traceMask);
                 ByteBuffer resp = ByteBuffer.allocate(8);
                 resp.putLong(traceMask);
                 resp.flip();
@@ -602,7 +608,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see com.yahoo.zookeeper.server.ServerCnxnIface#getSessionTimeout()
      */
     public int getSessionTimeout() {
@@ -640,7 +646,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see com.yahoo.zookeeper.server.ServerCnxnIface#close()
      */
     public void close() {
@@ -655,8 +661,8 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
             zk.removeCnxn(this);
         }
 
-        ZooLog.logTextTraceMessage("close  NIOServerCnxn: " + sock,
-                ZooLog.SESSION_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
+                                 "close  NIOServerCnxn: " + sock);
         try {
             /*
              * The following sequence of code is stupid! You would think that
@@ -700,7 +706,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see com.yahoo.zookeeper.server.ServerCnxnIface#sendResponse(com.yahoo.zookeeper.proto.ReplyHeader,
      *      com.yahoo.jute.Record, java.lang.String)
      */
@@ -740,14 +746,14 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see com.yahoo.zookeeper.server.ServerCnxnIface#process(com.yahoo.zookeeper.proto.WatcherEvent)
      */
     synchronized public void process(WatcherEvent event) {
         ReplyHeader h = new ReplyHeader(-1, -1L, 0);
-        ZooLog.logTextTraceMessage("Deliver event " + event + " to "
-                + this.sessionId + " through " + this,
-                ZooLog.EVENT_DELIVERY_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.EVENT_DELIVERY_TRACE_MASK,
+                                 "Deliver event " + event + " to "
+                                 + this.sessionId + " through " + this);
         sendResponse(h, event, "notification");
     }
 
@@ -783,7 +789,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
 
     /*
      * (non-Javadoc)
-     * 
+     *
      * @see com.yahoo.zookeeper.server.ServerCnxnIface#getSessionId()
      */
     public long getSessionId() {
@@ -805,7 +811,7 @@ public class NIOServerCnxn implements Watcher, ServerCnxn {
     private class CnxnStats implements ServerCnxn.Stats{
         long packetsReceived;
         long packetsSent;
-        
+
         /**
          * The number of requests that have been submitted but not yet responded to.
          */

+ 5 - 5
zookeeper/java/src/com/yahoo/zookeeper/server/PrepRequestProcessor.java

@@ -83,11 +83,11 @@ public class PrepRequestProcessor extends Thread implements RequestProcessor {
         try {
             while (true) {
                 Request request = submittedRequests.take();
-                long traceMask = ZooLog.CLIENT_REQUEST_TRACE_MASK;
+                long traceMask = ZooTrace.CLIENT_REQUEST_TRACE_MASK;
                 if (request.type == OpCode.ping) {
-                    traceMask = ZooLog.CLIENT_PING_TRACE_MASK;
+                    traceMask = ZooTrace.CLIENT_PING_TRACE_MASK;
                 }
-                ZooLog.logRequest('P', request, "", traceMask);
+                ZooTrace.logRequest(LOG, traceMask, 'P', request, "");
                 if (Request.requestOfDeath == request) {
                     break;
                 }
@@ -96,8 +96,8 @@ public class PrepRequestProcessor extends Thread implements RequestProcessor {
         } catch (InterruptedException e) {
             LOG.error("FIXMSG",e);
         }
-        ZooLog.logTextTraceMessage("PrepRequestProcessor exited loop!",
-                ZooLog.textTraceMask);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                "PrepRequestProcessor exited loop!");
     }
 
     ChangeRecord getRecordForPath(String path) throws KeeperException {

+ 19 - 16
zookeeper/java/src/com/yahoo/zookeeper/server/SessionTrackerImpl.java

@@ -57,14 +57,14 @@ public class SessionTrackerImpl extends Thread implements SessionTracker {
 
         long sessionId;
     }
-    
+
     public static long initializeNextSession(long id) {
         long nextSid = 0;
         nextSid = (System.currentTimeMillis() << 24) >> 8;
         nextSid =  nextSid | (id <<56);
         return nextSid;
     }
-    
+
     static class SessionSet {
         long expireTime;
 
@@ -140,14 +140,15 @@ public class SessionTrackerImpl extends Thread implements SessionTracker {
         } catch (InterruptedException e) {
             LOG.error("FIXMSG",e);
         }
-        ZooLog.logTextTraceMessage("SessionTrackerImpl exited loop!",
-                ZooLog.textTraceMask);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                                 "SessionTrackerImpl exited loop!");
     }
 
     synchronized public boolean touchSession(long sessionId, int timeout) {
-        ZooLog.logTextTraceMessage("SessionTrackerImpl --- Touch session: "
-                + Long.toHexString(sessionId) + " with timeout " + timeout,
-                ZooLog.CLIENT_PING_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG,
+                                 ZooTrace.CLIENT_PING_TRACE_MASK,
+                                 "SessionTrackerImpl --- Touch session: "
+                + Long.toHexString(sessionId) + " with timeout " + timeout);
         Session s = sessionsById.get(sessionId);
         if (s == null) {
             return false;
@@ -175,8 +176,9 @@ public class SessionTrackerImpl extends Thread implements SessionTracker {
     synchronized public void removeSession(long sessionId) {
         Session s = sessionsById.remove(sessionId);
         sessionsWithTimeout.remove(sessionId);
-        ZooLog.logTextTraceMessage("SessionTrackerImpl --- Removing "
-                + Long.toHexString(sessionId), ZooLog.SESSION_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
+                                 "SessionTrackerImpl --- Removing "
+                + Long.toHexString(sessionId));
         if (s != null) {
             sessionSets.get(s.tickTime).sessions.remove(s);
         }
@@ -184,11 +186,11 @@ public class SessionTrackerImpl extends Thread implements SessionTracker {
 
     public void shutdown() {
         running = false;
-        ZooLog.logTextTraceMessage("Shutdown SessionTrackerImpl!",
-                ZooLog.textTraceMask);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                                 "Shutdown SessionTrackerImpl!");
     }
 
-   
+
     synchronized public long createSession(int sessionTimeout) {
         addSession(nextSessionId, sessionTimeout);
         return nextSessionId++;
@@ -199,12 +201,13 @@ public class SessionTrackerImpl extends Thread implements SessionTracker {
         if (sessionsById.get(id) == null) {
             Session s = new Session(id, 0);
             sessionsById.put(id, s);
-            ZooLog.logTextTraceMessage("SessionTrackerImpl --- Adding " + Long.toHexString(id)
-                    + " " + sessionTimeout, ZooLog.SESSION_TRACE_MASK);
+            ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
+                    "SessionTrackerImpl --- Adding " + Long.toHexString(id)
+                    + " " + sessionTimeout);
         } else {
-            ZooLog.logTextTraceMessage(
+            ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
                     "SessionTrackerImpl --- Existing session " + Long.toHexString(id) + " "
-                            + sessionTimeout, ZooLog.SESSION_TRACE_MASK);
+                            + sessionTimeout);
         }
         touchSession(id, sessionTimeout);
     }

+ 5 - 5
zookeeper/java/src/com/yahoo/zookeeper/server/SyncRequestProcessor.java

@@ -139,8 +139,8 @@ public class SyncRequestProcessor extends Thread implements RequestProcessor {
                     // LOG.warn("Sync>>> cxid = " + si.cxid + " type = " +
                     // si.type + " id = " + si.sessionId + " zxid = " +
                     // Long.toHexString(si.zxid));
-                    ZooLog.logRequest('S', si, "",
-                            ZooLog.CLIENT_REQUEST_TRACE_MASK);
+                    ZooTrace.logRequest(LOG, ZooTrace.CLIENT_REQUEST_TRACE_MASK,
+                            'S', si, "");
                     TxnHeader hdr = si.hdr;
                     if (hdr != null) {
                         if (hdr.getZxid() <= lastZxidSeen) {
@@ -169,7 +169,7 @@ public class SyncRequestProcessor extends Thread implements RequestProcessor {
                                     return SyncRequestProcessor.this
                                             .padLogFile(ffc, fsize);
                                 }
-                            }, PADDING_TIMEOUT, 
+                            }, PADDING_TIMEOUT,
                             "Logfile padding exceeded time threshold"
                         );
                         ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -215,8 +215,8 @@ public class SyncRequestProcessor extends Thread implements RequestProcessor {
             LOG.error("Severe error, exiting",e);
             System.exit(11);
         }
-        ZooLog.logTextTraceMessage("SyncRequestProcessor exiyed!",
-                ZooLog.textTraceMask);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                                     "SyncRequestProcessor exiyed!");
     }
 
     private void flush(LinkedList<Request> toFlush) throws IOException {

+ 5 - 4
zookeeper/java/src/com/yahoo/zookeeper/server/WatchManager.java

@@ -36,9 +36,9 @@ public class WatchManager {
     HashMap<Watcher, HashSet<String>> watch2Paths = new HashMap<Watcher, HashSet<String>>();
 
     synchronized int size(){
-    	return watchTable.size();
+        return watchTable.size();
     }
-    
+
     synchronized void addWatch(String path, Watcher watcher) {
         HashSet<Watcher> list = watchTable.get(path);
         if (list == null) {
@@ -78,8 +78,9 @@ public class WatchManager {
         synchronized (this) {
             watchers = watchTable.remove(path);
             if (watchers == null || watchers.isEmpty()) {
-                ZooLog.logTextTraceMessage("No watchers for " + path,
-                        ZooLog.EVENT_DELIVERY_TRACE_MASK);
+                ZooTrace.logTraceMessage(LOG,
+                        ZooTrace.EVENT_DELIVERY_TRACE_MASK,
+                        "No watchers for " + path);
                 return;
             }
             for (Watcher w : watchers) {

+ 48 - 46
zookeeper/java/src/com/yahoo/zookeeper/server/ZooKeeperServer.java

@@ -132,7 +132,7 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
 
     /*
      * Start up the ZooKeeper server.
-     * 
+     *
      * @param args the port and data directory
      */
     public static void main(String[] args) {
@@ -175,7 +175,7 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
     /**
      * Creates a ZooKeeperServer instance. It sets everything up, but doesn't
      * actually start listening for clients until run() is invoked.
-     * 
+     *
      * @param dataDir
      *            the directory to put the data
      * @throws IOException
@@ -210,7 +210,7 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
 
     /**
      * Default constructor, relies on the config for its agrument values
-     * 
+     *
      * @throws IOException
      */
     public ZooKeeperServer(DataTreeBuilder treeBuilder) throws IOException {
@@ -267,39 +267,39 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
             this.prefix = prefix;
             this.ascending = ascending;
         }
-        
+
         public int compare(File o1, File o2) {
             long z1 = getZxidFromName(o1.getName(), prefix);
             long z2 = getZxidFromName(o2.getName(), prefix);
             int result = z1 < z2 ? -1 : (z1 > z2 ? 1 : 0);
             return ascending ? result : -result;
-        }        
+        }
     }
-    
+
     /**
-     * Sort the list of files. Recency as determined by the version component 
+     * Sort the list of files. Recency as determined by the version component
      * of the file name.
-     * 
+     *
      * @param files array of files
-     * @param prefix files not matching this prefix are assumed to have a 
+     * @param prefix files not matching this prefix are assumed to have a
      * version = -1)
-     * @param ascending true sorted in ascending order, false results in 
+     * @param ascending true sorted in ascending order, false results in
      * descending order
      * @return sorted input files
      */
-    static List<File> 
-        sortDataDir(File[] files, String prefix, boolean ascending) 
+    static List<File>
+        sortDataDir(File[] files, String prefix, boolean ascending)
     {
         List<File> filelist = Arrays.asList(files);
         Collections.sort(filelist, new DataDirFileComparator(prefix, ascending));
         return filelist;
     }
-    
+
     /**
      * Find the log file that starts at, or just before, the snapshot. Return
-     * this and all subsequent logs. Results are ordered by zxid of file, 
+     * this and all subsequent logs. Results are ordered by zxid of file,
      * ascending order.
-     * 
+     *
      * @param logDirList array of files
      * @param snapshotZxid return files at, or before this zxid
      * @return
@@ -346,23 +346,23 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
             }
 
             LOG.warn("Processing snapshot: " + f);
-            
+
             InputStream snapIS =
                 new BufferedInputStream(new FileInputStream(f));
             loadData(BinaryInputArchive.getArchive(snapIS));
-            snapIS.close();            
-            
+            snapIS.close();
+
             dataTree.lastProcessedZxid = zxid;
-            
+
             // Apply the logs on/after the selected snapshot
             File[] logfiles = getLogFiles(dataLogDir.listFiles(), zxid);
             for (File logfile : logfiles) {
                 LOG.warn("Processing log file: " + logfile);
-                
+
                 InputStream logIS =
                     new BufferedInputStream(new FileInputStream(logfile));
                 zxid = playLog(BinaryInputArchive.getArchive(logIS));
-                logIS.close();                
+                logIS.close();
             }
             hzxid = zxid;
 
@@ -377,7 +377,7 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
 
     public void loadData() throws IOException, InterruptedException {
         loadSnapshotAndLogs();
- 
+
         // Clean up dead sessions
         LinkedList<Long> deadSessions = new LinkedList<Long>();
         for (long session : dataTree.getSessions()) {
@@ -402,8 +402,9 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
             long id = ia.readLong("id");
             int to = ia.readInt("timeout");
             sessionsWithTimeouts.put(id, to);
-            ZooLog.logTextTraceMessage("loadData --- session in archive: " + id
-                    + " with timeout: " + to, ZooLog.SESSION_TRACE_MASK);
+            ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
+                                     "loadData --- session in archive: " + id
+                                     + " with timeout: " + to);
             count--;
         }
         dataTree.deserialize(ia, "tree");
@@ -438,21 +439,21 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
                 case OpCode.createSession:
                     sessionsWithTimeouts.put(hdr.getClientId(),
                             ((CreateSessionTxn) txn).getTimeOut());
-                    ZooLog.logTextTraceMessage(
+                    ZooTrace.logTraceMessage(LOG,
+                                             ZooTrace.SESSION_TRACE_MASK,
                             "playLog --- create session in log: "
                                     + Long.toHexString(hdr.getClientId())
                                     + " with timeout: "
-                                    + ((CreateSessionTxn) txn).getTimeOut(),
-                            ZooLog.SESSION_TRACE_MASK);
+                                    + ((CreateSessionTxn) txn).getTimeOut());
                     // give dataTree a chance to sync its lastProcessedZxid
                     dataTree.processTxn(hdr, txn);
                     break;
                 case OpCode.closeSession:
                     sessionsWithTimeouts.remove(hdr.getClientId());
-                    ZooLog.logTextTraceMessage(
+                    ZooTrace.logTraceMessage(LOG,
+                            ZooTrace.SESSION_TRACE_MASK,
                             "playLog --- close session in log: "
-                                    + Long.toHexString(hdr.getClientId()),
-                            ZooLog.SESSION_TRACE_MASK);
+                                    + Long.toHexString(hdr.getClientId()));
                     dataTree.processTxn(hdr, txn);
                     break;
                 default:
@@ -473,7 +474,7 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
     /**
      * maintains a list of last 500 or so committed requests. This is used for
      * fast follower synchronization.
-     * 
+     *
      * @param r
      *            committed request
      */
@@ -617,9 +618,8 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
 
     public void snapshot() throws InterruptedException {
         long lastZxid = dataTree.lastProcessedZxid;
-        ZooLog.logTextTraceMessage(
-                "Snapshotting: " + Long.toHexString(lastZxid),
-                ZooLog.textTraceMask);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                "Snapshotting: " + Long.toHexString(lastZxid));
         try {
             File f =new File(dataDir, "snapshot." + Long.toHexString(lastZxid));
             OutputStream sessOS = new BufferedOutputStream(new FileOutputStream(f));
@@ -627,9 +627,8 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
             snapshot(oa);
             sessOS.flush();
             sessOS.close();
-            ZooLog.logTextTraceMessage(
-                    "Snapshotting finished: " + Long.toHexString(lastZxid),
-                    ZooLog.textTraceMask);
+            ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                    "Snapshotting finished: " + Long.toHexString(lastZxid));
         } catch (IOException e) {
             LOG.error("Severe error, exiting",e);
             // This is a severe error that we cannot recover from,
@@ -659,8 +658,9 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
 
     public void closeSession(long sessionId) throws KeeperException,
             InterruptedException {
-        ZooLog.logTextTraceMessage("ZooKeeperServer --- Session to be closed: "
-                + Long.toHexString(sessionId), ZooLog.SESSION_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
+                                 "ZooKeeperServer --- Session to be closed: "
+                + Long.toHexString(sessionId));
         // we do not want to wait for a session close. send it as soon as we
         // detect it!
         submitRequest(null, sessionId, OpCode.closeSession, 0, null, null);
@@ -668,8 +668,9 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
 
     protected void killSession(long sessionId) {
         dataTree.killSession(sessionId);
-        ZooLog.logTextTraceMessage("ZooKeeperServer --- killSession: "
-                + Long.toHexString(sessionId), ZooLog.SESSION_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
+                                     "ZooKeeperServer --- killSession: "
+                + Long.toHexString(sessionId));
         if (sessionTracker != null) {
             sessionTracker.removeSession(sessionId);
         }
@@ -677,9 +678,9 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
 
     public void expire(long sessionId) {
         try {
-            ZooLog.logTextTraceMessage(
-                    "ZooKeeperServer --- Session to expire: " + Long.toHexString(sessionId),
-                    ZooLog.SESSION_TRACE_MASK);
+            ZooTrace.logTraceMessage(LOG,
+                                     ZooTrace.SESSION_TRACE_MASK,
+                    "ZooKeeperServer --- Session to expire: " + Long.toHexString(sessionId));
             closeSession(sessionId);
         } catch (Exception e) {
             LOG.error("FIXMSG",e);
@@ -817,8 +818,9 @@ public class ZooKeeperServer implements SessionExpirer, ServerStats.Provider {
     protected void revalidateSession(ServerCnxn cnxn, long sessionId,
             int sessionTimeout) throws IOException, InterruptedException {
         boolean rc = sessionTracker.touchSession(sessionId, sessionTimeout);
-        ZooLog.logTextTraceMessage("Session " + Long.toHexString(sessionId) + 
-                " is valid: " + rc,ZooLog.SESSION_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG,ZooTrace.SESSION_TRACE_MASK,
+                                 "Session " + Long.toHexString(sessionId) +
+                " is valid: " + rc);
         cnxn.finishSessionInit(rc);
     }
 

+ 0 - 364
zookeeper/java/src/com/yahoo/zookeeper/server/ZooLog.java

@@ -1,364 +0,0 @@
-/*
- * Copyright 2008, Yahoo! Inc.
- *
- * Licensed 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 com.yahoo.zookeeper.server;
-
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-
-import org.apache.log4j.Logger;
-
-import com.yahoo.zookeeper.server.quorum.QuorumPacket;
-
-/**
- * This class encapsulates and centralizes the logging for the zookeeper server.
- * Log messages go to System.out or System.err depending on the severity of the
- * message.
- * <p>
- * If the methods that do not take an explicit location are used, the location
- * will be derived by creating a stack trace and then looking one frame up the
- * stack trace. (It's a hack, but it works rather well.)
- */
-public class ZooLog {
-    private static final Logger LOG = Logger.getLogger(ZooLog.class);
-
-    static FileChannel tos = null;
-
-    private static String requestTraceFile =
-        System.getProperty("requestTraceFile");
-
-    static boolean loggedTraceError = false;
-
-    static boolean traceInitialiazed = false;
-
-    final static public long CLIENT_REQUEST_TRACE_MASK = 1 << 1;
-
-    final static public long CLIENT_DATA_PACKET_TRACE_MASK = 1 << 2;
-
-    final static public long CLIENT_PING_TRACE_MASK = 1 << 3;
-
-    final static public long SERVER_PACKET_TRACE_MASK = 1 << 4;
-
-    final static public long SESSION_TRACE_MASK = 1 << 5;
-
-    final static public long EVENT_DELIVERY_TRACE_MASK = 1 << 6;
-
-    final static public long SERVER_PING_TRACE_MASK = 1 << 7;
-
-    final static public long WARNING_TRACE_MASK = 1 << 8;
-
-    final static public long JMX_TRACE_MASK = 1 << 9;
-
-    static long binaryTraceMask = CLIENT_REQUEST_TRACE_MASK
-            | SERVER_PACKET_TRACE_MASK | SESSION_TRACE_MASK
-            | WARNING_TRACE_MASK;
-
-    static FileChannel textTos = null;
-
-    static long textTosCreationTime = 0;
-
-    static boolean loggedTextTraceError = false;
-
-    static boolean textTraceInitialiazed = false;
-
-    public static long textTraceMask = CLIENT_REQUEST_TRACE_MASK
-            | SERVER_PACKET_TRACE_MASK | SESSION_TRACE_MASK
-            | WARNING_TRACE_MASK;
-
-    public static void setTextTraceLevel(long mask) {
-        textTraceMask = mask;
-        logTextTraceMessage("Set text trace mask to "
-                + Long.toBinaryString(mask), textTraceMask);
-    }
-
-    static private String stackTrace2Location(StackTraceElement ste) {
-        String location = ste.getFileName() + "@" + ste.getLineNumber();
-        return location;
-    }
-
-    public static long getTextTraceLevel() {
-        return textTraceMask;
-    }
-
-    static private void write(FileChannel os, String msg) throws IOException {
-        os.write(ByteBuffer.wrap(msg.getBytes()));
-    }
-
-    private static final SimpleDateFormat DATELOGFMT =
-        new SimpleDateFormat("MM/dd/yy HH:mm:ss,SSS");
-    
-    static private void writeText(FileChannel os, char rp, Request request,
-            String header, String location) throws IOException {
-        StringBuffer sb = new StringBuffer();
-        long time = System.currentTimeMillis();
-        sb.append(DATELOGFMT.format(new Date(time)));
-        sb.append(" ").append(location).append(" ");
-        sb.append(header).append(":").append(rp);
-        sb.append(request.toString());
-        write(os, sb.toString());
-        write(textTos, "\n");
-    }
-
-    static private void writeText(FileChannel os, String message,
-            String location) throws IOException {
-        StringBuffer sb = new StringBuffer();
-        long time = System.currentTimeMillis();
-        sb.append(DATELOGFMT.format(new Date(time)));
-        sb.append(" ").append(location).append(" ");
-        sb.append(message);
-        write(os, sb.toString());
-        write(textTos, "\n");
-    }
-
-    static private long ROLLOVER_TIME = 24 * 3600 * 1000;
-
-    synchronized private static void checkTextTraceFile() {
-        long time = System.currentTimeMillis();
-
-        if ((time - textTosCreationTime) > ROLLOVER_TIME) {
-            textTraceInitialiazed = false;
-            if (textTos != null) {
-                try {
-                    textTos.close();
-                } catch (IOException e) {
-
-                }
-                textTos = null;
-            }
-        }
-        if (!textTraceInitialiazed) {
-            textTraceInitialiazed = true;
-            Calendar d = new GregorianCalendar();
-            long year = d.get(Calendar.YEAR);
-            long month = d.get(Calendar.MONTH) + 1;
-            long day = d.get(Calendar.DAY_OF_MONTH);
-
-            if (requestTraceFile == null) {
-                return;
-            }
-           String currentTextFile = requestTraceFile +  "." + year + "." + month + "." + day;
-
-            try {
-                textTos = new FileOutputStream(currentTextFile + ".txt", true)
-                        .getChannel();
-                textTosCreationTime = time;
-                write(textTos, "\n");
-            } catch (IOException e) {
-                LOG.error("FIXMSG",e);
-                return;
-            }
-            LOG.warn("*********** Traced requests text saved to "
-                    + currentTextFile + ".txt");
-        }
-    }
-
-    private static void checkTraceFile() {
-        if (!traceInitialiazed) {
-            traceInitialiazed = true;
-            String requestTraceFile = System.getProperty("requestTraceFile");
-            if (requestTraceFile == null) {
-                return;
-            }
-            try {
-                tos = new FileOutputStream(requestTraceFile, true).getChannel();
-            } catch (IOException e) {
-                LOG.error("FIXMSG",e);
-                return;
-            }
-            LOG.warn("*********** Traced requests saved to "
-                    + requestTraceFile);
-        }
-    }
-
-    final static private boolean doLog(long traceMask) {
-        return requestTraceFile != null && (textTraceMask & traceMask) != 0;
-    }
-
-    public static void logTextTraceMessage(String text, long traceMask) {
-        if (!doLog(traceMask)) {
-            return;
-        }
-        synchronized (ZooLog.class) {
-            checkTextTraceFile();
-            if (textTos != null && !loggedTextTraceError
-                    && ((textTraceMask & traceMask) != 0)) {
-                try {
-                    RuntimeException re = new RuntimeException();
-                    StackTraceElement ste = re.getStackTrace()[1];
-                    String location = ZooLog.stackTrace2Location(ste);
-                    writeText(textTos, text, location);
-                } catch (IOException e1) {
-                    LOG.error("FIXMSG", e1);
-                    loggedTextTraceError = true;
-                }
-            }
-        }
-    }
-
-    static public void logQuorumPacket(char direction, QuorumPacket qp,
-            long traceMask) {
-        return;
-
-        // if (!doLog(traceMask)) {
-        //    return;
-        //}
-        //logTextTraceMessage(direction + " "
-        //        + FollowerHandler.packetToString(qp), traceMask);
-    }
-
-    static public void logRequest(char rp, Request request, String header,
-            long traceMask) {
-        if (!doLog(traceMask)) {
-            return;
-        }
-        RuntimeException re = new RuntimeException();
-        StackTraceElement ste = re.getStackTrace()[1];
-        String location = ZooLog.stackTrace2Location(ste);
-        logRequestText(rp, request, header, traceMask, location);
-    }
-
-    static synchronized private void logRequestText(char rp, Request request,
-            String header, long traceMask, String location) {
-        if (!doLog(traceMask)) {
-            return;
-        }
-        checkTextTraceFile();
-        if (textTos != null && !loggedTextTraceError
-                && ((traceMask & textTraceMask) != 0)) {
-            try {
-                writeText(textTos, rp, request, header, location);
-            } catch (IOException e1) {
-                LOG.error("FIXMSG", e1);
-                loggedTextTraceError = true;
-            }
-        }
-    }
-
-    /*
-    public void logRequestBinary(char rp, Request request, long traceMask) {
-        if (!doLog(traceMask)) {
-            return;
-        }
-        synchronized (ZooLog.class) {
-            checkTraceFile();
-            if (tos != null && !loggedTraceError
-                    && ((traceMask & binaryTraceMask) != 0)) {
-                ByteBuffer bb = ByteBuffer.allocate(41);
-                bb.put((byte) rp);
-                bb.putLong(System.currentTimeMillis());
-                bb.putLong(request.sessionId);
-                bb.putInt(request.cxid);
-                bb.putLong(request.hdr == null ? -2 : request.hdr.getZxid());
-                bb.putInt(request.hdr == null ? -2 : request.hdr.getType());
-                bb.putInt(request.type);
-                if (request.request != null) {
-                    bb.putInt(request.request.remaining());
-                } else {
-                    bb.putInt(0);
-                }
-                bb.flip();
-                try {
-                    if (request.request == null) {
-                        tos.write(bb);
-                    } else {
-                        tos.write(new ByteBuffer[] { bb,
-                                request.request.duplicate() });
-                    }
-                } catch (IOException e) {
-                    LOG.error("FIXMSG", e);
-                    loggedTraceError = true;
-                }
-            }
-        }
-    }
-    */
-    /*
-    static private void formatLine(PrintStream ps, String mess, String location) {
-        DateFormat dateFormat = DateFormat.getDateTimeInstance(
-                DateFormat.SHORT, DateFormat.LONG);
-        StringBuffer entry = new StringBuffer(dateFormat.format(new Date())
-                + " [" + location + "]["
-                + Long.toHexString(Thread.currentThread().getId()) + "]: ");
-        while (entry.length() < 45) {
-            entry.append(' ');
-        }
-        entry.append(mess);
-        ps.println(entry);
-    }
-
-    public static void logError(String mess) {
-        RuntimeException re = new RuntimeException();
-        StackTraceElement ste = re.getStackTrace()[1];
-        String location = ZooLog.stackTrace2Location(ste);
-        LOG.error(mess, location);
-        ZooLog.logTextTraceMessage(mess + "location: " + location,
-                textTraceMask);
-    }
-
-    public static void logError(String mess, String location) {
-        formatLine(System.err, mess, location);
-        System.err.flush();
-    }
-
-    public static void logWarn(String mess) {
-        RuntimeException re = new RuntimeException();
-        StackTraceElement ste = re.getStackTrace()[1];
-        String location = ZooLog.stackTrace2Location(ste);
-        LOG.warn(mess, location);
-        ZooLog.logTextTraceMessage(mess + " location: " + location,
-                WARNING_TRACE_MASK);
-    }
-
-    public static void logWarn(String mess, String location) {
-        formatLine(System.out, mess, location);
-        System.out.flush();
-    }
-
-    private static void logException(Throwable e, String mess, String location) {
-        StringWriter sw = new StringWriter();
-        sw.append(mess);
-        sw.append(": ");
-        e.printStackTrace(new PrintWriter(sw));
-        if (location == null) {
-            RuntimeException re = new RuntimeException();
-            StackTraceElement ste = re.getStackTrace()[1];
-            location = stackTrace2Location(ste);
-        }
-        logError(sw.toString(), location);
-    }
-
-    public static void logException(Throwable e, String mess) {
-        RuntimeException re = new RuntimeException();
-        StackTraceElement ste = re.getStackTrace()[1];
-        logException(e, mess, stackTrace2Location(ste));
-    }
-
-    public static void logException(Throwable e) {
-        RuntimeException re = new RuntimeException();
-        StackTraceElement ste = re.getStackTrace()[1];
-        logException(e, "", stackTrace2Location(ste));
-    }
-
-*/
-
-}

+ 90 - 0
zookeeper/java/src/com/yahoo/zookeeper/server/ZooTrace.java

@@ -0,0 +1,90 @@
+/*
+ * Copyright 2008, Yahoo! Inc.
+ *
+ * Licensed 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 com.yahoo.zookeeper.server;
+
+import org.apache.log4j.Logger;
+
+import com.yahoo.zookeeper.server.quorum.QuorumPacket;
+
+/**
+ * This class encapsulates and centralizes tracing for the ZooKeeper server.
+ * Trace messages go to the log with TRACE level.
+ * <p>
+ * Log4j must be correctly configured to capture the TRACE messages.
+ */
+public class ZooTrace {
+    final static public long CLIENT_REQUEST_TRACE_MASK = 1 << 1;
+
+    final static public long CLIENT_DATA_PACKET_TRACE_MASK = 1 << 2;
+
+    final static public long CLIENT_PING_TRACE_MASK = 1 << 3;
+
+    final static public long SERVER_PACKET_TRACE_MASK = 1 << 4;
+
+    final static public long SESSION_TRACE_MASK = 1 << 5;
+
+    final static public long EVENT_DELIVERY_TRACE_MASK = 1 << 6;
+
+    final static public long SERVER_PING_TRACE_MASK = 1 << 7;
+
+    final static public long WARNING_TRACE_MASK = 1 << 8;
+
+    final static public long JMX_TRACE_MASK = 1 << 9;
+
+    private static long traceMask = CLIENT_REQUEST_TRACE_MASK
+            | SERVER_PACKET_TRACE_MASK | SESSION_TRACE_MASK
+            | WARNING_TRACE_MASK;
+
+    public static long getTextTraceLevel() {
+        return traceMask;
+    }
+
+    public static void setTextTraceLevel(long mask) {
+        traceMask = mask;
+        Logger LOG = Logger.getLogger(ZooTrace.class);
+        LOG.info("Set text trace mask to " + Long.toHexString(mask));
+    }
+
+    public static boolean isTraceEnabled(Logger log, long mask) {
+        return log.isTraceEnabled() && (mask & traceMask) != 0;
+    }
+
+    public static void logTraceMessage(Logger log, long mask, String msg) {
+        if (isTraceEnabled(log, mask)) {
+            log.trace(msg);
+        }
+    }
+
+    static public void logQuorumPacket(Logger log, long mask,
+            char direction, QuorumPacket qp)
+    {
+        return;
+
+        // if (isTraceEnabled(log, mask)) {
+        // logTraceMessage(LOG, mask, direction + " "
+        // + FollowerHandler.packetToString(qp));
+        // }
+    }
+
+    static public void logRequest(Logger log, long mask,
+            char rp, Request request, String header)
+    {
+        if (isTraceEnabled(log, mask)) {
+            log.trace(header + ":" + rp + request.toString());
+        }
+    }
+}

+ 1 - 2
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/AuthFastLeaderElection.java

@@ -30,7 +30,6 @@ import java.util.Random;
 
 import org.apache.log4j.Logger;
 
-import com.yahoo.zookeeper.server.ZooLog;
 import com.yahoo.zookeeper.server.quorum.Election;
 import com.yahoo.zookeeper.server.quorum.Vote;
 import com.yahoo.zookeeper.server.quorum.QuorumPeer.QuorumServer;
@@ -904,4 +903,4 @@ public class AuthFastLeaderElection implements Election {
 
         return null;
     }
-}
+}

+ 4 - 4
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/CommitProcessor.java

@@ -24,7 +24,7 @@ import org.apache.log4j.Logger;
 import com.yahoo.zookeeper.ZooDefs.OpCode;
 import com.yahoo.zookeeper.server.Request;
 import com.yahoo.zookeeper.server.RequestProcessor;
-import com.yahoo.zookeeper.server.ZooLog;
+import com.yahoo.zookeeper.server.ZooTrace;
 
 /**
  * This RequestProcessor matches the incoming committed requests with the
@@ -49,7 +49,7 @@ public class CommitProcessor extends Thread implements RequestProcessor {
      * Pending sync requests
      */
     LinkedList<Request> pendingSyncs = new LinkedList<Request>();
-    
+
     RequestProcessor nextProcessor;
 
     public CommitProcessor(RequestProcessor nextProcessor) {
@@ -136,8 +136,8 @@ public class CommitProcessor extends Thread implements RequestProcessor {
         } catch (Exception e) {
             LOG.error("FIXMSG",e);
         }
-        ZooLog.logTextTraceMessage("CommitProcessor exited loop!",
-                ZooLog.textTraceMask);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                                 "CommitProcessor exited loop!");
     }
 
     synchronized public void commit(Request request) {

+ 23 - 20
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/Follower.java

@@ -42,7 +42,7 @@ import com.yahoo.jute.Record;
 import com.yahoo.zookeeper.server.Request;
 import com.yahoo.zookeeper.server.ServerCnxn;
 import com.yahoo.zookeeper.server.ZooKeeperServer;
-import com.yahoo.zookeeper.server.ZooLog;
+import com.yahoo.zookeeper.server.ZooTrace;
 import com.yahoo.zookeeper.server.quorum.QuorumPeer.QuorumServer;
 import com.yahoo.zookeeper.txn.TxnHeader;
 
@@ -68,17 +68,17 @@ public class Follower {
 
     /**
      * write a packet to the leader
-     * 
+     *
      * @param pp
      *                the proposal packet to be sent to the leader
      * @throws IOException
      */
     void writePacket(QuorumPacket pp) throws IOException {
-        long traceMask = ZooLog.SERVER_PACKET_TRACE_MASK;
+        long traceMask = ZooTrace.SERVER_PACKET_TRACE_MASK;
         if (pp.getType() == Leader.PING) {
-            traceMask = ZooLog.SERVER_PING_TRACE_MASK;
+            traceMask = ZooTrace.SERVER_PING_TRACE_MASK;
         }
-        ZooLog.logQuorumPacket('o', pp, traceMask);
+        ZooTrace.logQuorumPacket(LOG, traceMask, 'o', pp);
         synchronized (leaderOs) {
             leaderOs.writeRecord(pp, "packet");
             bufferedOutput.flush();
@@ -87,7 +87,7 @@ public class Follower {
 
     /**
      * read a packet from the leader
-     * 
+     *
      * @param pp
      *                the packet to be instantiated
      * @throws IOException
@@ -96,16 +96,16 @@ public class Follower {
         synchronized (leaderIs) {
             leaderIs.readRecord(pp, "packet");
         }
-        long traceMask = ZooLog.SERVER_PACKET_TRACE_MASK;
+        long traceMask = ZooTrace.SERVER_PACKET_TRACE_MASK;
         if (pp.getType() == Leader.PING) {
-            traceMask = ZooLog.SERVER_PING_TRACE_MASK;
+            traceMask = ZooTrace.SERVER_PING_TRACE_MASK;
         }
-        ZooLog.logQuorumPacket('i', pp, traceMask);
+        ZooTrace.logQuorumPacket(LOG, traceMask, 'i', pp);
     }
 
     /**
      * the main method called by the follower to follow the leader
-     * 
+     *
      * @throws InterruptedException
      */
     void followLeader() throws InterruptedException {
@@ -156,7 +156,7 @@ public class Follower {
             writePacket(qp);
             readPacket(qp);
             long newLeaderZxid = qp.getZxid();
-            
+
             if (qp.getType() != Leader.NEWLEADER) {
                 LOG.error("First packet should have been NEWLEADER");
                 throw new IOException("First packet should have been NEWLEADER");
@@ -178,13 +178,13 @@ public class Follower {
                     }
                 } else if (qp.getType() == Leader.TRUNC) {
                     //we need to truncate the log to the lastzxid of the leader
-                    LOG.warn("Truncating log to get in sync with the leader " 
+                    LOG.warn("Truncating log to get in sync with the leader "
                             + Long.toHexString(qp.getZxid()));
                     zk.truncateLog(qp.getZxid());
                     zk.loadData();
                 }
                 else {
-                    LOG.error("Got unexpected packet from leader " 
+                    LOG.error("Got unexpected packet from leader "
                             + qp.getType() + " exiting ... " );
                     System.exit(13);
                 }
@@ -248,8 +248,9 @@ public class Follower {
                             cnxn.finishSessionInit(valid);
                         }
                     }
-                    ZooLog.logTextTraceMessage("Session " + sessionId
-                            + " is valid: " + valid, ZooLog.SESSION_TRACE_MASK);
+                    ZooTrace.logTraceMessage(LOG, ZooTrace.SESSION_TRACE_MASK,
+                                             "Session " + sessionId
+                                             + " is valid: " + valid);
                     break;
                 case Leader.SYNC:
                     zk.sync();
@@ -278,7 +279,7 @@ public class Follower {
 
     /**
      * validate a seesion for a client
-     * 
+     *
      * @param clientId
      *                the client to be revailidated
      * @param timeout
@@ -297,14 +298,16 @@ public class Follower {
         QuorumPacket qp = new QuorumPacket(Leader.REVALIDATE, -1, baos
                 .toByteArray(), null);
         pendingRevalidations.put(clientId, cnxn);
-        ZooLog.logTextTraceMessage("To validate session " + Long.toHexString(clientId),
-                ZooLog.SESSION_TRACE_MASK);
+        ZooTrace.logTraceMessage(LOG,
+                                 ZooTrace.SESSION_TRACE_MASK,
+                                 "To validate session "
+                                 + Long.toHexString(clientId));
         writePacket(qp);
     }
 
     /**
      * send a request packet to the leader
-     * 
+     *
      * @param request
      *                the request from the client
      * @throws IOException
@@ -330,7 +333,7 @@ public class Follower {
 //        if(request.type == OpCode.sync){
 //            qp = new QuorumPacket(Leader.SYNC, -1, baos
 //                    .toByteArray(), request.authInfo);
-//        }    
+//        }
 //        else{
 //        qp = new QuorumPacket(Leader.REQUEST, -1, baos
 //                .toByteArray(), request.authInfo);

+ 23 - 21
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/FollowerHandler.java

@@ -34,7 +34,7 @@ import com.yahoo.jute.BinaryOutputArchive;
 import com.yahoo.jute.Record;
 import com.yahoo.zookeeper.ZooDefs.OpCode;
 import com.yahoo.zookeeper.server.ZooKeeperServer;
-import com.yahoo.zookeeper.server.ZooLog;
+import com.yahoo.zookeeper.server.ZooTrace;
 import com.yahoo.zookeeper.server.quorum.Leader.Proposal;
 import com.yahoo.zookeeper.txn.TxnHeader;
 
@@ -79,11 +79,11 @@ public class FollowerHandler extends Thread {
     /**
      * This method will use the thread to send packets added to the
      * queuedPackets list
-     * 
+     *
      * @throws InterruptedException
      */
     private void sendPackets() throws InterruptedException {
-        long traceMask = ZooLog.SERVER_PACKET_TRACE_MASK;
+        long traceMask = ZooTrace.SERVER_PACKET_TRACE_MASK;
         while (true) {
             QuorumPacket p;
             p = queuedPackets.take();
@@ -93,9 +93,9 @@ public class FollowerHandler extends Thread {
                 break;
             }
             if (p.getType() == Leader.PING) {
-                traceMask = ZooLog.SERVER_PING_TRACE_MASK;
+                traceMask = ZooTrace.SERVER_PING_TRACE_MASK;
             }
-            ZooLog.logQuorumPacket('o', p, traceMask);
+            ZooTrace.logQuorumPacket(LOG, traceMask, 'o', p);
             try {
                 oa.writeRecord(p, "packet");
                 bufferedOutput.flush();
@@ -193,12 +193,12 @@ public class FollowerHandler extends Thread {
             long peerLastZxid = qp.getZxid();
             int packetToSend = Leader.SNAP;
             boolean logTxns = true;
-          
+
             long zxidToSend = 0;
             // we are sending the diff
             synchronized(leader.zk.committedLog) {
                 if (leader.zk.committedLog.size() != 0) {
-                    if ((leader.zk.maxCommittedLog >= peerLastZxid) 
+                    if ((leader.zk.maxCommittedLog >= peerLastZxid)
                             && (leader.zk.minCommittedLog <= peerLastZxid)) {
                         packetToSend = Leader.DIFF;
                         zxidToSend = leader.zk.maxCommittedLog;
@@ -208,7 +208,7 @@ public class FollowerHandler extends Thread {
                                 QuorumPacket qcommit = new QuorumPacket(Leader.COMMIT, propose.packet.getZxid(),
                                         null, null);
                                 queuePacket(qcommit);
-                              
+
                             }
                         }
                     }
@@ -227,7 +227,7 @@ public class FollowerHandler extends Thread {
                 zxidToSend = leaderLastZxid;
             }
             //check if we decided to send a diff or we need to send a truncate
-            // we avoid using epochs for truncating because epochs make things 
+            // we avoid using epochs for truncating because epochs make things
             // complicated. Two epochs might have the last 32 bits as same.
             // only if we know that there is a committed zxid in the queue that
             // is less than the one the peer has we send a trunc else to make
@@ -237,14 +237,14 @@ public class FollowerHandler extends Thread {
                 // we can ask the follower to truncate the log
                 packetToSend = Leader.TRUNC;
                 zxidToSend = leader.zk.maxCommittedLog;
-                
+
             }
             oa.writeRecord(new QuorumPacket(packetToSend, zxidToSend, null, null), "packet");
             bufferedOutput.flush();
             // only if we are not truncating or fast sycning
             if (packetToSend == Leader.SNAP) {
-                LOG.warn("Sending snapshot last zxid of peer is " 
-                        + Long.toHexString(peerLastZxid) + " " + " zxid of leader is " 
+                LOG.warn("Sending snapshot last zxid of peer is "
+                        + Long.toHexString(peerLastZxid) + " " + " zxid of leader is "
                         + Long.toHexString(leaderLastZxid));
                 // Dump data to follower
                 leader.zk.snapshot(oa);
@@ -276,19 +276,19 @@ public class FollowerHandler extends Thread {
                 qp = new QuorumPacket();
                 ia.readRecord(qp, "packet");
 
-                long traceMask = ZooLog.SERVER_PACKET_TRACE_MASK;
+                long traceMask = ZooTrace.SERVER_PACKET_TRACE_MASK;
                 if (qp.getType() == Leader.PING) {
-                    traceMask = ZooLog.SERVER_PING_TRACE_MASK;
+                    traceMask = ZooTrace.SERVER_PING_TRACE_MASK;
                 }
-                ZooLog.logQuorumPacket('i', qp, traceMask);
+                ZooTrace.logQuorumPacket(LOG, traceMask, 'i', qp);
                 tickOfLastAck = leader.self.tick;
-                
-                                
+
+
                 ByteBuffer bb;
                 long sessionId;
                 int cxid;
                 int type;
-                
+
                 switch (qp.getType()) {
                 case Leader.ACK:
                     leader.processAck(qp.getZxid(), s.getLocalSocketAddress());
@@ -313,8 +313,10 @@ public class FollowerHandler extends Thread {
                     DataOutputStream dos = new DataOutputStream(bos);
                     dos.writeLong(id);
                     boolean valid = leader.zk.touch(id, to);
-                    ZooLog.logTextTraceMessage("Session " + Long.toHexString(id)
-                            + " is valid: "+ valid, ZooLog.SESSION_TRACE_MASK);
+                    ZooTrace.logTraceMessage(LOG,
+                                             ZooTrace.SESSION_TRACE_MASK,
+                                             "Session " + Long.toHexString(id)
+                                             + " is valid: "+ valid);
                     dos.writeBoolean(valid);
                     qp.setData(bos.toByteArray());
                     queuedPackets.add(qp);
@@ -380,7 +382,7 @@ public class FollowerHandler extends Thread {
     void queuePacket(QuorumPacket p) {
         queuedPackets.add(p);
     }
-    
+
     public boolean synced() {
         return isAlive()
                 && tickOfLastAck >= leader.self.tick - leader.self.syncLimit;

+ 5 - 5
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/FollowerRequestProcessor.java

@@ -23,7 +23,7 @@ import org.apache.log4j.Logger;
 import com.yahoo.zookeeper.ZooDefs.OpCode;
 import com.yahoo.zookeeper.server.RequestProcessor;
 import com.yahoo.zookeeper.server.Request;
-import com.yahoo.zookeeper.server.ZooLog;
+import com.yahoo.zookeeper.server.ZooTrace;
 
 /**
  * This RequestProcessor forwards any requests that modify the state of the
@@ -52,8 +52,8 @@ public class FollowerRequestProcessor extends Thread implements
         try {
             while (!finished) {
                 Request request = queuedRequests.take();
-                ZooLog.logRequest('F', request, "",
-                        ZooLog.CLIENT_REQUEST_TRACE_MASK);
+                ZooTrace.logRequest(LOG, ZooTrace.CLIENT_REQUEST_TRACE_MASK,
+                        'F', request, "");
                 if (request == Request.requestOfDeath) {
                     break;
                 }
@@ -76,8 +76,8 @@ public class FollowerRequestProcessor extends Thread implements
         } catch (Exception e) {
             LOG.error("FIXMSG",e);
         }
-        ZooLog.logTextTraceMessage("FollowerRequestProcessor exited loop!",
-                ZooLog.textTraceMask);
+        ZooTrace.logTraceMessage(LOG, ZooTrace.getTextTraceLevel(),
+                                 "FollowerRequestProcessor exited loop!");
     }
 
     public void processRequest(Request request) {

+ 0 - 1
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/FollowerZooKeeperServer.java

@@ -30,7 +30,6 @@ import com.yahoo.zookeeper.server.RequestProcessor;
 import com.yahoo.zookeeper.server.ServerCnxn;
 import com.yahoo.zookeeper.server.SyncRequestProcessor;
 import com.yahoo.zookeeper.server.ZooKeeperServer;
-import com.yahoo.zookeeper.server.ZooLog;
 import com.yahoo.zookeeper.txn.TxnHeader;
 
 /**

+ 0 - 1
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/Leader.java

@@ -33,7 +33,6 @@ import com.yahoo.jute.BinaryOutputArchive;
 import com.yahoo.zookeeper.server.FinalRequestProcessor;
 import com.yahoo.zookeeper.server.Request;
 import com.yahoo.zookeeper.server.RequestProcessor;
-import com.yahoo.zookeeper.server.ZooLog;
 
 /**
  * This class has the control logic for the Leader.

+ 0 - 1
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/LeaderElection.java

@@ -29,7 +29,6 @@ import java.util.Map.Entry;
 
 import org.apache.log4j.Logger;
 
-import com.yahoo.zookeeper.server.ZooLog;
 import com.yahoo.zookeeper.server.quorum.Vote;
 import com.yahoo.zookeeper.server.quorum.QuorumPeer.QuorumServer;
 import com.yahoo.zookeeper.server.quorum.QuorumPeer.ServerState;

+ 1 - 3
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/QuorumCnxManager.java

@@ -29,8 +29,6 @@ import java.util.concurrent.ArrayBlockingQueue;
 
 import org.apache.log4j.Logger;
 
-import com.yahoo.zookeeper.server.ZooLog;
-
 /**
  * This class implements a connection manager for leader election using TCP. It
  * maintains one coonection for every pair of servers. The tricky part is to
@@ -651,4 +649,4 @@ class QuorumCnxManager extends Thread {
             }
         }
     }
-}
+}

+ 203 - 206
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/QuorumPeerConfig.java

@@ -1,211 +1,208 @@
 /*
- * Copyright 2008, Yahoo! Inc.
- *
- * Licensed 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 com.yahoo.zookeeper.server.quorum;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.net.InetSocketAddress;
-import java.util.ArrayList;
-import java.util.Properties;
-import java.util.Map.Entry;
+ * Copyright 2008, Yahoo! Inc.
+ *
+ * Licensed 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 com.yahoo.zookeeper.server.quorum;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.net.InetSocketAddress;
+import java.util.ArrayList;
+import java.util.Properties;
+import java.util.Map.Entry;
 
 import org.apache.log4j.Logger;
-
-import com.yahoo.zookeeper.server.ServerConfig;
-import com.yahoo.zookeeper.server.ZooLog;
-import com.yahoo.zookeeper.server.quorum.QuorumPeer.QuorumServer;
-
-public class QuorumPeerConfig extends ServerConfig {
+
+import com.yahoo.zookeeper.server.ServerConfig;
+import com.yahoo.zookeeper.server.quorum.QuorumPeer.QuorumServer;
+
+public class QuorumPeerConfig extends ServerConfig {
     private static final Logger LOG = Logger.getLogger(QuorumPeerConfig.class);
 
-    private int tickTime;
-    private int initLimit;
-    private int syncLimit;
-    private int electionAlg;
-    private int electionPort;
-    private ArrayList<QuorumServer> servers = null;
-    private long serverId;
-
-    private QuorumPeerConfig(int port, String dataDir, String dataLogDir) {
-        super(port, dataDir, dataLogDir);
-    }
-
-    public static void parse(String[] args) {
-        if(instance!=null)
-            return;
-        
-        try {
-            if (args.length != 1) {
-                System.err.println("USAGE: configFile");
-                System.exit(2);
-            }
-            File zooCfgFile = new File(args[0]);
-            if (!zooCfgFile.exists()) {
-                LOG.error(zooCfgFile.toString() + " file is missing");
-                System.exit(2);
-            }
-            Properties cfg = new Properties();
-            cfg.load(new FileInputStream(zooCfgFile));
-            ArrayList<QuorumServer> servers = new ArrayList<QuorumServer>();
-            String dataDir = null;
-            String dataLogDir = null;
-            int clientPort = 0;
-            int tickTime = 0;
-            int initLimit = 0;
-            int syncLimit = 0;
-            int electionAlg = 0;
-            int electionPort = 0;
-            for (Entry<Object, Object> entry : cfg.entrySet()) {
-                String key = entry.getKey().toString();
-                String value = entry.getValue().toString();
-                if (key.equals("dataDir")) {
-                    dataDir = value;
-                } else if (key.equals("dataLogDir")) {
-                    dataLogDir = value;
-                } else if (key.equals("traceFile")) {
-                    System.setProperty("requestTraceFile", value);
-                } else if (key.equals("clientPort")) {
-                    clientPort = Integer.parseInt(value);
-                } else if (key.equals("tickTime")) {
-                    tickTime = 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("electionPort")) {
-                    electionPort = Integer.parseInt(value);
-                } else if (key.startsWith("server.")) {
-                    int dot = key.indexOf('.');
-                    long sid = Long.parseLong(key.substring(dot + 1));
-                    String parts[] = value.split(":");
-                    if (parts.length != 2) {
-                        LOG.error(value
-                                + " does not have the form host:port");
-                    }
-                    InetSocketAddress addr = new InetSocketAddress(parts[0],
-                            Integer.parseInt(parts[1]));
-                    servers.add(new QuorumServer(sid, addr));
-                } else {
-                    System.setProperty("zookeeper." + key, value);
-                }
-            }
-            if (dataDir == null) {
-                LOG.error("dataDir is not set");
-                System.exit(2);
-            }
-            if (dataLogDir == null) {
-                dataLogDir = dataDir;
-            } else {
-                if (!new File(dataLogDir).isDirectory()) {
-                    LOG.error("dataLogDir " + dataLogDir+ " is missing.");
-                    System.exit(2);
-                }
-            }
-            if (clientPort == 0) {
-                LOG.error("clientPort is not set");
-                System.exit(2);
-            }
-            if (tickTime == 0) {
-                LOG.error("tickTime is not set");
-                System.exit(2);
-            }
-            if (servers.size() > 1 && initLimit == 0) {
-                LOG.error("initLimit is not set");
-                System.exit(2);
-            }
-            if (servers.size() > 1 && syncLimit == 0) {
-                LOG.error("syncLimit is not set");
-                System.exit(2);
-            }
-            QuorumPeerConfig conf = new QuorumPeerConfig(clientPort, dataDir,
-                    dataLogDir);
-            conf.tickTime = tickTime;
-            conf.initLimit = initLimit;
-            conf.syncLimit = syncLimit;
-            conf.electionAlg = electionAlg;
-            conf.electionPort = electionPort;
-            conf.servers = servers;
-            if (servers.size() > 1) {
-                File myIdFile = new File(dataDir, "myid");
-                if (!myIdFile.exists()) {
-                    LOG.error(myIdFile.toString() + " file is missing");
-                    System.exit(2);
-                }
-                BufferedReader br = new BufferedReader(new FileReader(myIdFile));
-                String myIdString = br.readLine();
-                try {
-                    conf.serverId = Long.parseLong(myIdString);
-                } catch (NumberFormatException e) {
-                    LOG.error(myIdString + " is not a number");
-                    System.exit(2);
-                }
-            }
-            instance=conf;
-        } catch (Exception e) {
-            LOG.error("FIXMSG",e);
-            System.exit(2);
-        }
-    }
-
-    protected boolean isStandaloneServer(){
-        return QuorumPeerConfig.getServers().size() <= 1;
-    }
-
-    public static int getTickTime() {
-        assert instance instanceof QuorumPeerConfig;
-        return ((QuorumPeerConfig)instance).tickTime;
-    }
-
-    public static int getInitLimit() {
-        assert instance instanceof QuorumPeerConfig;
-        return ((QuorumPeerConfig)instance).initLimit;
-    }
-
-    public static int getSyncLimit() {
-        assert instance instanceof QuorumPeerConfig;
-        return ((QuorumPeerConfig)instance).syncLimit;
-    }
-
-    public static int getElectionAlg() {
-        assert instance instanceof QuorumPeerConfig;
-        return ((QuorumPeerConfig)instance).electionAlg;
-    }
-
-    public static int getElectionPort() {
-        assert instance instanceof QuorumPeerConfig;
-        return ((QuorumPeerConfig)instance).electionPort;
-    }
-    
-    public static ArrayList<QuorumServer> getServers() {
-        assert instance instanceof QuorumPeerConfig;
-        return ((QuorumPeerConfig)instance).servers;
-    }
-
-    public static int getQuorumSize(){
-        assert instance instanceof QuorumPeerConfig;
-        return ((QuorumPeerConfig)instance).servers.size();        
-    }
-    
-    public static long getServerId() {
-        assert instance instanceof QuorumPeerConfig;
-        return ((QuorumPeerConfig)instance).serverId;
-    }
-}
+    private int tickTime;
+    private int initLimit;
+    private int syncLimit;
+    private int electionAlg;
+    private int electionPort;
+    private ArrayList<QuorumServer> servers = null;
+    private long serverId;
+
+    private QuorumPeerConfig(int port, String dataDir, String dataLogDir) {
+        super(port, dataDir, dataLogDir);
+    }
+
+    public static void parse(String[] args) {
+        if(instance!=null)
+            return;
+
+        try {
+            if (args.length != 1) {
+                System.err.println("USAGE: configFile");
+                System.exit(2);
+            }
+            File zooCfgFile = new File(args[0]);
+            if (!zooCfgFile.exists()) {
+                LOG.error(zooCfgFile.toString() + " file is missing");
+                System.exit(2);
+            }
+            Properties cfg = new Properties();
+            cfg.load(new FileInputStream(zooCfgFile));
+            ArrayList<QuorumServer> servers = new ArrayList<QuorumServer>();
+            String dataDir = null;
+            String dataLogDir = null;
+            int clientPort = 0;
+            int tickTime = 0;
+            int initLimit = 0;
+            int syncLimit = 0;
+            int electionAlg = 0;
+            int electionPort = 0;
+            for (Entry<Object, Object> entry : cfg.entrySet()) {
+                String key = entry.getKey().toString();
+                String value = entry.getValue().toString();
+                if (key.equals("dataDir")) {
+                    dataDir = value;
+                } else if (key.equals("dataLogDir")) {
+                    dataLogDir = value;
+                } else if (key.equals("clientPort")) {
+                    clientPort = Integer.parseInt(value);
+                } else if (key.equals("tickTime")) {
+                    tickTime = 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("electionPort")) {
+                    electionPort = Integer.parseInt(value);
+                } else if (key.startsWith("server.")) {
+                    int dot = key.indexOf('.');
+                    long sid = Long.parseLong(key.substring(dot + 1));
+                    String parts[] = value.split(":");
+                    if (parts.length != 2) {
+                        LOG.error(value
+                                + " does not have the form host:port");
+                    }
+                    InetSocketAddress addr = new InetSocketAddress(parts[0],
+                            Integer.parseInt(parts[1]));
+                    servers.add(new QuorumServer(sid, addr));
+                } else {
+                    System.setProperty("zookeeper." + key, value);
+                }
+            }
+            if (dataDir == null) {
+                LOG.error("dataDir is not set");
+                System.exit(2);
+            }
+            if (dataLogDir == null) {
+                dataLogDir = dataDir;
+            } else {
+                if (!new File(dataLogDir).isDirectory()) {
+                    LOG.error("dataLogDir " + dataLogDir+ " is missing.");
+                    System.exit(2);
+                }
+            }
+            if (clientPort == 0) {
+                LOG.error("clientPort is not set");
+                System.exit(2);
+            }
+            if (tickTime == 0) {
+                LOG.error("tickTime is not set");
+                System.exit(2);
+            }
+            if (servers.size() > 1 && initLimit == 0) {
+                LOG.error("initLimit is not set");
+                System.exit(2);
+            }
+            if (servers.size() > 1 && syncLimit == 0) {
+                LOG.error("syncLimit is not set");
+                System.exit(2);
+            }
+            QuorumPeerConfig conf = new QuorumPeerConfig(clientPort, dataDir,
+                    dataLogDir);
+            conf.tickTime = tickTime;
+            conf.initLimit = initLimit;
+            conf.syncLimit = syncLimit;
+            conf.electionAlg = electionAlg;
+            conf.electionPort = electionPort;
+            conf.servers = servers;
+            if (servers.size() > 1) {
+                File myIdFile = new File(dataDir, "myid");
+                if (!myIdFile.exists()) {
+                    LOG.error(myIdFile.toString() + " file is missing");
+                    System.exit(2);
+                }
+                BufferedReader br = new BufferedReader(new FileReader(myIdFile));
+                String myIdString = br.readLine();
+                try {
+                    conf.serverId = Long.parseLong(myIdString);
+                } catch (NumberFormatException e) {
+                    LOG.error(myIdString + " is not a number");
+                    System.exit(2);
+                }
+            }
+            instance=conf;
+        } catch (Exception e) {
+            LOG.error("FIXMSG",e);
+            System.exit(2);
+        }
+    }
+
+    protected boolean isStandaloneServer(){
+        return QuorumPeerConfig.getServers().size() <= 1;
+    }
+
+    public static int getTickTime() {
+        assert instance instanceof QuorumPeerConfig;
+        return ((QuorumPeerConfig)instance).tickTime;
+    }
+
+    public static int getInitLimit() {
+        assert instance instanceof QuorumPeerConfig;
+        return ((QuorumPeerConfig)instance).initLimit;
+    }
+
+    public static int getSyncLimit() {
+        assert instance instanceof QuorumPeerConfig;
+        return ((QuorumPeerConfig)instance).syncLimit;
+    }
+
+    public static int getElectionAlg() {
+        assert instance instanceof QuorumPeerConfig;
+        return ((QuorumPeerConfig)instance).electionAlg;
+    }
+
+    public static int getElectionPort() {
+        assert instance instanceof QuorumPeerConfig;
+        return ((QuorumPeerConfig)instance).electionPort;
+    }
+
+    public static ArrayList<QuorumServer> getServers() {
+        assert instance instanceof QuorumPeerConfig;
+        return ((QuorumPeerConfig)instance).servers;
+    }
+
+    public static int getQuorumSize(){
+        assert instance instanceof QuorumPeerConfig;
+        return ((QuorumPeerConfig)instance).servers.size();
+    }
+
+    public static long getServerId() {
+        assert instance instanceof QuorumPeerConfig;
+        return ((QuorumPeerConfig)instance).serverId;
+    }
+}

+ 0 - 1
zookeeper/java/src/com/yahoo/zookeeper/server/quorum/SendAckRequestProcessor.java

@@ -23,7 +23,6 @@ import org.apache.log4j.Logger;
 import com.yahoo.zookeeper.ZooDefs.OpCode;
 import com.yahoo.zookeeper.server.Request;
 import com.yahoo.zookeeper.server.RequestProcessor;
-import com.yahoo.zookeeper.server.ZooLog;
 
 public class SendAckRequestProcessor implements RequestProcessor {
     private static final Logger LOG = Logger.getLogger(SendAckRequestProcessor.class);

+ 33 - 35
zookeeper/java/src/com/yahoo/zookeeper/server/util/Profiler.java

@@ -1,40 +1,38 @@
 /*
- * Copyright 2008, Yahoo! Inc.
- *
- * Licensed 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 com.yahoo.zookeeper.server.util;
-
+ * Copyright 2008, Yahoo! Inc.
+ *
+ * Licensed 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 com.yahoo.zookeeper.server.util;
+
 import org.apache.log4j.Logger;
 
-import com.yahoo.zookeeper.server.ZooLog;
-
 public class Profiler {
     private static final Logger LOG = Logger.getLogger(Profiler.class);
-
-    public interface Operation<T> {
-        public T execute() throws Exception;
-    }
-
-    public static <T> T profile(Operation<T> op, long timeout, String message)
-            throws Exception {
-        long start = System.currentTimeMillis();
-        T res = op.execute();
-        long end = System.currentTimeMillis();
-        if (end - start > timeout) {
-            LOG.error("Elapsed "+(end - start) + " ms: " + message);
-        }
-        return res;
-    }
-}
+
+    public interface Operation<T> {
+        public T execute() throws Exception;
+    }
+
+    public static <T> T profile(Operation<T> op, long timeout, String message)
+            throws Exception {
+        long start = System.currentTimeMillis();
+        T res = op.execute();
+        long end = System.currentTimeMillis();
+        if (end - start > timeout) {
+            LOG.warn("Elapsed "+(end - start) + " ms: " + message);
+        }
+        return res;
+    }
+}