eclipse-vertx/vert.x

exceptionHandler of AsyncFile is not triggered

d-william opened this issue · 2 comments

Version

Vert.x core : 4.5.10

Context

The exceptionHandler of an AsyncFile is not triggered when an exception is thrown in the data handler (when read).

Do you have a reproducer?

FileSystem files = Vertx.vertx().fileSystem();
Future<AsyncFile> open = files.open("file.txt", new OpenOptions());
open.onSuccess(file -> {
    file.exceptionHandler(error -> {
        System.out.println("Error: " + error.getMessage());
    });
    file.handler(buffer -> {
        System.out.println("Read data: " + buffer.toString());
        throw new RuntimeException("Error");
    });
});

Here, "Error: Error" is not displayed

Some behavior if an exception is thrown in the end handler

file.endHandler(v -> {
    System.out.println("End of file");
    throw new RuntimeException("error");
});

Extra

  • Dev hint : Register an exception handler in the internal InboundBuffer of AsyncFileImpl

It seems expected ?
Because the same behavior happens with MessageConsumer see
But at least the exception is throw in the context : "ERROR io.vertx.core.impl.ContextImpl - Unhandled exception"
Perhaps the same approach is needed for AsyncFile ?

Also maybe a clarfication in the javadoc will be nice.
In InboundBuffer, which have methods with same names (exceptionHandler and handler) the exceptionHandler is called when there is an error in the handler

I think we should report the exception to the context indeed that would be the correct behavior