DRILL-3063: TestQueriesOnLargeFile leaks memory with 16M limit Changed the cleanup handling at the end of ImplCreator.getExec(), and handle the newly returned null value in FragmentExecutor.run().
Project: http://git-wip-us.apache.org/repos/asf/drill/repo Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/e58a3063 Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/e58a3063 Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/e58a3063 Branch: refs/heads/master Commit: e58a30638fd7fc700b1e93d05503ddb7a7b76643 Parents: bef60f5 Author: Chris Westin <[email protected]> Authored: Thu May 14 15:53:05 2015 -0700 Committer: Jacques Nadeau <[email protected]> Committed: Thu May 14 21:58:52 2015 -0700 ---------------------------------------------------------------------- .../apache/drill/exec/physical/impl/ImplCreator.java | 13 ++++++------- .../drill/exec/work/fragment/FragmentExecutor.java | 3 +++ 2 files changed, 9 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/drill/blob/e58a3063/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ImplCreator.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ImplCreator.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ImplCreator.java index 77ca0f5..66558be 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ImplCreator.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ImplCreator.java @@ -77,7 +77,6 @@ public class ImplCreator { Stopwatch watch = new Stopwatch(); watch.start(); - boolean success = false; try { final RootExec rootExec = creator.getRootExec(root, context); // skip over this for SimpleRootExec (testing) @@ -91,15 +90,15 @@ public class ImplCreator { "The provided fragment did not have a root node that correctly created a RootExec value."); } - success = true; return rootExec; - } finally { - if (!success) { - for(final CloseableRecordBatch crb : creator.getOperators()) { - AutoCloseables.close(crb, logger); - } + } catch(Exception e) { + context.fail(e); + for(final CloseableRecordBatch crb : creator.getOperators()) { + AutoCloseables.close(crb, logger); } } + + return null; } /** Create RootExec and its children (RecordBatches) for given FragmentRoot */ http://git-wip-us.apache.org/repos/asf/drill/blob/e58a3063/exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/FragmentExecutor.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/FragmentExecutor.java b/exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/FragmentExecutor.java index 8c49d68..ffb76b1 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/FragmentExecutor.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/FragmentExecutor.java @@ -226,6 +226,9 @@ public class FragmentExecutor implements Runnable { drillbitContext.getPlanReader().readFragmentOperator(fragment.getFragmentJson()); root = ImplCreator.getExec(fragmentContext, rootOperator); + if (root == null) { + return; + } clusterCoordinator.addDrillbitStatusListener(drillbitStatusListener); updateState(FragmentState.RUNNING);
