Uploaded image for project: 'Kafka'
  1. Kafka
  2. KAFKA-14967

MockAdminClient throws NullPointerException in CreateTopicsResult

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 3.4.0
    • 3.6.0
    • clients
    • None

    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

          Activity

            People

              hertzsprung James Shaw
              hertzsprung James Shaw
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: