davidmoten / rxjava-jdbc

Efficient execution and functional composition of database calls using jdbc and RxJava Observables
Apache License 2.0
807 stars 113 forks source link

With AutoCommit to false, connection are not closed #85

Open hanouard opened 6 years ago

hanouard commented 6 years ago

The connections are not being closed when the autoCommit is set to false.

Is there a reason why we have this call Util.closeQuietlyIfAutoCommit(state.con); in a QuerySelectOnSubscribe ?

private static void closeQuietly(State state) {
        // ensure only closed once and avoid race conditions
        if (state.closed.compareAndSet(false, true)) {
            // set the state fields to null after closing for garbage
            // collection purposes
            log.debug("closing rs");
            Util.closeQuietly(state.rs);
            log.debug("closing ps");
            Util.closeQuietly(state.ps);
            log.debug("closing con");
            Util.closeQuietlyIfAutoCommit(state.con);
            log.debug("closed");
        }
    }

the problem with this config, is im getting a lot of active connections in my pool, and i end up with Connection is not available, request timed out after 30001ms.

And may i suggest to log the result of the operations too in debug.

davidmoten commented 6 years ago

A unit test would be great, preferrably using Database.test() as per README.md. Can you supply one?

davidmoten commented 6 years ago

Ah oops, this is for RxJava 1.x, forget the bit about Database.test(), but a unit test would still be great, or sample code.

hanouard commented 6 years ago

i could provide you with a sample project.

connection-not-closing.zip