Github user ppadma commented on a diff in the pull request: https://github.com/apache/drill/pull/1051#discussion_r153323467 --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/work/foreman/rm/ThrottledResourceManager.java --- @@ -314,13 +315,49 @@ public void exit() { lease = null; } + @Override + public void cancel() { + if (queueAcquirerThread != null) { + queueAcquirerThread.interrupt(); + } + foreman.moveToState(QueryState.CANCELED, null); + } + @Override public boolean hasQueue() { return true; } @Override public String queueName() { return lease == null ? null : lease.queueName(); } + + /** + * Is used to start query enqueue process in separate thread. + * Changes query state depending on the result. + */ + private class QueueAcquirer implements Runnable { + + private final QueryQueue queryQueue; + private final Foreman foreman; + private final double queryCost; + + QueueAcquirer(QueryQueue queryQueue, Foreman foreman, double queryCost) { + this.queryQueue = queryQueue; + this.foreman = foreman; + this.queryCost = queryCost; + } + + @Override + public void run() { + try { + queryQueue.enqueue(foreman.getQueryId(), queryCost); + foreman.moveToState(QueryState.STARTING, null); + } catch (Exception e) { --- End diff -- Should we handle interruptedException (for cancel above) here ? I don't think we want to move Query to FAILED state by default.
---