You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by iv...@apache.org on 2012/03/29 15:41:22 UTC

svn commit: r1306857 - in /zookeeper/bookkeeper/trunk: CHANGES.txt bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java

Author: ivank
Date: Thu Mar 29 13:41:21 2012
New Revision: 1306857

URL: http://svn.apache.org/viewvc?rev=1306857&view=rev
Log:
BOOKKEEPER-194: Get correct latency for addEntry operations for JMX. (sijie via ivank)

Modified:
    zookeeper/bookkeeper/trunk/CHANGES.txt
    zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java

Modified: zookeeper/bookkeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/CHANGES.txt?rev=1306857&r1=1306856&r2=1306857&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/CHANGES.txt (original)
+++ zookeeper/bookkeeper/trunk/CHANGES.txt Thu Mar 29 13:41:21 2012
@@ -66,6 +66,8 @@ Trunk (unreleased changes)
 
         BOOKKEEPER-190: Add entries would fail when number of open ledgers reaches more than openFileLimit. (sijie via ivank)
 
+        BOOKKEEPER-194: Get correct latency for addEntry operations for JMX. (sijie via ivank)
+
       hedwig-server/
       
         BOOKKEEPER-140: Hub server doesn't subscribe remote region correctly when a region is down. (Sijie Gou via ivank)

Modified: zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java
URL: http://svn.apache.org/viewvc/zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java?rev=1306857&r1=1306856&r2=1306857&view=diff
==============================================================================
--- zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java (original)
+++ zookeeper/bookkeeper/trunk/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/BookieServer.java Thu Mar 29 13:41:21 2012
@@ -352,11 +352,12 @@ public class BookieServer implements NIO
         case BookieProtocol.ADDENTRY:
             statType = BKStats.STATS_ADD;
             try {
+                TimedCnxn tsrc = new TimedCnxn(src, startTime);
                 // LOG.debug("Master key: " + new String(masterKey));
                 if ((flags & BookieProtocol.FLAG_RECOVERY_ADD) == BookieProtocol.FLAG_RECOVERY_ADD) {
-                    bookie.recoveryAddEntry(packet.slice(), this, src, masterKey);
+                    bookie.recoveryAddEntry(packet.slice(), this, tsrc, masterKey);
                 } else {
-                    bookie.addEntry(packet.slice(), this, src, masterKey);
+                    bookie.addEntry(packet.slice(), this, tsrc, masterKey);
                 }
                 success = true;
             } catch (IOException e) {
@@ -421,8 +422,11 @@ public class BookieServer implements NIO
         }
         if (isStatsEnabled) {
             if (success) {
-                long elapsedTime = System.currentTimeMillis() - startTime;
-                bkStats.getOpStats(statType).updateLatency(elapsedTime);
+                // for add operations, we compute latency in writeComplete callbacks.
+                if (statType != BKStats.STATS_ADD) {
+                    long elapsedTime = System.currentTimeMillis() - startTime;
+                    bkStats.getOpStats(statType).updateLatency(elapsedTime);
+                }
             } else {
                 bkStats.getOpStats(statType).incrementFailedOps();
             }
@@ -442,7 +446,9 @@ public class BookieServer implements NIO
     }
 
     public void writeComplete(int rc, long ledgerId, long entryId, InetSocketAddress addr, Object ctx) {
-        Cnxn src = (Cnxn) ctx;
+        TimedCnxn tcnxn = (TimedCnxn) ctx;
+        Cnxn src = tcnxn.cnxn;
+        long startTime = tcnxn.time;
         ByteBuffer bb = ByteBuffer.allocate(24);
         bb.putInt(new PacketHeader(BookieProtocol.CURRENT_PROTOCOL_VERSION, 
                                    BookieProtocol.ADDENTRY, (short)0).toInt());
@@ -454,6 +460,29 @@ public class BookieServer implements NIO
             LOG.trace("Add entry rc = " + rc + " for " + entryId + "@" + ledgerId);
         }
         src.sendResponse(new ByteBuffer[] { bb });
+        if (isStatsEnabled) {
+            // compute the latency
+            if (0 == rc) {
+                // for add operations, we compute latency in writeComplete callbacks.
+                long elapsedTime = System.currentTimeMillis() - startTime;
+                bkStats.getOpStats(BKStats.STATS_ADD).updateLatency(elapsedTime);
+            } else {
+                bkStats.getOpStats(BKStats.STATS_ADD).incrementFailedOps();                
+            }
+        }
+    }
+
+    /**
+     * A cnxn wrapper for time
+     */
+    class TimedCnxn {
+        Cnxn cnxn;
+        long time;
+
+        public TimedCnxn(Cnxn cnxn, long startTime) {
+            this.cnxn = cnxn;
+            this.time = startTime;
+        }
     }
 
 }