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-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
|
Release 0.23.2 - UNRELEASED
|
||||||
|
|
||||||
NEW FEATURES
|
NEW FEATURES
|
||||||
|
|
|
@ -1224,8 +1224,10 @@ public abstract class FileSystem extends Configured implements Closeable {
|
||||||
for (Iterator<Path> iter = deleteOnExit.iterator(); iter.hasNext();) {
|
for (Iterator<Path> iter = deleteOnExit.iterator(); iter.hasNext();) {
|
||||||
Path path = iter.next();
|
Path path = iter.next();
|
||||||
try {
|
try {
|
||||||
|
if (exists(path)) {
|
||||||
delete(path, true);
|
delete(path, true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
LOG.info("Ignoring failure to deleteOnExit for path " + path);
|
LOG.info("Ignoring failure to deleteOnExit for path " + path);
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ import java.security.PrivilegedExceptionAction;
|
||||||
import java.util.concurrent.Semaphore;
|
import java.util.concurrent.Semaphore;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.*;
|
||||||
|
|
||||||
|
|
||||||
public class TestFileSystemCaching {
|
public class TestFileSystemCaching {
|
||||||
|
@ -267,4 +267,28 @@ public class TestFileSystemCaching {
|
||||||
});
|
});
|
||||||
assertNotSame(fsA, fsA1);
|
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