You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-issues@hadoop.apache.org by "Chris Nauroth (JIRA)" <ji...@apache.org> on 2013/06/27 22:57:21 UTC

[jira] [Commented] (HADOOP-9674) RPC#Server#start does not block until server is fully initialized and listening

    [ https://issues.apache.org/jira/browse/HADOOP-9674?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13695052#comment-13695052 ] 

Chris Nauroth commented on HADOOP-9674:
---------------------------------------

After further code review, I don't think this is really a problem in practice.  While it's true that the {{Listener}} and {{Reader}} threads are not guaranteed to be fully initialized after return from {{RPC#Server#start}}, the important thing is that the server socket is listening and accepting connections, via the code in the {{Listener}} constructor:

{code}
    public Listener() throws IOException {
      address = new InetSocketAddress(bindAddress, port);
      // Create a new server socket and set to non blocking mode
      acceptChannel = ServerSocketChannel.open();
      acceptChannel.configureBlocking(false);

      // Bind the server socket to the local host and port
      bind(acceptChannel.socket(), address, backlogLength, conf, portRangeConfig);
{code}

The server socket bind is guaranteed to be done before {{RPC#Server#start}} returns, so a caller can start a server and be guaranteed that an immediate connection attempt will succeed.  It might experience some extra latency on the response if it needs to wait for the {{Listener}} and {{Reader}} threads to finish initialization, but it won't fail.

I don't think this is really a bug.  We probably just need to change the logic of the failing test, and this is already covered in HADOOP-8980.

I'm planning on resolving this as Not a Problem.  I'll leave this open a few more days in case anyone else wants to comment.
                
> RPC#Server#start does not block until server is fully initialized and listening
> -------------------------------------------------------------------------------
>
>                 Key: HADOOP-9674
>                 URL: https://issues.apache.org/jira/browse/HADOOP-9674
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: ipc
>    Affects Versions: 3.0.0, 2.2.0
>            Reporter: Chris Nauroth
>            Priority: Minor
>
> This problem was originally mentioned in discussion on HADOOP-8980.  When calling {{RPC#Server#start}}, initialization of the server's internal {{Listener}} and {{Reader}} threads happens in the background.  This initialization is not guaranteed to complete by the time the caller returns from {{RPC#Server#start}}.  This may be misleading to a caller that expects the server has been fully initialized.  This problem sometimes manifests as a test failure in {{TestRPC#testStopsAllThreads}}.  This test looks at the stack frames of all running threads, expecting to find the {{Listener}} and {{Reader}} threads, but sometimes it doesn't find them.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira