HADOOP-8185. Merging change r1389010 from trunk to branch-2.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1609853 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0b215699e6
commit
fcd5f43d50
|
@ -93,6 +93,7 @@ import com.google.common.collect.Lists;
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
import org.apache.hadoop.classification.InterfaceAudience;
|
import org.apache.hadoop.classification.InterfaceAudience;
|
||||||
|
import org.apache.hadoop.classification.InterfaceAudience.LimitedPrivate;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.fs.BlockLocation;
|
import org.apache.hadoop.fs.BlockLocation;
|
||||||
import org.apache.hadoop.fs.BlockStorageLocation;
|
import org.apache.hadoop.fs.BlockStorageLocation;
|
||||||
|
@ -893,6 +894,17 @@ public class DFSClient implements java.io.Closeable, RemotePeerFactory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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
|
* Get the default block size for this cluster
|
||||||
* @return the default block size in bytes
|
* @return the default block size in bytes
|
||||||
|
|
|
@ -846,10 +846,10 @@ public class DistributedFileSystem extends FileSystem {
|
||||||
@Override
|
@Override
|
||||||
public void close() throws IOException {
|
public void close() throws IOException {
|
||||||
try {
|
try {
|
||||||
super.processDeleteOnExit();
|
dfs.closeOutputStreams(false);
|
||||||
dfs.close();
|
|
||||||
} finally {
|
|
||||||
super.close();
|
super.close();
|
||||||
|
} finally {
|
||||||
|
dfs.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,9 @@ import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.assertNull;
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
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.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
@ -70,6 +72,7 @@ import org.apache.hadoop.util.DataChecksum;
|
||||||
import org.apache.hadoop.util.Time;
|
import org.apache.hadoop.util.Time;
|
||||||
import org.apache.log4j.Level;
|
import org.apache.log4j.Level;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.mockito.InOrder;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.mockito.invocation.InvocationOnMock;
|
import org.mockito.invocation.InvocationOnMock;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
|
@ -169,7 +172,31 @@ public class TestDistributedFileSystem {
|
||||||
if (cluster != null) {cluster.shutdown();}
|
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
|
@Test
|
||||||
public void testDFSSeekExceptions() throws IOException {
|
public void testDFSSeekExceptions() throws IOException {
|
||||||
Configuration conf = getTestConfiguration();
|
Configuration conf = getTestConfiguration();
|
||||||
|
|
Loading…
Reference in New Issue