HDFS-2484. checkLease should throw FileNotFoundException when file does not exist. Contributed by Rakesh R.

This commit is contained in:
Konstantin V Shvachko 2015-05-06 16:06:04 -07:00
parent b72507810a
commit c75cfa29cf
4 changed files with 21 additions and 5 deletions

View File

@ -635,6 +635,9 @@ Release 2.8.0 - UNRELEASED
HDFS-8310. Fix TestCLI.testAll "help: help for find" on Windows. HDFS-8310. Fix TestCLI.testAll "help: help for find" on Windows.
(Kiran Kumar M R via Xiaoyu Yao) (Kiran Kumar M R via Xiaoyu Yao)
HDFS-2484. checkLease should throw FileNotFoundException when file does
not exist. (Rakesh R via shv)
Release 2.7.1 - UNRELEASED Release 2.7.1 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -3451,7 +3451,7 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
final String ident = src + " (inode " + fileId + ")"; final String ident = src + " (inode " + fileId + ")";
if (inode == null) { if (inode == null) {
Lease lease = leaseManager.getLease(holder); Lease lease = leaseManager.getLease(holder);
throw new LeaseExpiredException( throw new FileNotFoundException(
"No lease on " + ident + ": File does not exist. " "No lease on " + ident + ": File does not exist. "
+ (lease != null ? lease.toString() + (lease != null ? lease.toString()
: "Holder " + holder + " does not have any open files.")); : "Holder " + holder + " does not have any open files."));

View File

@ -78,7 +78,6 @@ import org.apache.hadoop.hdfs.server.datanode.DataNodeTestUtils;
import org.apache.hadoop.hdfs.server.datanode.SimulatedFSDataset; import org.apache.hadoop.hdfs.server.datanode.SimulatedFSDataset;
import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsDatasetSpi; import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsDatasetSpi;
import org.apache.hadoop.hdfs.server.namenode.FSNamesystem; import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
import org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException;
import org.apache.hadoop.hdfs.server.namenode.LeaseManager; import org.apache.hadoop.hdfs.server.namenode.LeaseManager;
import org.apache.hadoop.hdfs.server.namenode.NameNode; import org.apache.hadoop.hdfs.server.namenode.NameNode;
import org.apache.hadoop.hdfs.server.namenode.NameNodeAdapter; import org.apache.hadoop.hdfs.server.namenode.NameNodeAdapter;
@ -1212,8 +1211,8 @@ public class TestFileCreation {
cluster.getNameNodeRpc() cluster.getNameNodeRpc()
.complete(f.toString(), client.clientName, null, someOtherFileId); .complete(f.toString(), client.clientName, null, someOtherFileId);
fail(); fail();
} catch(LeaseExpiredException e) { } catch(FileNotFoundException e) {
FileSystem.LOG.info("Caught Expected LeaseExpiredException: ", e); FileSystem.LOG.info("Caught Expected FileNotFoundException: ", e);
} }
} finally { } finally {
IOUtils.closeStream(dfs); IOUtils.closeStream(dfs);

View File

@ -27,6 +27,7 @@ import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.security.PrivilegedExceptionAction; import java.security.PrivilegedExceptionAction;
@ -50,6 +51,7 @@ import org.apache.hadoop.io.EnumSetWritable;
import org.apache.hadoop.ipc.RemoteException; import org.apache.hadoop.ipc.RemoteException;
import org.apache.hadoop.security.UserGroupInformation; import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.security.token.SecretManager.InvalidToken; import org.apache.hadoop.security.token.SecretManager.InvalidToken;
import org.apache.hadoop.test.GenericTestUtils;
import org.apache.hadoop.util.Time; import org.apache.hadoop.util.Time;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
@ -321,8 +323,20 @@ public class TestLease {
Assert.assertTrue(!hasLease(cluster, a)); Assert.assertTrue(!hasLease(cluster, a));
Assert.assertTrue(!hasLease(cluster, b)); Assert.assertTrue(!hasLease(cluster, b));
Path fileA = new Path(dir, "fileA");
FSDataOutputStream fileA_out = fs.create(fileA);
fileA_out.writeBytes("something");
Assert.assertTrue("Failed to get the lease!", hasLease(cluster, fileA));
fs.delete(dir, true); fs.delete(dir, true);
try {
fileA_out.hflush();
Assert.fail("Should validate file existence!");
} catch (FileNotFoundException e) {
// expected
GenericTestUtils.assertExceptionContains("File does not exist", e);
}
} finally { } finally {
if (cluster != null) {cluster.shutdown();} if (cluster != null) {cluster.shutdown();}
} }