You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Jay Kreps (JIRA)" <ji...@apache.org> on 2014/12/05 22:30:12 UTC

[jira] [Comment Edited] (KAFKA-1501) transient unit tests failures due to port already in use

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

Jay Kreps edited comment on KAFKA-1501 at 12/5/14 9:29 PM:
-----------------------------------------------------------

Yeah that Stack Overflow article I linked to previously indicates that as of Java 7 the only really reliable way to check is to try to create a socket and see if that works. That should be a super non-invasive change too--just updating the implementation for choosePorts.

http://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java

They give a checkAvailable method something like the below. So the new approach would be to choose a random port in some range, and then check that it is available.

{code}
private static boolean checkAvailable(int port) {
    Socket s = null;
    try {
        s = new Socket("localhost", port);
        return false;
    } catch (IOException e) {
        return true;
    } finally {
        if( s != null){
            try {
                s.close();
            } catch (IOException e) {
                throw new RuntimeException("You should handle this error." , e);
            }
        }
    }
}
{code}


was (Author: jkreps):
Yeah that Stack Overflow article I linked to previously indicates that as of Java 7 the only really reliable way to check is to try to create a socket and see if that works. That should be a super non-invasive change too--just updating the implementation for choosePorts.

http://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java

They give a checkAvailable method something like the below. So the new approach would be to choose a random port in some range, and then check that it is available.

{code}
private static boolean checkAvailable(int port) {
    Socket s = null;
    try {
        s = new Socket("localhost", port);
        return false;
    } catch (IOException e) {
        System.out.println("--------------Port " + port + " is available");
        return true;
    } finally {
        if( s != null){
            try {
                s.close();
            } catch (IOException e) {
                throw new RuntimeException("You should handle this error." , e);
            }
        }
    }
}
{code}

> transient unit tests failures due to port already in use
> --------------------------------------------------------
>
>                 Key: KAFKA-1501
>                 URL: https://issues.apache.org/jira/browse/KAFKA-1501
>             Project: Kafka
>          Issue Type: Improvement
>          Components: core
>            Reporter: Jun Rao
>            Assignee: Guozhang Wang
>              Labels: newbie
>         Attachments: KAFKA-1501-choosePorts.patch, KAFKA-1501.patch, KAFKA-1501.patch, KAFKA-1501.patch, test-100.out, test-100.out, test-27.out, test-29.out, test-32.out, test-35.out, test-38.out, test-4.out, test-42.out, test-45.out, test-46.out, test-51.out, test-55.out, test-58.out, test-59.out, test-60.out, test-69.out, test-72.out, test-74.out, test-76.out, test-84.out, test-87.out, test-91.out, test-92.out
>
>
> Saw the following transient failures.
> kafka.api.ProducerFailureHandlingTest > testTooLargeRecordWithAckOne FAILED
>     kafka.common.KafkaException: Socket server failed to bind to localhost:59909: Address already in use.
>         at kafka.network.Acceptor.openServerSocket(SocketServer.scala:195)
>         at kafka.network.Acceptor.<init>(SocketServer.scala:141)
>         at kafka.network.SocketServer.startup(SocketServer.scala:68)
>         at kafka.server.KafkaServer.startup(KafkaServer.scala:95)
>         at kafka.utils.TestUtils$.createServer(TestUtils.scala:123)
>         at kafka.api.ProducerFailureHandlingTest.setUp(ProducerFailureHandlingTest.scala:68)



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