HBASE-13054 Provide more tracing information for locking/latching events.(Rajeshbabu)
This commit is contained in:
parent
47d081407e
commit
7792dee0c3
|
@ -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) {
|
||||||
|
|
|
@ -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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue