HDFS-5881. Fix skip() of the short-circuit local reader(legacy). Contributed by Kihwal Lee.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1565310 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
24775c10ef
commit
ab96a0838d
|
@ -337,6 +337,8 @@ Release 2.4.0 - UNRELEASED
|
|||
HDFS-5709. Improve NameNode upgrade with existing reserved paths and path
|
||||
components. (Andrew Wang via atm)
|
||||
|
||||
HDFS-5881. Fix skip() of the short-circuit local reader(legacy). (kihwal)
|
||||
|
||||
Release 2.3.0 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -629,7 +629,7 @@ class BlockReaderLocalLegacy implements BlockReader {
|
|||
skipBuf = new byte[bytesPerChecksum];
|
||||
}
|
||||
int ret = read(skipBuf, 0, (int)(n - remaining));
|
||||
return ret;
|
||||
return (remaining + ret);
|
||||
}
|
||||
|
||||
// optimize for big gap: discard the current buffer, skip to
|
||||
|
@ -660,9 +660,9 @@ class BlockReaderLocalLegacy implements BlockReader {
|
|||
int ret = read(skipBuf, 0, myOffsetFromChunkBoundary);
|
||||
|
||||
if (ret == -1) { // EOS
|
||||
return toskip;
|
||||
return (toskip + remaining);
|
||||
} else {
|
||||
return (toskip + ret);
|
||||
return (toskip + remaining + ret);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1345,6 +1345,14 @@ implements ByteBufferReadable, CanSetDropBehind, CanSetReadahead,
|
|||
pos += blockReader.skip(diff);
|
||||
if (pos == targetPos) {
|
||||
done = true;
|
||||
} else {
|
||||
// The range was already checked. If the block reader returns
|
||||
// something unexpected instead of throwing an exception, it is
|
||||
// most likely a bug.
|
||||
String errMsg = "BlockReader failed to seek to " +
|
||||
targetPos + ". Instead, it seeked to " + pos + ".";
|
||||
DFSClient.LOG.warn(errMsg);
|
||||
throw new IOException(errMsg);
|
||||
}
|
||||
} catch (IOException e) {//make following read to retry
|
||||
if(DFSClient.LOG.isDebugEnabled()) {
|
||||
|
|
Loading…
Reference in New Issue