svn merge -c 1367196 FIXES: 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/branches/branch-2@1367197 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Joseph Evans 2012-07-30 18:06:44 +00:00
parent 79fc1b2fe8
commit cc871e76f3
3 changed files with 32 additions and 3 deletions

View File

@ -678,6 +678,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
NEW FEATURES

View File

@ -1224,7 +1224,9 @@ public abstract class FileSystem extends Configured implements Closeable {
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.security.PrivilegedExceptionAction;
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 class TestFileSystemCaching {
});
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());
}
}