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)