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:
parent
79fc1b2fe8
commit
cc871e76f3
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue