Author: cnauroth Date: Fri Jul 11 22:07:43 2014 New Revision: 1609853 URL: http://svn.apache.org/r1609853 Log: HADOOP-8185. Merging change r1389010 from trunk to branch-2.
Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java?rev=1609853&r1=1609852&r2=1609853&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java Fri Jul 11 22:07:43 2014 @@ -93,6 +93,7 @@ import com.google.common.collect.Lists; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.classification.InterfaceAudience; +import org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation; import org.apache.hadoop.fs.BlockStorageLocation; @@ -894,6 +895,17 @@ public class DFSClient implements java.i } /** + * Close all open streams, abandoning all of the leases and files being + * created. + * @param abort whether streams should be gracefully closed + */ + public void closeOutputStreams(boolean abort) { + if (clientRunning) { + closeAllFilesBeingWritten(abort); + } + } + + /** * Get the default block size for this cluster * @return the default block size in bytes */ Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java?rev=1609853&r1=1609852&r2=1609853&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java Fri Jul 11 22:07:43 2014 @@ -846,10 +846,10 @@ public class DistributedFileSystem exten @Override public void close() throws IOException { try { - super.processDeleteOnExit(); - dfs.close(); - } finally { + dfs.closeOutputStreams(false); super.close(); + } finally { + dfs.close(); } } Modified: hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java?rev=1609853&r1=1609852&r2=1609853&view=diff ============================================================================== --- hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java (original) +++ hadoop/common/branches/branch-2/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java Fri Jul 11 22:07:43 2014 @@ -24,7 +24,9 @@ import static org.junit.Assert.assertNot import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; - +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; import java.io.File; import java.io.FileNotFoundException; @@ -70,6 +72,7 @@ import org.apache.hadoop.util.DataChecks import org.apache.hadoop.util.Time; import org.apache.log4j.Level; import org.junit.Test; +import org.mockito.InOrder; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -169,7 +172,31 @@ public class TestDistributedFileSystem { if (cluster != null) {cluster.shutdown();} } } - + + @Test + public void testDFSCloseOrdering() throws Exception { + DistributedFileSystem fs = new MyDistributedFileSystem(); + Path path = new Path("/a"); + fs.deleteOnExit(path); + fs.close(); + + InOrder inOrder = inOrder(fs.dfs); + inOrder.verify(fs.dfs).closeOutputStreams(eq(false)); + inOrder.verify(fs.dfs).delete(eq(path.toString()), eq(true)); + inOrder.verify(fs.dfs).close(); + } + + private static class MyDistributedFileSystem extends DistributedFileSystem { + MyDistributedFileSystem() { + statistics = new FileSystem.Statistics("myhdfs"); // can't mock finals + dfs = mock(DFSClient.class); + } + @Override + public boolean exists(Path p) { + return true; // trick out deleteOnExit + } + } + @Test public void testDFSSeekExceptions() throws IOException { Configuration conf = getTestConfiguration();