Uploaded image for project: 'Ratis'
  1. Ratis
  2. RATIS-979 Ratis streaming
  3. RATIS-1202

Executor thread crashes on NPE

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Resolved
    • Major
    • Resolution: Not A Problem
    • None
    • None
    • None
    • None

    Description

      If you change  the FileStore state machine implementation to 

       

        @Override
        public CompletableFuture<DataStream> stream(RaftClientRequest request) {
          return CompletableFuture.completedFuture(null);
        }
      

      This will create a NPE at https://github.com/apache/incubator-ratis/blob/04ff37ef6fdef100cb7a424ba9f7b438aec2c9ba/ratis-netty/src/main/java/org/apache/ratis/netty/server/DataStreamManagement.java#L243.

      However, it seems like the exception in thread in executor cannot be caught by

            @Override
            public void exceptionCaught(ChannelHandlerContext ctx, Throwable throwable) {
              Optional.ofNullable(requestRef.getAndSetNull())
                  .ifPresent(request -> requests.replyDataStreamException(throwable, request, ctx));
            }
      

      as the exception is printed directly.

      2020-12-03 20:22:08,680 WARN  server.DataStreamManagement (DataStreamManagement.java:sendDataStreamException(329)) - Failed to process DataStreamRequestByteBuf:STREAM_CLOSE,id=0,offset=2097152,length=0
      java.util.concurrent.CompletionException: java.lang.NullPointerException
      	at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:273)
      	at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:280)
      	at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:604)
      	at java.util.concurrent.CompletableFuture$UniApply.tryFire(CompletableFuture.java:577)
      	at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:442)
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      	at java.lang.Thread.run(Thread.java:748)
      Caused by: java.lang.NullPointerException
      	at org.apache.ratis.netty.server.DataStreamManagement.writeTo(DataStreamManagement.java:243)
      	at org.apache.ratis.netty.server.DataStreamManagement$LocalStream.lambda$null$1(DataStreamManagement.java:80)
      	at java.util.concurrent.CompletableFuture.uniApply(CompletableFuture.java:602)
      	... 5 more
      

      Attachments

        Activity

          People

            amaliujia Rui Wang
            amaliujia Rui Wang
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: