You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bi...@apache.org on 2019/05/22 12:24:14 UTC
[hbase] branch branch-2.1 updated: HBASE-22445 Add file info when
throw exceptions in HFileReaderImpl
This is an automated email from the ASF dual-hosted git repository.
binlijin pushed a commit to branch branch-2.1
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/branch-2.1 by this push:
new b4a08f5 HBASE-22445 Add file info when throw exceptions in HFileReaderImpl
b4a08f5 is described below
commit b4a08f5baab5861839cf159fd7522b3d660c9956
Author: binlijin <bi...@apache.org>
AuthorDate: Wed May 22 20:24:03 2019 +0800
HBASE-22445 Add file info when throw exceptions in HFileReaderImpl
---
.../hadoop/hbase/io/hfile/HFileReaderImpl.java | 70 ++++++++++++----------
1 file changed, 40 insertions(+), 30 deletions(-)
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java
index a4a40ba..37d3508 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java
@@ -330,14 +330,14 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
// We can read v3 or v2 versions of hfile.
throw new IllegalArgumentException("Invalid HFile version: major=" +
trailer.getMajorVersion() + ", minor=" + trailer.getMinorVersion() + ": expected at least " +
- "major=2 and minor=" + MAX_MINOR_VERSION);
+ "major=2 and minor=" + MAX_MINOR_VERSION + ", path=" + path);
}
@SuppressWarnings("serial")
public static class BlockIndexNotLoadedException extends IllegalStateException {
- public BlockIndexNotLoadedException() {
+ public BlockIndexNotLoadedException(Path path) {
// Add a message in case anyone relies on it as opposed to class name.
- super("Block index not loaded");
+ super(path + " block index not loaded");
}
}
@@ -385,7 +385,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
@Override
public Optional<Cell> getFirstKey() {
if (dataBlockIndexReader == null) {
- throw new BlockIndexNotLoadedException();
+ throw new BlockIndexNotLoadedException(path);
}
return dataBlockIndexReader.isEmpty() ? Optional.empty()
: Optional.of(dataBlockIndexReader.getRootBlockKey(0));
@@ -475,8 +475,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
*/
@SuppressWarnings("serial")
public static class NotSeekedException extends IllegalStateException {
- public NotSeekedException() {
- super("Not seeked to a key/value");
+ public NotSeekedException(Path path) {
+ super(path + " not seeked to a key/value");
}
}
@@ -568,7 +568,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
protected void assertSeeked() {
if (!isSeeked())
- throw new NotSeekedException();
+ throw new NotSeekedException(reader.getPath());
}
@Override
@@ -638,7 +638,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
throw new IllegalStateException("Invalid currTagsLen " + this.currTagsLen +
". Block offset: " + curBlock.getOffset() + ", block length: " +
this.blockBuffer.limit() +
- ", position: " + this.blockBuffer.position() + " (without header).");
+ ", position: " + this.blockBuffer.position() + " (without header)." +
+ " path=" + reader.getPath());
}
}
@@ -725,7 +726,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
throw new IllegalStateException("Invalid klen " + klen + " or vlen "
+ vlen + ". Block offset: "
+ curBlock.getOffset() + ", block length: " + blockBuffer.limit() + ", position: "
- + blockBuffer.position() + " (without header).");
+ + blockBuffer.position() + " (without header)."
+ + " path=" + reader.getPath());
}
offsetFromPos += Bytes.SIZEOF_LONG;
blockBuffer.asSubByteBuffer(blockBuffer.position() + offsetFromPos, klen, pair);
@@ -740,7 +742,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
if (checkLen(tlen)) {
throw new IllegalStateException("Invalid tlen " + tlen + ". Block offset: "
+ curBlock.getOffset() + ", block length: " + blockBuffer.limit() + ", position: "
- + blockBuffer.position() + " (without header).");
+ + blockBuffer.position() + " (without header)."
+ + " path=" + reader.getPath());
}
// add the two bytes read for the tags.
offsetFromPos += tlen + (Bytes.SIZEOF_SHORT);
@@ -755,7 +758,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
throw new IllegalStateException("blockSeek with seekBefore "
+ "at the first key of the block: key=" + CellUtil.getCellKeyAsString(key)
+ ", blockOffset=" + curBlock.getOffset() + ", onDiskSize="
- + curBlock.getOnDiskSizeWithHeader());
+ + curBlock.getOnDiskSizeWithHeader()
+ + ", path=" + reader.getPath());
}
blockBuffer.moveBack(lastKeyValueSize);
readKeyValueLen();
@@ -918,7 +922,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
}
if (block.getOffset() < 0) {
- throw new IOException("Invalid block file offset: " + block);
+ throw new IOException(
+ "Invalid block file offset: " + block + ", path=" + reader.getPath());
}
// We are reading the next block without block type validation, because
@@ -1032,8 +1037,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
LOG.error("Current pos = " + blockBuffer.position()
+ "; currKeyLen = " + currKeyLen + "; currValLen = "
+ currValueLen + "; block limit = " + blockBuffer.limit()
- + "; HFile name = " + reader.getName()
- + "; currBlock currBlockOffset = " + this.curBlock.getOffset());
+ + "; currBlock currBlockOffset = " + this.curBlock.getOffset()
+ + "; path=" + reader.getPath());
throw e;
}
}
@@ -1131,7 +1136,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
HFileBlock newBlock = reader.readBlock(firstDataBlockOffset, -1, cacheBlocks, pread,
isCompaction, true, BlockType.DATA, getEffectiveDataBlockEncoding());
if (newBlock.getOffset() < 0) {
- throw new IOException("Invalid block offset: " + newBlock.getOffset());
+ throw new IOException(
+ "Invalid block offset: " + newBlock.getOffset() + ", path=" + reader.getPath());
}
updateCurrentBlock(newBlock);
}
@@ -1175,7 +1181,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
+ " or currValueLen " + this.currValueLen + ". Block offset: "
+ this.curBlock.getOffset() + ", block length: "
+ this.blockBuffer.limit() + ", position: " + this.blockBuffer.position()
- + " (without header).");
+ + " (without header)." + ", path=" + reader.getPath());
}
}
@@ -1190,7 +1196,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
// sanity check
if (newBlock.getBlockType() != BlockType.DATA) {
throw new IllegalStateException("ScannerV2 works only on data " + "blocks, got "
- + newBlock.getBlockType() + "; " + "fileName=" + reader.getName()
+ + newBlock.getBlockType() + "; " + "HFileName=" + reader.getPath()
+ ", " + "dataBlockEncoder=" + reader.getDataBlockEncoding() + ", " + "isCompaction="
+ isCompaction);
}
@@ -1340,10 +1346,10 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
// so blocks with the old encoding still linger in cache for some
// period of time. This event should be rare as it only happens on
// schema definition change.
- LOG.info("Evicting cached block with key " + cacheKey +
- " because of a data block encoding mismatch" +
- "; expected: " + expectedDataBlockEncoding +
- ", actual: " + actualDataBlockEncoding);
+ LOG.info("Evicting cached block with key " + cacheKey
+ + " because of a data block encoding mismatch" + "; expected: "
+ + expectedDataBlockEncoding + ", actual: " + actualDataBlockEncoding + ", path="
+ + path);
// This is an error scenario. so here we need to decrement the
// count.
cache.returnBlock(cacheKey, cachedBlock);
@@ -1370,7 +1376,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
return null; // there are no meta blocks
}
if (metaBlockIndexReader == null) {
- throw new IOException("Meta index not loaded");
+ throw new IOException(path + " meta index not loaded");
}
byte[] mbname = Bytes.toBytes(metaBlockName);
@@ -1422,13 +1428,14 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
DataBlockEncoding expectedDataBlockEncoding)
throws IOException {
if (dataBlockIndexReader == null) {
- throw new IOException("Block index not loaded");
+ throw new IOException(path + " block index not loaded");
}
long trailerOffset = trailer.getLoadOnOpenDataOffset();
if (dataBlockOffset < 0 || dataBlockOffset >= trailerOffset) {
throw new IOException("Requested block is out of range: " + dataBlockOffset +
", lastDataBlockOffset: " + trailer.getLastDataBlockOffset() +
- ", trailer.getLoadOnOpenDataOffset: " + trailerOffset);
+ ", trailer.getLoadOnOpenDataOffset: " + trailerOffset +
+ ", path=" + path);
}
// For any given block from any given file, synchronize reads for said
// block.
@@ -1467,7 +1474,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
if (cachedBlock.getDataBlockEncoding() != dataBlockEncoder.getDataBlockEncoding()) {
throw new IOException("Cached block under key " + cacheKey + " "
+ "has wrong encoding: " + cachedBlock.getDataBlockEncoding() + " (expected: "
- + dataBlockEncoder.getDataBlockEncoding() + ")");
+ + dataBlockEncoder.getDataBlockEncoding() + ")"
+ + ", path=" + path);
}
}
// Cache-hit. Return!
@@ -1537,7 +1545,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
}
if (actualBlockType != expectedBlockType) {
throw new IOException("Expected block type " + expectedBlockType + ", " +
- "but got " + actualBlockType + ": " + block);
+ "but got " + actualBlockType + ": " + block + ", path=" + path);
}
}
@@ -1637,7 +1645,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
String encoderCls = dataBlockEncoder.getClass().getName();
throw new CorruptHFileException("Encoder " + encoderCls
+ " doesn't support data block encoding "
- + DataBlockEncoding.getNameFromId(dataBlockEncoderId));
+ + DataBlockEncoding.getNameFromId(dataBlockEncoderId)
+ + ", path=" + reader.getPath());
}
updateCurrBlockRef(newBlock);
ByteBuff encodedBuffer = getEncodedBuffer(newBlock);
@@ -1711,7 +1720,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
private void assertValidSeek() {
if (this.curBlock == null) {
- throw new NotSeekedException();
+ throw new NotSeekedException(reader.getPath());
}
}
@@ -1758,7 +1767,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
if (blockType != BlockType.GENERAL_BLOOM_META &&
blockType != BlockType.DELETE_FAMILY_BLOOM_META) {
throw new RuntimeException("Block Type: " + blockType.toString() +
- " is not supported") ;
+ " is not supported, path=" + path) ;
}
for (HFileBlock b : loadOnOpenBlocks)
@@ -1803,7 +1812,8 @@ public class HFileReaderImpl implements HFile.Reader, Configurable {
// Use the algorithm the key wants
Cipher cipher = Encryption.getCipher(conf, key.getAlgorithm());
if (cipher == null) {
- throw new IOException("Cipher '" + key.getAlgorithm() + "' is not available");
+ throw new IOException("Cipher '" + key.getAlgorithm() + "' is not available"
+ + ", path=" + path);
}
cryptoContext.setCipher(cipher);
cryptoContext.setKey(key);