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.
---