From d0bff50fed248b06d7f762bd50d64cf543b92b20 Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Mon, 28 Apr 2014 20:23:48 +0000 Subject: [PATCH] HDFS-6288. DFSInputStream Pread doesn't update ReadStatistics. Contributed by Juan Yu. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1590778 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 3 +++ .../org/apache/hadoop/hdfs/DFSInputStream.java | 2 ++ .../java/org/apache/hadoop/hdfs/TestPread.java | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 664b91860a0..85c0c45e9fa 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -160,6 +160,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 diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java index 2239de08aab..1750aa7a30b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSInputStream.java @@ -1038,6 +1038,8 @@ implements ByteBufferReadable, CanSetDropBehind, CanSetReadahead, 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); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestPread.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestPread.java index 5168eb5ca26..50b95eaa56e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestPread.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestPread.java @@ -94,11 +94,25 @@ public class TestPread { 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 {