HADOOP-8634. Ensure FileSystem#close doesn't squawk for deleteOnExit paths (daryn via bobby)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1367196 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Joseph Evans 2012-07-30 18:05:38 +00:00
parent 98f1523b20
commit d8584fde03
3 changed files with 32 additions and 3 deletions

View File

@ -859,6 +859,9 @@ Release 0.23.3 - UNRELEASED
HADOOP-8627. FS deleteOnExit may delete the wrong path (daryn via bobby)
HADOOP-8634. Ensure FileSystem#close doesn't squawk for deleteOnExit paths
(daryn via bobby)
Release 0.23.2 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -1224,7 +1224,9 @@ protected void processDeleteOnExit() {
for (Iterator<Path> iter = deleteOnExit.iterator(); iter.hasNext();) {
Path path = iter.next();
try {
delete(path, true);
if (exists(path)) {
delete(path, true);
}
}
catch (IOException e) {
LOG.info("Ignoring failure to deleteOnExit for path " + path);

View File

@ -35,7 +35,7 @@
import java.util.concurrent.Semaphore;
import static org.junit.Assert.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.*;
public class TestFileSystemCaching {
@ -267,4 +267,28 @@ public FileSystem run() throws Exception {
});
assertNotSame(fsA, fsA1);
}
}
@Test
public void testDeleteOnExitChecksExists() throws Exception {
FileSystem mockFs = mock(FileSystem.class);
FileSystem fs = new FilterFileSystem(mockFs);
Path p = new Path("/a");
// path has to exist for deleteOnExit to register it
when(mockFs.getFileStatus(p)).thenReturn(new FileStatus());
fs.deleteOnExit(p);
verify(mockFs).getFileStatus(eq(p));
fs.close();
verify(mockFs).delete(eq(p), anyBoolean());
reset(mockFs);
// make sure it doesn't try to delete a file that doesn't exist
when(mockFs.getFileStatus(p)).thenReturn(new FileStatus());
fs.deleteOnExit(p);
verify(mockFs).getFileStatus(eq(p));
reset(mockFs);
fs.close();
verify(mockFs).getFileStatus(eq(p));
verify(mockFs, never()).delete(any(Path.class), anyBoolean());
}
}