Skip to content

JDBC driver: Closing a Connection does not close ResultSets originated from the DatabaseMetadata API, potentially leading to exceptions related to memory leaks #990

@ennuite

Description

@ennuite

Describe the bug, including details regarding any error messages, version, and platform.

Very similar to #932

If a ResultSet obtained via a method from the DatabaseMetaData JDBC interface is not closed at the time of closing the connection, an exception is thrown in Connection.close() This is separate from the linked bug, because the other one only contemplated ResultSets that originate in queries made via Statements. However, the behavior is very similar.

Code to reproduce:

    try {

      // Establish connection

      Connection connection = DriverManager.getConnection(jdbcUrl, properties);

      DatabaseMetaData metaData = connection.getMetaData();
      // any other method that returns a ResultSet would also repro
      ResultSet rs = metaData.getTableTypes();
      // this eliminates the exception
      // rs.close(); 

      connection.close();

    } catch (Exception e) {
      System.err.println("Error: " + e.getMessage());
      e.printStackTrace();
    }

Resulting in the following exception (under version 18.3.0)

Jan 27, 2026 2:02:59 AM org.apache.arrow.driver.jdbc.shaded.org.apache.arrow.memory.BaseAllocator close
SEVERE: Memory was leaked by query. Memory leaked: (64)
Allocator(VectorSchemaRootTransformer) 0/64/64/9223372036854775807 (res/actual/peak/limit)

Error: Exception while closing: Memory was leaked by query. Memory leaked: (64)
Allocator(VectorSchemaRootTransformer) 0/64/64/9223372036854775807 (res/actual/peak/limit)

java.sql.SQLException: Exception while closing: Memory was leaked by query. Memory leaked: (64)
Allocator(VectorSchemaRootTransformer) 0/64/64/9223372036854775807 (res/actual/peak/limit)

	at org.apache.arrow.driver.jdbc.shaded.org.apache.calcite.avatica.Helper.createException(Helper.java:56)
	at org.apache.arrow.driver.jdbc.shaded.org.apache.calcite.avatica.Helper.createException(Helper.java:41)
	at org.apache.arrow.driver.jdbc.ArrowFlightConnection.close(ArrowFlightConnection.java:190)
	at MemoryLeakRepro.main(MemoryLeakRepro.java:136)
Caused by: java.lang.RuntimeException: Exception while closing: Memory was leaked by query. Memory leaked: (64)
Allocator(VectorSchemaRootTransformer) 0/64/64/9223372036854775807 (res/actual/peak/limit)

	at org.apache.arrow.driver.jdbc.shaded.org.apache.arrow.util.AutoCloseables.closeNoChecked(AutoCloseables.java:211)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at org.apache.arrow.driver.jdbc.ArrowFlightConnection.close(ArrowFlightConnection.java:185)
	... 1 more
Caused by: java.lang.IllegalStateException: Memory was leaked by query. Memory leaked: (64)
Allocator(VectorSchemaRootTransformer) 0/64/64/9223372036854775807 (res/actual/peak/limit)

	at org.apache.arrow.driver.jdbc.shaded.org.apache.arrow.memory.BaseAllocator.close(BaseAllocator.java:504)
	at org.apache.arrow.driver.jdbc.shaded.org.apache.arrow.util.AutoCloseables.closeNoChecked(AutoCloseables.java:209)
	... 3 more


Metadata

Metadata

Assignees

No one assigned

    Labels

    Type: bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions