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