HADOOP-10130. RawLocalFS pread does not track FileSystem Statistics (Binglin Chang via Colin Patrick McCabe)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1547119 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Colin McCabe 2013-12-02 17:30:00 +00:00
parent b128742363
commit 137bf488a5
4 changed files with 14 additions and 36 deletions

View File

@ -225,6 +225,9 @@ Release 2.2.1 - UNRELEASED
HADOOP-9114. After defined the dfs.checksum.type as the NULL, write file and hflush will HADOOP-9114. After defined the dfs.checksum.type as the NULL, write file and hflush will
through java.lang.ArrayIndexOutOfBoundsException (Sathish via umamahesh) through java.lang.ArrayIndexOutOfBoundsException (Sathish via umamahesh)
HADOOP-10130. RawLocalFS::LocalFSFileInputStream.pread does not track
FS::Statistics (Binglin Chang via Colin Patrick McCabe)
Release 2.2.0 - 2013-10-13 Release 2.2.0 - 2013-10-13
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -83,39 +83,6 @@ public class RawLocalFileSystem extends FileSystem {
setConf(conf); setConf(conf);
} }
class TrackingFileInputStream extends FileInputStream {
public TrackingFileInputStream(File f) throws IOException {
super(f);
}
@Override
public int read() throws IOException {
int result = super.read();
if (result != -1) {
statistics.incrementBytesRead(1);
}
return result;
}
@Override
public int read(byte[] data) throws IOException {
int result = super.read(data);
if (result != -1) {
statistics.incrementBytesRead(result);
}
return result;
}
@Override
public int read(byte[] data, int offset, int length) throws IOException {
int result = super.read(data, offset, length);
if (result != -1) {
statistics.incrementBytesRead(result);
}
return result;
}
}
/******************************************************* /*******************************************************
* For open()'s FSInputStream. * For open()'s FSInputStream.
*******************************************************/ *******************************************************/
@ -124,7 +91,7 @@ public class RawLocalFileSystem extends FileSystem {
private long position; private long position;
public LocalFSFileInputStream(Path f) throws IOException { public LocalFSFileInputStream(Path f) throws IOException {
this.fis = new TrackingFileInputStream(pathToFile(f)); fis = new FileInputStream(pathToFile(f));
} }
@Override @Override
@ -159,6 +126,7 @@ public class RawLocalFileSystem extends FileSystem {
int value = fis.read(); int value = fis.read();
if (value >= 0) { if (value >= 0) {
this.position++; this.position++;
statistics.incrementBytesRead(1);
} }
return value; return value;
} catch (IOException e) { // unexpected exception } catch (IOException e) { // unexpected exception
@ -172,6 +140,7 @@ public class RawLocalFileSystem extends FileSystem {
int value = fis.read(b, off, len); int value = fis.read(b, off, len);
if (value > 0) { if (value > 0) {
this.position += value; this.position += value;
statistics.incrementBytesRead(value);
} }
return value; return value;
} catch (IOException e) { // unexpected exception } catch (IOException e) { // unexpected exception
@ -184,7 +153,11 @@ public class RawLocalFileSystem extends FileSystem {
throws IOException { throws IOException {
ByteBuffer bb = ByteBuffer.wrap(b, off, len); ByteBuffer bb = ByteBuffer.wrap(b, off, len);
try { try {
return fis.getChannel().read(bb, position); int value = fis.getChannel().read(bb, position);
if (value > 0) {
statistics.incrementBytesRead(value);
}
return value;
} catch (IOException e) { } catch (IOException e) {
throw new FSError(e); throw new FSError(e);
} }

View File

@ -91,6 +91,7 @@ public abstract class FCStatisticsBaseTest {
FSDataInputStream fstr = fc.open(filePath); FSDataInputStream fstr = fc.open(filePath);
byte[] buf = new byte[blockSize]; byte[] buf = new byte[blockSize];
int bytesRead = fstr.read(buf, 0, blockSize); int bytesRead = fstr.read(buf, 0, blockSize);
fstr.read(0, buf, 0, blockSize);
Assert.assertEquals(blockSize, bytesRead); Assert.assertEquals(blockSize, bytesRead);
verifyReadBytes(stats); verifyReadBytes(stats);
verifyWrittenBytes(stats); verifyWrittenBytes(stats);

View File

@ -47,7 +47,8 @@ public class TestLocalFsFCStatistics extends FCStatisticsBaseTest {
@Override @Override
protected void verifyReadBytes(Statistics stats) { protected void verifyReadBytes(Statistics stats) {
Assert.assertEquals(blockSize, stats.getBytesRead()); // one blockSize for read, one for pread
Assert.assertEquals(2*blockSize, stats.getBytesRead());
} }
@Override @Override