HDFS-6288. DFSInputStream Pread doesn't update ReadStatistics. Contributed by Juan Yu.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1590776 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andrew Wang 2014-04-28 20:20:10 +00:00
parent bb7ce82816
commit 71aa608b84
3 changed files with 20 additions and 1 deletions

View File

@ -412,6 +412,9 @@ Release 2.5.0 - UNRELEASED
HDFS-6218. Audit log should use true client IP for proxied webhdfs
operations. (daryn via kihwal)
HDFS-6288. DFSInputStream Pread doesn't update ReadStatistics.
(Juan Yu via wang)
Release 2.4.1 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -1038,6 +1038,8 @@ private void actualGetFromOneDataNode(final DNAddrPair datanode,
setConfiguration(dfsClient.getConfiguration()).
build();
int nread = reader.readAll(buf, offset, len);
updateReadStatistics(readStatistics, nread, reader);
if (nread != len) {
throw new IOException("truncated return from reader.read(): " +
"excpected " + len + ", got " + nread);

View File

@ -88,11 +88,25 @@ private void checkAndEraseData(byte[] actual, int from, byte[] expected, String
private void doPread(FSDataInputStream stm, long position, byte[] buffer,
int offset, int length) throws IOException {
int nread = 0;
long totalRead = 0;
DFSInputStream dfstm = null;
if (stm.getWrappedStream() instanceof DFSInputStream) {
dfstm = (DFSInputStream) (stm.getWrappedStream());
totalRead = dfstm.getReadStatistics().getTotalBytesRead();
}
while (nread < length) {
int nbytes = stm.read(position+nread, buffer, offset+nread, length-nread);
int nbytes =
stm.read(position + nread, buffer, offset + nread, length - nread);
assertTrue("Error in pread", nbytes > 0);
nread += nbytes;
}
if (dfstm != null) {
assertEquals("Expected read statistic to be incremented", length, dfstm
.getReadStatistics().getTotalBytesRead() - totalRead);
}
}
private void pReadFile(FileSystem fileSys, Path name) throws IOException {