Author: szetszwo
Date: Wed Dec 23 18:58:49 2009
New Revision: 893597
URL: http://svn.apache.org/viewvc?rev=893597&view=rev
Log:
HDFS-814. Add an api to get the visible length of a DFSDataInputStream.
Modified:
hadoop/hdfs/branches/branch-0.21/CHANGES.txt
hadoop/hdfs/branches/branch-0.21/src/java/org/apache/hadoop/hdfs/DFSClient.java
hadoop/hdfs/branches/branch-0.21/src/test/hdfs/org/apache/hadoop/hdfs/TestReadWhileWriting.java
Modified: hadoop/hdfs/branches/branch-0.21/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/branches/branch-0.21/CHANGES.txt?rev=893597&r1=893596&r2=893597&view=diff
==============================================================================
--- hadoop/hdfs/branches/branch-0.21/CHANGES.txt (original)
+++ hadoop/hdfs/branches/branch-0.21/CHANGES.txt Wed Dec 23 18:58:49 2009
@@ -107,6 +107,9 @@
HDFS-731. Support new Syncable interface in HDFS. (hairong)
+ HDFS-814. Add an api to get the visible length of a DFSDataInputStream.
+ (szetszwo)
+
IMPROVEMENTS
HDFS-381. Remove blocks from DataNode maps when corresponding file
Modified:
hadoop/hdfs/branches/branch-0.21/src/java/org/apache/hadoop/hdfs/DFSClient.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/branches/branch-0.21/src/java/org/apache/hadoop/hdfs/DFSClient.java?rev=893597&r1=893596&r2=893597&view=diff
==============================================================================
---
hadoop/hdfs/branches/branch-0.21/src/java/org/apache/hadoop/hdfs/DFSClient.java
(original)
+++
hadoop/hdfs/branches/branch-0.21/src/java/org/apache/hadoop/hdfs/DFSClient.java
Wed Dec 23 18:58:49 2009
@@ -1613,7 +1613,7 @@
* DFSInputStream provides bytes from a named file. It handles
* negotiation of the namenode and various datanodes as necessary.
****************************************************************/
- class DFSInputStream extends FSInputStream {
+ private class DFSInputStream extends FSInputStream {
private Socket s = null;
private boolean closed = false;
@@ -2344,7 +2344,10 @@
}
}
- static class DFSDataInputStream extends FSDataInputStream {
+ /**
+ * The Hdfs implementation of {...@link FSDataInputStream}
+ */
+ public static class DFSDataInputStream extends FSDataInputStream {
DFSDataInputStream(DFSInputStream in)
throws IOException {
super(in);
@@ -2371,6 +2374,12 @@
return ((DFSInputStream)in).getAllBlocks();
}
+ /**
+ * @return The visible length of the file.
+ */
+ public long getVisibleLength() throws IOException {
+ return ((DFSInputStream)in).getFileLength();
+ }
}
/****************************************************************
Modified:
hadoop/hdfs/branches/branch-0.21/src/test/hdfs/org/apache/hadoop/hdfs/TestReadWhileWriting.java
URL:
http://svn.apache.org/viewvc/hadoop/hdfs/branches/branch-0.21/src/test/hdfs/org/apache/hadoop/hdfs/TestReadWhileWriting.java?rev=893597&r1=893596&r2=893597&view=diff
==============================================================================
---
hadoop/hdfs/branches/branch-0.21/src/test/hdfs/org/apache/hadoop/hdfs/TestReadWhileWriting.java
(original)
+++
hadoop/hdfs/branches/branch-0.21/src/test/hdfs/org/apache/hadoop/hdfs/TestReadWhileWriting.java
Wed Dec 23 18:58:49 2009
@@ -18,7 +18,6 @@
package org.apache.hadoop.hdfs;
import java.io.IOException;
-import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.logging.impl.Log4JLogger;
@@ -26,6 +25,7 @@
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hdfs.DFSClient.DFSDataInputStream;
import org.apache.hadoop.hdfs.protocol.RecoveryInProgressException;
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
import org.apache.hadoop.ipc.RemoteException;
@@ -133,10 +133,10 @@
UnixUserGroupInformation.UGI_PROPERTY_NAME,
new UnixUserGroupInformation(username, new String[]{"supergroup"}));
final FileSystem fs = FileSystem.get(conf2);
- final InputStream in = fs.open(p);
+ final DFSDataInputStream in = (DFSDataInputStream)fs.open(p);
- //Is the data available?
- Assert.assertTrue(available(in, expectedsize));
+ //Check visible length
+ Assert.assertTrue(in.getVisibleLength() >= expectedsize);
//Able to read?
for(int i = 0; i < expectedsize; i++) {
@@ -155,15 +155,5 @@
}
out.write(bytes);
}
-
- /** Is the data available? */
- private static boolean available(InputStream in, int expectedsize
- ) throws IOException {
- final int available = in.available();
- System.out.println(" in.available()=" + available);
- Assert.assertTrue(available >= 0);
- Assert.assertTrue(available <= expectedsize);
- return available == expectedsize;
- }
}