diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java index 321f8de..1c7c02b 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java @@ -363,6 +363,9 @@ public class HFileReaderV2 extends AbstractHFileReader { if (cacheConf.shouldCacheCompressed(cachedBlock.getBlockType().getCategory())) { cachedBlock = cachedBlock.unpack(hfileContext, fsBlockReader); } + if (Trace.isTracing()) { + traceScope.getSpan().addTimelineAnnotation("blockCacheHit"); + } assert cachedBlock.isUnpacked() : "Packed block leak."; if (cachedBlock.getBlockType().isData()) { HFile.dataBlockReadCnt.incrementAndGet(); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index cf927c3..28ca92d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -152,6 +152,8 @@ import org.apache.hadoop.hbase.util.Threads; import org.apache.hadoop.io.MultipleIOException; import org.apache.hadoop.util.StringUtils; import org.cliffc.high_scale_lib.Counter; +import org.cloudera.htrace.Trace; +import org.cloudera.htrace.TraceScope; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; @@ -3681,15 +3683,26 @@ public class HRegion implements HeapSize { // , Writable{ if (!waitForLock) { return null; } + TraceScope traceScope = null; try { + if (Trace.isTracing()) { + traceScope = Trace.startSpan("HRegion.getRowLockInternal"); + } if (!existingContext.latch.await(this.rowLockWaitDuration, TimeUnit.MILLISECONDS)) { + if(traceScope != null) { + traceScope.getSpan().addTimelineAnnotation("Failed to get row lock"); + } throw new IOException("Timed out waiting for lock for row: " + rowKey); } + if (traceScope != null) traceScope.close(); + traceScope = null; } catch (InterruptedException ie) { LOG.warn("Thread interrupted waiting for lock on row: " + rowKey); InterruptedIOException iie = new InterruptedIOException(); iie.initCause(ie); throw iie; + } finally { + if (traceScope != null) traceScope.close(); } } } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java index e365cc9..8430c1c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStore.java @@ -45,6 +45,7 @@ import org.apache.hadoop.hbase.regionserver.MemStoreLAB.Allocation; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.ClassSize; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; +import org.cloudera.htrace.Trace; /** * The MemStore holds in-memory modifications to the Store. Modifications @@ -741,6 +742,9 @@ public class MemStore implements HeapSize { this.snapshotAllocatorAtCreation = snapshotAllocator; this.snapshotAllocatorAtCreation.incScannerCount(); } + if (Trace.isTracing() && Trace.currentSpan() != null) { + Trace.currentSpan().addTimelineAnnotation("Creating MemStoreScanner"); + } } private KeyValue getNext(Iterator it) {