From aeae5716cc20251cd945c823122911f235e8fd6b Mon Sep 17 00:00:00 2001 From: Ayush Saxena Date: Tue, 1 Feb 2022 11:00:54 +0530 Subject: [PATCH] Revert "HADOOP-18024. SocketChannel is not closed when IOException happens in Server$Listener.doAccept (#3719)" This reverts commit 6ed01585eb1929497efbafe2f19bda4f1a56575c. Breaks TestIPC#testIOEOnListenerAccept --- .../java/org/apache/hadoop/ipc/Server.java | 25 ++-------- .../java/org/apache/hadoop/ipc/TestIPC.java | 47 ------------------- 2 files changed, 4 insertions(+), 68 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java index 41afb6ee64..c5732c68b1 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Server.java @@ -1329,14 +1329,6 @@ public String toString() { } } - @VisibleForTesting - @InterfaceAudience.Private - protected void configureSocketChannel(SocketChannel channel) throws IOException { - channel.configureBlocking(false); - channel.socket().setTcpNoDelay(tcpNoDelay); - channel.socket().setKeepAlive(true); - } - /** Listens on the socket. Creates jobs for the handler threads*/ private class Listener extends Thread { @@ -1543,24 +1535,15 @@ private void closeCurrentConnection(SelectionKey key, Throwable e) { InetSocketAddress getAddress() { return (InetSocketAddress)acceptChannel.socket().getLocalSocketAddress(); } - + void doAccept(SelectionKey key) throws InterruptedException, IOException, OutOfMemoryError { ServerSocketChannel server = (ServerSocketChannel) key.channel(); SocketChannel channel; while ((channel = server.accept()) != null) { - try { - configureSocketChannel(channel); - } catch (IOException e) { - LOG.warn("Error in an accepted SocketChannel", e); - try { - channel.socket().close(); - channel.close(); - } catch (IOException ex) { - LOG.warn("Error in closing SocketChannel", ex); - } - continue; - } + channel.configureBlocking(false); + channel.socket().setTcpNoDelay(tcpNoDelay); + channel.socket().setKeepAlive(true); Reader reader = getReader(); Connection c = connectionManager.register(channel, diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java index 90415b49bc..95ff302103 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/ipc/TestIPC.java @@ -34,7 +34,6 @@ import java.io.ByteArrayOutputStream; import java.io.DataInput; import java.io.DataOutput; -import java.io.EOFException; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -49,7 +48,6 @@ import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; -import java.nio.channels.SocketChannel; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -618,51 +616,6 @@ public void testIOEOnWriteAfterPingClient() throws Exception { WRITABLE_FAULTS_SLEEP = 0; } } - - /** - * Test for HADOOP-18024. - */ - @Test(timeout=60000) - public void testIOEOnListenerAccept() throws Exception { - // start server - Server server = new TestServer(1, false, - LongWritable.class, LongWritable.class) { - @Override - protected void configureSocketChannel(SocketChannel channel) throws IOException { - maybeThrowIOE(); - super.configureSocketChannel(channel); - } - }; - InetSocketAddress addr = NetUtils.getConnectAddress(server); - server.start(); - - // start client - WRITABLE_FAULTS_ENABLED = true; - Client client = new Client(LongWritable.class, conf); - try { - LongWritable param = LongWritable.class.newInstance(); - - try { - call(client, param, addr, 0, conf); - fail("Expected an exception to have been thrown"); - } catch (EOFException e) { - LOG.info("Got expected exception", e); - } catch (Throwable t) { - LOG.warn("Got unexpected error", t); - fail("Expected an EOFException to have been thrown"); - } - - // Doing a second call with faults disabled should return fine -- - // ie the internal state of the client or server should not be broken - // by the failed call - WRITABLE_FAULTS_ENABLED = false; - call(client, param, addr, 0, conf); - - } finally { - client.stop(); - server.stop(); - } - } private static void assertExceptionContains( Throwable t, String substring) {