eclipse-vertx / vert.x

Vert.x is a tool-kit for building reactive applications on the JVM
http://vertx.io
Other
14.28k stars 2.08k forks source link

exceptionHandler of AsyncFile is not triggered #5343

Open d-william opened 1 week ago

d-william commented 1 week ago

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

d-william commented 1 week ago

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

vietj commented 1 week ago

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