clickhouse-java
clickhouse-java copied to clipboard
R2DBC client: ClickHouseResult map implementation logs but doesn't propagate exceptions.
Describe the bug
For the R2DBC client, in ClickHouseResult class, the map method implementation logs but doesn't propagate exceptions. However, in the same class the flatMap method implementation both logs and propagates exceptions. See code:
- https://github.com/ClickHouse/clickhouse-java/blob/dfb161bdf367b4e36d26469600a8a80172c3fb5a/clickhouse-r2dbc/src/main/java/com/clickhouse/r2dbc/ClickHouseResult.java#L62-L64
- https://github.com/ClickHouse/clickhouse-java/blob/dfb161bdf367b4e36d26469600a8a80172c3fb5a/clickhouse-r2dbc/src/main/java/com/clickhouse/r2dbc/ClickHouseResult.java#L82-L85
Steps to reproduce
- Execute any statement producing a
Resultobject. - Any error triggered within the
biFunctionargument passed tomapwill be logged but not propagated. For instance, just throw a newIllegalArgumentException. - Exception is logged but not propagated.
Expected behaviour
Unpropagated exceptions highly increases the chances of errors being unnoticed, unless logs are observed or analysed.
The expected behaviour is propagating the exception, like flatMap method does.
Code example
import io.r2dbc.spi.ConnectionFactory;
import reactor.core.publisher.Mono;
public class ClickHouseRepository {
ConnectionFactory connectionFactory;
Mono<Void> example() {
return Mono.from(connectionFactory.create())
.flatMapMany(connection -> connection.createStatement("SELECT 1").execute())
.map(result -> result.map((row, rowMetadata) -> new IllegalArgumentException()))
.then();
}
}
Error log
Provided function caused exception: IllegalArgumentException
However, exception is just logged and not propagated.
Configuration
Environment
- Client version: 0.6.5.
- Language version: Java.
- OS: Mac, Linux.
ClickHouse server
- ClickHouse Server version: 24.3.8.13.
- ClickHouse Server non-default settings, if any: N/A.
CREATE TABLEstatements for tables involved: N/A.- Sample data for all these tables, use clickhouse-obfuscator if necessary: N/A.