clickhouse-java icon indicating copy to clipboard operation
clickhouse-java copied to clipboard

R2DBC client: ClickHouseResult map implementation logs but doesn't propagate exceptions.

Open andrescrz opened this issue 1 year ago • 0 comments

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

  1. Execute any statement producing aResult object.
  2. Any error triggered within the biFunction argument passed to map will be logged but not propagated. For instance, just throw a new IllegalArgumentException.
  3. 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 TABLE statements for tables involved: N/A.
  • Sample data for all these tables, use clickhouse-obfuscator if necessary: N/A.

andrescrz avatar Sep 10 '24 11:09 andrescrz