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

Robert Kanter commented on YARN-3528:
-------------------------------------

I don't think we can simply put 0 everywhere.  In some places it looks like we 
set a config (e.g. NM address) and then some other code actually starts using 
the port based on the config.  In that case, I think we can do something like 
this to choose a port:
{code:java}

    public int getPort() throws RuntimeException {
      Random rand = new Random();
      int port = -1;
      int tries = 0;
      while(port == -1) {
        ServerSocket s = null;
        try {
          int tryPort = 49152 + rand.nextInt(65535 - 49152);
          System.out.println("Using port " + tryPort);
          s = new ServerSocket(tryPort);
          port = tryPort;
        } catch (IOException e) {
          tries++;
          if (tries >= 10) {
            System.out.println("Port is already in use; giving up");
            throw new RuntimeException(e);
          } else {
            System.out.println("Port is already in use; trying again");
          }
        } finally {
          IOUtils.closeQuietly(s);
        }
      }
      return port;
    }
{code}
It's possible for something to steal the port between the time this method 
finds an open one and the time that we actually start using it, but it's not 
likely.

Thoughts?

> Tests with 12345 as hard-coded port break jenkins
> -------------------------------------------------
>
>                 Key: YARN-3528
>                 URL: https://issues.apache.org/jira/browse/YARN-3528
>             Project: Hadoop YARN
>          Issue Type: Bug
>    Affects Versions: 3.0.0
>         Environment: ASF Jenkins
>            Reporter: Steve Loughran
>            Assignee: Brahma Reddy Battula
>            Priority: Blocker
>              Labels: test
>
> A lot of the YARN tests have hard-coded the port 12345 for their services to 
> come up on.
> This makes it impossible to have scheduled or precommit tests to run 
> consistently on the ASF jenkins hosts. Instead the tests fail regularly and 
> appear to get ignored completely.
> A quick grep of "12345" shows up many places in the test suite where this 
> practise has developed.
> * All {{BaseContainerManagerTest}} subclasses
> * {{TestNodeManagerShutdown}}
> * {{TestContainerManager}}
> + others
> This needs to be addressed through portscanning and dynamic port allocation. 
> Please can someone do this.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to