Paul Rogers created DRILL-7560:
----------------------------------
Summary: Free leaked memory after failed unit tests
Key: DRILL-7560
URL: https://issues.apache.org/jira/browse/DRILL-7560
Project: Apache Drill
Issue Type: Improvement
Affects Versions: 1.17.0
Reporter: Paul Rogers
Many unit tests work directly with vectors or record batches returned from
queries. As a result, tests are responsible for correctly freeing memory held
by vectors. Simple example:
{code:java}
public void testDummyReader() throws Exception {
RowSet results = client.queryBuilder()
.sql("SELECT a, b, c from dummy.myTable")
.rowSet();
assertEquals(3, results.rowCount());
results.clear();
}
{code}
If the test fails, memory will be leaked and the test will report a failure on
shut-down.
Now, in most cases, the test has already failed; there is no real harm in
leaking memory because the problem will go away once the test is fixed and
works and the assert passes.
Still, one could argue that the above is messy. Perhaps a cleaner solution is:
{code:java}
public void testDummyReader() throws Exception {
RowSet results = null;
try {
results = client.queryBuilder()
.sql("SELECT a, b, c from dummy.myTable")
.rowSet();
assertEquals(3, results.rowCount());
} finally {
if (results != null) { results.clear(); }
}
{code}
Obviously, however, this is tedious and error-prone. Since these are tests,
failure could occur anywhere, maybe even before the row set is returned to the
test.
So, a more general solution is to walk the allocator tree and free any
remaining resources. Call this when we shut down the test cluster, which JUnit
will do whether the test succeeds or fails.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)