HBASE-13054 Provide more tracing information for locking/latching events.(Rajeshbabu)

This commit is contained in:
Rajeshbabu Chintaguntla 2015-02-21 12:13:10 +05:30
parent 47d081407e
commit 7792dee0c3
3 changed files with 20 additions and 0 deletions

View File

@ -402,6 +402,9 @@ public class HFileReaderV2 extends AbstractHFileReader {
HFileBlock cachedBlock = getCachedBlock(cacheKey, cacheBlock, useLock, isCompaction, HFileBlock cachedBlock = getCachedBlock(cacheKey, cacheBlock, useLock, isCompaction,
updateCacheMetrics, expectedBlockType, expectedDataBlockEncoding); updateCacheMetrics, expectedBlockType, expectedDataBlockEncoding);
if (cachedBlock != null) { if (cachedBlock != null) {
if (Trace.isTracing()) {
traceScope.getSpan().addTimelineAnnotation("blockCacheHit");
}
assert cachedBlock.isUnpacked() : "Packed block leak."; assert cachedBlock.isUnpacked() : "Packed block leak.";
if (cachedBlock.getBlockType().isData()) { if (cachedBlock.getBlockType().isData()) {
if (updateCacheMetrics) { if (updateCacheMetrics) {

View File

@ -47,6 +47,7 @@ import org.apache.hadoop.hbase.util.CollectionBackedScanner;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
import org.apache.hadoop.hbase.util.Pair; import org.apache.hadoop.hbase.util.Pair;
import org.apache.hadoop.hbase.util.ReflectionUtils; import org.apache.hadoop.hbase.util.ReflectionUtils;
import org.apache.htrace.Trace;
/** /**
* The MemStore holds in-memory modifications to the Store. Modifications * The MemStore holds in-memory modifications to the Store. Modifications
@ -737,6 +738,9 @@ public class DefaultMemStore implements MemStore {
this.snapshotAllocatorAtCreation = snapshotAllocator; this.snapshotAllocatorAtCreation = snapshotAllocator;
this.snapshotAllocatorAtCreation.incScannerCount(); this.snapshotAllocatorAtCreation.incScannerCount();
} }
if (Trace.isTracing() && Trace.currentSpan() != null) {
Trace.currentSpan().addTimelineAnnotation("Creating MemStoreScanner");
}
} }
/** /**

View File

@ -168,6 +168,8 @@ import org.apache.hadoop.hbase.wal.WALSplitter;
import org.apache.hadoop.hbase.wal.WALSplitter.MutationReplay; import org.apache.hadoop.hbase.wal.WALSplitter.MutationReplay;
import org.apache.hadoop.io.MultipleIOException; import org.apache.hadoop.io.MultipleIOException;
import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.util.StringUtils;
import org.apache.htrace.Trace;
import org.apache.htrace.TraceScope;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Optional; import com.google.common.base.Optional;
@ -4694,16 +4696,27 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver { //
if (!waitForLock) { if (!waitForLock) {
return null; return null;
} }
TraceScope traceScope = null;
try { try {
if (Trace.isTracing()) {
traceScope = Trace.startSpan("HRegion.getRowLockInternal");
}
// Row is already locked by some other thread, give up or wait for it // Row is already locked by some other thread, give up or wait for it
if (!existingContext.latch.await(this.rowLockWaitDuration, TimeUnit.MILLISECONDS)) { 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); throw new IOException("Timed out waiting for lock for row: " + rowKey);
} }
if (traceScope != null) traceScope.close();
traceScope = null;
} catch (InterruptedException ie) { } catch (InterruptedException ie) {
LOG.warn("Thread interrupted waiting for lock on row: " + rowKey); LOG.warn("Thread interrupted waiting for lock on row: " + rowKey);
InterruptedIOException iie = new InterruptedIOException(); InterruptedIOException iie = new InterruptedIOException();
iie.initCause(ie); iie.initCause(ie);
throw iie; throw iie;
} finally {
if (traceScope != null) traceScope.close();
} }
} }
} }