kafka-jira mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bart De Vylder (JIRA)" <j...@apache.org>
Subject [jira] [Created] (KAFKA-6026) Timeout on KafkaFuture not honoured
Date Mon, 09 Oct 2017 14:42:00 GMT
Bart De Vylder created KAFKA-6026:
-------------------------------------

             Summary: Timeout on KafkaFuture not honoured
                 Key: KAFKA-6026
                 URL: https://issues.apache.org/jira/browse/KAFKA-6026
             Project: Kafka
          Issue Type: Bug
          Components: admin
    Affects Versions: 0.11.0.0
            Reporter: Bart De Vylder


I would expect the following code to raise an Exception, either in the adminClient creation
or a TimeoutException when getting the future (there is no kafka running on localhost on that
port). 

{code:java}
        Properties config = new Properties();
        config.setProperty("bootstrap.servers", "localhost:1234");
        AdminClient admin = AdminClient.create(config);
        admin.listTopics().names().get(1, TimeUnit.SECONDS);
{code}

The code however seems to hang forever in the last step.

A possible cause for the behavior might be a bug in the KafkaFutureImpl class:
{code:java}
    private static class SingleWaiter<R> extends BiConsumer<R, Throwable> {
       [...]

        R await(long timeout, TimeUnit unit)
                throws InterruptedException, ExecutionException, TimeoutException {
            long startMs = System.currentTimeMillis();
            long waitTimeMs = (unit.toMillis(timeout) > 0) ? unit.toMillis(timeout) : 1;
            long delta = 0;
            synchronized (this) {
                while (true) {
                    if (exception != null)
                        wrapAndThrow(exception);
                    if (done)
                        return value;
                    if (delta > waitTimeMs) {
                        throw new TimeoutException();
                    }
                    this.wait(waitTimeMs - delta);
                    delta = System.currentTimeMillis() - startMs;
                }
            }
        }
{code}

While debugging I observed {{waitTimeMs}} and {{delta}} to become equal after one iteration,
giving a {{this.wait(0)}} in the next iteration, which according to the documentation http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-
results in an indefinite wait.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message