You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cm...@apache.org on 2014/02/20 00:05:11 UTC
svn commit: r1569956 - in
/hadoop/common/branches/branch-2.4/hadoop-common-project: ./ hadoop-common/
hadoop-common/src/ hadoop-common/src/main/java/
hadoop-common/src/main/java/org/apache/hadoop/net/unix/
hadoop-common/src/test/java/org/apache/hadoop/...
Author: cmccabe
Date: Wed Feb 19 23:05:10 2014
New Revision: 1569956
URL: http://svn.apache.org/r1569956
Log:
HDFS-5973. add DomainSocket#shutdown method. (cmccabe)
Modified:
hadoop/common/branches/branch-2.4/hadoop-common-project/ (props changed)
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/ (props changed)
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/ (props changed)
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/ (props changed)
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/unix/DomainSocket.java
hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/unix/TestDomainSocket.java
Propchange: hadoop/common/branches/branch-2.4/hadoop-common-project/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project:r1569950
Propchange: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common:r1569950
Propchange: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/src:r1569950
Propchange: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/
------------------------------------------------------------------------------
Merged /hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java:r1569950
Modified: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/unix/DomainSocket.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/unix/DomainSocket.java?rev=1569956&r1=1569955&r2=1569956&view=diff
==============================================================================
--- hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/unix/DomainSocket.java (original)
+++ hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/unix/DomainSocket.java Wed Feb 19 23:05:10 2014
@@ -377,6 +377,22 @@ public class DomainSocket implements Clo
Thread.currentThread().interrupt();
}
}
+
+ /**
+ * Call shutdown(SHUT_RDWR) on the UNIX domain socket.
+ *
+ * @throws IOException
+ */
+ public void shutdown() throws IOException {
+ refCount.reference();
+ boolean exc = true;
+ try {
+ shutdown0(fd);
+ exc = false;
+ } finally {
+ unreference(exc);
+ }
+ }
private native static void sendFileDescriptors0(int fd,
FileDescriptor descriptors[],
Modified: hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/unix/TestDomainSocket.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/unix/TestDomainSocket.java?rev=1569956&r1=1569955&r2=1569956&view=diff
==============================================================================
--- hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/unix/TestDomainSocket.java (original)
+++ hadoop/common/branches/branch-2.4/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/net/unix/TestDomainSocket.java Wed Feb 19 23:05:10 2014
@@ -34,6 +34,8 @@ import java.util.concurrent.ExecutorServ
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
import org.junit.AfterClass;
import org.junit.Assert;
@@ -41,7 +43,6 @@ import org.junit.Assume;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
-
import org.apache.commons.lang.exception.ExceptionUtils;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.net.unix.DomainSocket.DomainChannel;
@@ -727,4 +728,38 @@ public class TestDomainSocket {
tmp.close();
}
}
+
+ @Test(timeout=180000)
+ public void testShutdown() throws Exception {
+ final AtomicInteger bytesRead = new AtomicInteger(0);
+ final AtomicBoolean failed = new AtomicBoolean(false);
+ final DomainSocket[] socks = DomainSocket.socketpair();
+ Runnable reader = new Runnable() {
+ @Override
+ public void run() {
+ while (true) {
+ try {
+ int ret = socks[1].getInputStream().read();
+ if (ret == -1) return;
+ bytesRead.addAndGet(1);
+ } catch (IOException e) {
+ DomainSocket.LOG.error("reader error", e);
+ failed.set(true);
+ return;
+ }
+ }
+ }
+ };
+ Thread readerThread = new Thread(reader);
+ readerThread.start();
+ socks[0].getOutputStream().write(1);
+ socks[0].getOutputStream().write(2);
+ socks[0].getOutputStream().write(3);
+ Assert.assertTrue(readerThread.isAlive());
+ socks[0].shutdown();
+ readerThread.join();
+ Assert.assertFalse(failed.get());
+ Assert.assertEquals(3, bytesRead.get());
+ IOUtils.cleanup(null, socks);
+ }
}