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
|
HDFS-5709. Improve NameNode upgrade with existing reserved paths and path
|
||||||
components. (Andrew Wang via atm)
|
components. (Andrew Wang via atm)
|
||||||
|
|
||||||
|
HDFS-5881. Fix skip() of the short-circuit local reader(legacy). (kihwal)
|
||||||
|
|
||||||
Release 2.3.0 - UNRELEASED
|
Release 2.3.0 - UNRELEASED
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -629,7 +629,7 @@ class BlockReaderLocalLegacy implements BlockReader {
|
||||||
skipBuf = new byte[bytesPerChecksum];
|
skipBuf = new byte[bytesPerChecksum];
|
||||||
}
|
}
|
||||||
int ret = read(skipBuf, 0, (int)(n - remaining));
|
int ret = read(skipBuf, 0, (int)(n - remaining));
|
||||||
return ret;
|
return (remaining + ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
// optimize for big gap: discard the current buffer, skip to
|
// optimize for big gap: discard the current buffer, skip to
|
||||||
|
@ -660,9 +660,9 @@ class BlockReaderLocalLegacy implements BlockReader {
|
||||||
int ret = read(skipBuf, 0, myOffsetFromChunkBoundary);
|
int ret = read(skipBuf, 0, myOffsetFromChunkBoundary);
|
||||||
|
|
||||||
if (ret == -1) { // EOS
|
if (ret == -1) { // EOS
|
||||||
return toskip;
|
return (toskip + remaining);
|
||||||
} else {
|
} else {
|
||||||
return (toskip + ret);
|
return (toskip + remaining + ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1345,6 +1345,14 @@ implements ByteBufferReadable, CanSetDropBehind, CanSetReadahead,
|
||||||
pos += blockReader.skip(diff);
|
pos += blockReader.skip(diff);
|
||||||
if (pos == targetPos) {
|
if (pos == targetPos) {
|
||||||
done = true;
|
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
|
} catch (IOException e) {//make following read to retry
|
||||||
if(DFSClient.LOG.isDebugEnabled()) {
|
if(DFSClient.LOG.isDebugEnabled()) {
|
||||||
|
|
Loading…
Reference in New Issue