Author: bobby
Date: Mon Jul 30 18:05:38 2012
New Revision: 1367196
URL: http://svn.apache.org/viewvc?rev=1367196&view=rev
Log:
HADOOP-8634. Ensure FileSystem#close doesn't squawk for deleteOnExit paths
(daryn via bobby)
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1367196&r1=1367195&r2=1367196&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
(original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Mon Jul
30 18:05:38 2012
@@ -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
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java?rev=1367196&r1=1367195&r2=1367196&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
Mon Jul 30 18:05:38 2012
@@ -1224,7 +1224,9 @@ public abstract class FileSystem extends
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);
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java?rev=1367196&r1=1367195&r2=1367196&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileSystemCaching.java
Mon Jul 30 18:05:38 2012
@@ -35,7 +35,7 @@ import java.security.PrivilegedException
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());
+ }
+}
\ No newline at end of file