Author: szetszwo
Date: Tue Nov 1 00:41:10 2011
New Revision: 1195737
URL: http://svn.apache.org/viewvc?rev=1195737&view=rev
Log:
HDFS-2065. Add null checks in DFSClient.getFileChecksum(..). Contributed by
Uma Maheswara Rao G
Modified:
hadoop/common/branches/branch-0.20-security/CHANGES.txt
hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/DFSClient.java
hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/TestDistributedFileSystem.java
Modified: hadoop/common/branches/branch-0.20-security/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/CHANGES.txt?rev=1195737&r1=1195736&r2=1195737&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.20-security/CHANGES.txt Tue Nov 1 00:41:10
2011
@@ -103,6 +103,9 @@ Release 0.20.205.1 - unreleased
getFileStatus on non-existing files; fix bugs in getBlockLocations; and
changed getFileChecksum json response root to "FileChecksum". (szetszwo)
+ HDFS-2065. Add null checks in DFSClient.getFileChecksum(..). (Uma
+ Maheswara Rao G via szetszwo)
+
Release 0.20.205.0 - 2011.10.06
NEW FEATURES
Modified:
hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/DFSClient.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/DFSClient.java?rev=1195737&r1=1195736&r2=1195737&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/DFSClient.java
(original)
+++
hadoop/common/branches/branch-0.20-security/src/hdfs/org/apache/hadoop/hdfs/DFSClient.java
Tue Nov 1 00:41:10 2011
@@ -25,7 +25,6 @@ import org.apache.hadoop.fs.*;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.ipc.*;
import org.apache.hadoop.net.NetUtils;
-import org.apache.hadoop.net.NodeBase;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.hdfs.DistributedFileSystem.DiskStatus;
@@ -780,8 +779,11 @@ public class DFSClient implements FSCons
ClientProtocol namenode, SocketFactory socketFactory, int socketTimeout
) throws IOException {
//get all block locations
- List<LocatedBlock> locatedblocks
- = callGetBlockLocations(namenode, src, 0,
Long.MAX_VALUE).getLocatedBlocks();
+ LocatedBlocks blockLocations = callGetBlockLocations(namenode, src, 0,
Long.MAX_VALUE);
+ if (null == blockLocations) {
+ throw new FileNotFoundException("File does not exist: " + src);
+ }
+ List<LocatedBlock> locatedblocks = blockLocations.getLocatedBlocks();
final DataOutputBuffer md5out = new DataOutputBuffer();
int bytesPerCRC = 0;
long crcPerBlock = 0;
@@ -791,8 +793,11 @@ public class DFSClient implements FSCons
//get block checksum for each block
for(int i = 0; i < locatedblocks.size(); i++) {
if (refetchBlocks) { // refetch to get fresh tokens
- locatedblocks = callGetBlockLocations(namenode, src, 0, Long.MAX_VALUE)
- .getLocatedBlocks();
+ blockLocations = callGetBlockLocations(namenode, src, 0,
Long.MAX_VALUE);
+ if (null == blockLocations) {
+ throw new FileNotFoundException("File does not exist: " + src);
+ }
+ locatedblocks = blockLocations.getLocatedBlocks();
refetchBlocks = false;
}
LocatedBlock lb = locatedblocks.get(i);
Modified:
hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/TestDistributedFileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/TestDistributedFileSystem.java?rev=1195737&r1=1195736&r2=1195737&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/TestDistributedFileSystem.java
(original)
+++
hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/hdfs/TestDistributedFileSystem.java
Tue Nov 1 00:41:10 2011
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertFal
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.security.PrivilegedExceptionAction;
@@ -255,6 +256,25 @@ public class TestDistributedFileSystem {
final UserGroupInformation ugi = UserGroupInformation.createUserForTesting(
current.getShortUserName() + "x", new String[]{"user"});
+ try {
+ ((DistributedFileSystem) hdfs).getFileChecksum(new Path(
+ "/test/TestNonExistingFile"));
+ fail("Expecting FileNotFoundException");
+ } catch (FileNotFoundException e) {
+ assertTrue("Not throwing the intended exception message", e.getMessage()
+ .contains("File does not exist: /test/TestNonExistingFile"));
+ }
+
+ try {
+ Path path = new Path("/test/TestExistingDir/");
+ hdfs.mkdirs(path);
+ ((DistributedFileSystem) hdfs).getFileChecksum(path);
+ fail("Expecting FileNotFoundException");
+ } catch (FileNotFoundException e) {
+ assertTrue("Not throwing the intended exception message", e.getMessage()
+ .contains("File does not exist: /test/TestExistingDir"));
+ }
+
//hftp
final String hftpuri = "hftp://" + nnAddr;
System.out.println("hftpuri=" + hftpuri);