hozumi opened a new issue #12291:
URL: https://github.com/apache/pulsar/issues/12291


   **Describe the bug**
   Pulsar and java client version: 2.8.1
   
   When a reader that listens multiple topics is configured 
`.startMessageId(MessageId.earliest)` ,  it seems that initial position is 
actually `latest` .
   Also `reader.hasMessageAvailable()` causes NPE.
   
   ```
   Exception in thread "main" java.lang.NullPointerException
        at 
org.apache.pulsar.client.impl.ConsumerImpl.hasMessageAvailableAsync(ConsumerImpl.java:1880)
        at 
org.apache.pulsar.client.impl.MultiTopicsConsumerImpl.hasMessageAvailableAsync(MultiTopicsConsumerImpl.java:751)
        at 
org.apache.pulsar.client.impl.MultiTopicsConsumerImpl.hasMessageAvailable(MultiTopicsConsumerImpl.java:741)
        at 
org.apache.pulsar.client.impl.MultiTopicsReaderImpl.hasMessageAvailable(MultiTopicsReaderImpl.java:144)
        at example.foo.Main.main(Main.java:20)
   ```
   
   It seems that the java client support MultiTopicsReaderImpl since 2.8.0.
   https://github.com/apache/pulsar/pull/9995
   
   **To Reproduce**
   Steps to reproduce the behavior:
   1. Setup standalone pulsar
   ```
   docker run -it -p 6650:6650 -p 8080:8080 --name pulsar_broker 
apachepulsar/pulsar:2.8.1 bin/pulsar standalone
   ```
   2. Configure a namespace
   ```
   docker exec -it pulsar_broker bin/pulsar-admin namespaces create sample/mytes
   docker exec -it pulsar_broker bin/pulsar-admin namespaces set-retention 
sample/mytest --size 10M --time -1
   ```
   
   3. Store some messages into two topics.
   ```
   docker exec -it pulsar_broker bin/pulsar-client produce 
"persistent://sample/mytest/mytopic1" --messages "hello1"
   docker exec -it pulsar_broker bin/pulsar-client produce 
"persistent://sample/mytest/mytopic1" --messages "hello2"
   docker exec -it pulsar_broker bin/pulsar-client produce 
"persistent://sample/mytest/mytopic2" --messages "world1"
   docker exec -it pulsar_broker bin/pulsar-client produce 
"persistent://sample/mytest/mytopic2" --messages "world2"
   ```
   4. Run multi-topic reader
   
   ```java
   package example.foo;
   
   import org.apache.pulsar.client.api.Message;
   import org.apache.pulsar.client.api.MessageId;
   import org.apache.pulsar.client.api.PulsarClient;
   import org.apache.pulsar.client.api.PulsarClientException;
   import org.apache.pulsar.client.api.Reader;
   import java.util.Arrays;
   
   public class Main {
   
       public static void main(String[] args) throws PulsarClientException {
           PulsarClient pClient = 
PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build();
           Reader<byte[]> reader = pClient.newReader()
                   .readerName("myreader1")
                   .topics(Arrays.asList("persistent://sample/mytest/mytopic1", 
"persistent://sample/mytest/mytopic2"))
                   .startMessageId(MessageId.earliest)
                   .create();
           // reader.hasMessageAvailable(); // causes NPE
           while(true) {
               Message<byte[]> m = reader.readNext();
               System.out.println(m.getTopicName() + "  value:" + new 
String(m.getData(), java.nio.charset.StandardCharsets.UTF_8));
           }
       }
   }
   ```
   
   **Expected behavior**
   Multi-topic reader should follow`startMessageId` configuration.
   
   **Additional context**
   I am not sure how this issue is related 
https://github.com/apache/pulsar/issues/9301 .


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to