Search in sources :

Example 1 with BasicInetPeer

use of org.apache.hadoop.hdfs.net.BasicInetPeer in project hadoop by apache.

the class DFSUtilClient method peerFromSocket.

public static Peer peerFromSocket(Socket socket) throws IOException {
    Peer peer;
    boolean success = false;
    try {
        // TCP_NODELAY is crucial here because of bad interactions between
        // Nagle's Algorithm and Delayed ACKs. With connection keepalive
        // between the client and DN, the conversation looks like:
        //   1. Client -> DN: Read block X
        //   2. DN -> Client: data for block X
        //   3. Client -> DN: Status OK (successful read)
        //   4. Client -> DN: Read block Y
        // The fact that step #3 and #4 are both in the client->DN direction
        // triggers Nagling. If the DN is using delayed ACKs, this results
        // in a delay of 40ms or more.
        //
        // TCP_NODELAY disables nagling and thus avoids this performance
        // disaster.
        socket.setTcpNoDelay(true);
        SocketChannel channel = socket.getChannel();
        if (channel == null) {
            peer = new BasicInetPeer(socket);
        } else {
            peer = new NioInetPeer(socket);
        }
        success = true;
        return peer;
    } finally {
        if (!success) {
            // peer is always null so no need to call peer.close().
            socket.close();
        }
    }
}
Also used : SocketChannel(java.nio.channels.SocketChannel) NioInetPeer(org.apache.hadoop.hdfs.net.NioInetPeer) Peer(org.apache.hadoop.hdfs.net.Peer) NioInetPeer(org.apache.hadoop.hdfs.net.NioInetPeer) BasicInetPeer(org.apache.hadoop.hdfs.net.BasicInetPeer) BasicInetPeer(org.apache.hadoop.hdfs.net.BasicInetPeer)

Aggregations

SocketChannel (java.nio.channels.SocketChannel)1 BasicInetPeer (org.apache.hadoop.hdfs.net.BasicInetPeer)1 NioInetPeer (org.apache.hadoop.hdfs.net.NioInetPeer)1 Peer (org.apache.hadoop.hdfs.net.Peer)1