Description
Calling CreateTopicsResult.topicId().get() throws NullPointerException, while KafkaAdminClient correctly returns the topicId.
The NPE appears to be caused by MockAdminClient.createTopics() calling future.complete(null)
Stacktrace:
java.util.concurrent.ExecutionException: java.lang.NullPointerException at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396) at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073) at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:165) at MockAdminClientBug.shouldNotThrowNullPointerException(MockAdminClientBug.java:37) [snip] Caused by: java.lang.NullPointerException at org.apache.kafka.common.internals.KafkaFutureImpl.lambda$thenApply$0(KafkaFutureImpl.java:60) at java.base/java.util.concurrent.CompletableFuture.uniApplyNow(CompletableFuture.java:684) at java.base/java.util.concurrent.CompletableFuture.uniApplyStage(CompletableFuture.java:662) at java.base/java.util.concurrent.CompletableFuture.thenApply(CompletableFuture.java:2168) at org.apache.kafka.common.internals.KafkaFutureImpl.thenApply(KafkaFutureImpl.java:58) at org.apache.kafka.clients.admin.CreateTopicsResult.topicId(CreateTopicsResult.java:82) ... 85 more
Test case to reproduce:
import org.apache.kafka.clients.admin.Admin; import org.apache.kafka.clients.admin.CreateTopicsResult; import org.apache.kafka.clients.admin.MockAdminClient; import org.apache.kafka.clients.admin.NewTopic; import org.apache.kafka.common.Node; import org.apache.kafka.common.Uuid; import org.junit.jupiter.api.Test; import java.util.Optional; import java.util.concurrent.ExecutionException; import static java.util.Collections.singletonList; public class MockAdminClientBug { @Test void shouldNotThrowNullPointerException() throws ExecutionException, InterruptedException { Node controller = new Node(0, "mock", 0); try (Admin admin = new MockAdminClient(singletonList(controller), controller)) { CreateTopicsResult result = admin.createTopics(singletonList(new NewTopic("TestTopic", Optional.empty(), Optional.empty()))); Uuid topicId = result.topicId("TestTopic").get(); System.out.println(topicId); } } }
Attachments
Issue Links
- links to