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;
+ }
}
}