Author: todd
Date: Fri May 4 16:17:15 2012
New Revision: 1334049
URL: http://svn.apache.org/viewvc?rev=1334049&view=rev
Log:
HDFS-3359. DFSClient.close should close cached sockets. Contributed by Todd
Lipcon.
Modified:
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java
Modified:
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1334049&r1=1334048&r2=1334049&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
(original)
+++
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
Fri May 4 16:17:15 2012
@@ -40,6 +40,8 @@ Release 0.23.3 - UNRELEASED
HDFS-3331. In namenode, check superuser privilege for setBalancerBandwidth
and acquire the write lock for finalizeUpgrade. (szetszwo)
+ HDFS-3359. DFSClient.close should close cached sockets. (todd)
+
Release 0.23.2 - UNRELEASED
INCOMPATIBLE CHANGES
Modified:
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java?rev=1334049&r1=1334048&r2=1334049&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
(original)
+++
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java
Fri May 4 16:17:15 2012
@@ -454,6 +454,7 @@ public class DFSClient implements java.i
void abort() {
clientRunning = false;
closeAllFilesBeingWritten(true);
+ socketCache.clear();
RPC.stopProxy(rpcNamenode); // close connections to the namenode
}
@@ -491,6 +492,7 @@ public class DFSClient implements java.i
public synchronized void close() throws IOException {
if(clientRunning) {
closeAllFilesBeingWritten(false);
+ socketCache.clear();
clientRunning = false;
leaserenewer.closeClient(this);
// close connections to the namenode
Modified:
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java?rev=1334049&r1=1334048&r2=1334049&view=diff
==============================================================================
---
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java
(original)
+++
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java
Fri May 4 16:17:15 2012
@@ -84,6 +84,7 @@ public class TestDistributedFileSystem {
/**
* Tests DFSClient.close throws no ConcurrentModificationException if
* multiple files are open.
+ * Also tests that any cached sockets are closed. (HDFS-3359)
*/
@Test
public void testDFSClose() throws Exception {
@@ -92,13 +93,24 @@ public class TestDistributedFileSystem {
FileSystem fileSys = cluster.getFileSystem();
try {
- // create two files
+ // create two files, leaving them open
fileSys.create(new Path("/test/dfsclose/file-0"));
fileSys.create(new Path("/test/dfsclose/file-1"));
+
+ // create another file, close it, and read it, so
+ // the client gets a socket in its SocketCache
+ Path p = new Path("/non-empty-file");
+ DFSTestUtil.createFile(fileSys, p, 1L, (short)1, 0L);
+ DFSTestUtil.readFile(fileSys, p);
+
+ DFSClient client = ((DistributedFileSystem)fileSys).dfs;
+ SocketCache cache = client.socketCache;
+ assertEquals(1, cache.size());
fileSys.close();
- }
- finally {
+
+ assertEquals(0, cache.size());
+ } finally {
if (cluster != null) {cluster.shutdown();}
}
}