public <T> FutureWork<T> addRequestWork(Callable<T> callable) { FutureWork<T> work = new FutureWork<T>(callable, 100); work.addCompletionListener(new CompletionListener<T>() { @Override public void onCompletion(FutureWork<T> future) { RequestWorkItem.this.moreWork(); } }); work.setRequestId(this.requestID.toString()); dqpCore.addWork(work); return work; }
private void cancelFutures() { if (this.scheduledFuture != null) { this.scheduledFuture.cancel(true); this.scheduledFuture = null; } if (this.futureResult != null) { this.futureResult.cancel(false); } }
public boolean isQueued() { FutureWork<AtomicResultsMessage> future = futureResult; return !running && future != null && !future.isDone(); }
<T> FutureWork<T> addHighPriorityWork(Callable<T> callable) { FutureWork<T> work = new FutureWork<T>(callable, PrioritizedRunnable.NO_WAIT_PRIORITY); work.setRequestId(this.requestID.toString()); dqpCore.addWork(work); return work; }
private <T> ResultsFuture<T> addWork(final Callable<T> processor, int priority) { final ResultsFuture<T> result = new ResultsFuture<T>(); final ResultsReceiver<T> receiver = result.getResultsReceiver(); Runnable r = new Runnable() { @Override public void run() { try { receiver.receiveResults(processor.call()); } catch (Throwable t) { receiver.exceptionOccurred(t); } } }; FutureWork<T> work = new FutureWork<T>(r, null, priority); if (DQPWorkContext.getWorkContext().useCallingThread()) { work.run(); } else { this.addWork(work); } return result; }
@Test public void testPriorities() throws Exception { pool = new ThreadReuseExecutor("test", 1); //$NON-NLS-1$ FutureWork<Boolean> work1 = new FutureWork<Boolean>(new Callable<Boolean>() { public Boolean call() throws Exception { synchronized (pool) { FutureWork<Boolean> work2 = new FutureWork<Boolean>(new Callable<Boolean>() { public Boolean call() throws Exception { order.add(2); FutureWork<Boolean> work3 = new FutureWork<Boolean>(new Callable<Boolean>() { public Boolean call() throws Exception { order.add(3); FutureWork<Boolean> work4 = new FutureWork<Boolean>(new Callable<Boolean>() { public Boolean call() throws Exception { order.add(4); pool.notifyAll(); work1.get(); work2.get(); work3.get(); work4.get(); assertEquals(Integer.valueOf(3), order.remove()); assertEquals(Integer.valueOf(2), order.remove());
public void fullyCloseSource() { cancelFutures(); cancelAsynch = true; if (closing.compareAndSet(false, true)) { if (!done && !errored) { this.cwi.cancel(false); } workItem.closeAtomicRequest(this.aqr.getAtomicRequestID()); if (aqr.isSerial() || futureResult == null) { this.cwi.close(); } else { futureResult.addCompletionListener(new CompletionListener<AtomicResultsMessage>() { @Override public void onCompletion(FutureWork<AtomicResultsMessage> future) { if (running) { return; //-- let the other thread close } if (closed.compareAndSet(false, true)) { cwi.close(); } } }); } } }
private <T> ResultsFuture<T> addWork(final Callable<T> processor, int priority) { final ResultsFuture<T> result = new ResultsFuture<T>(); final ResultsReceiver<T> receiver = result.getResultsReceiver(); Runnable r = new Runnable() { @Override public void run() { try { receiver.receiveResults(processor.call()); } catch (Throwable t) { receiver.exceptionOccurred(t); } } }; FutureWork<T> work = new FutureWork<T>(r, null, priority); if (DQPWorkContext.getWorkContext().useCallingThread()) { work.run(); } else { this.addWork(work); } return result; }
FutureWork<Transaction> work = new FutureWork<Transaction>(new Callable<Transaction>() { @Override public Transaction call() throws Exception { tc.setTransaction(work.get());
public void fullyCloseSource() { cancelFutures(); cancelAsynch = true; if (closing.compareAndSet(false, true)) { if (!done && !errored) { this.cwi.cancel(false); } workItem.closeAtomicRequest(this.aqr.getAtomicRequestID()); if (aqr.isSerial() || futureResult == null) { this.cwi.close(); } else { futureResult.addCompletionListener(new CompletionListener<AtomicResultsMessage>() { @Override public void onCompletion(FutureWork<AtomicResultsMessage> future) { if (running) { return; //-- let the other thread close } if (closed.compareAndSet(false, true)) { cwi.close(); } } }); } } }
public <T> FutureWork<T> addRequestWork(Callable<T> callable) { FutureWork<T> work = new FutureWork<T>(callable, 100); work.addCompletionListener(new CompletionListener<T>() { @Override public void onCompletion(FutureWork<T> future) { RequestWorkItem.this.moreWork(); } }); work.setRequestId(this.requestID.toString()); dqpCore.addWork(work); return work; }
private <T> ResultsFuture<T> addWork(final Callable<T> processor, int priority) { final ResultsFuture<T> result = new ResultsFuture<T>(); final ResultsReceiver<T> receiver = result.getResultsReceiver(); Runnable r = new Runnable() { @Override public void run() { try { receiver.receiveResults(processor.call()); } catch (Throwable t) { receiver.exceptionOccurred(t); } } }; FutureWork<T> work = new FutureWork<T>(r, null, priority); if (DQPWorkContext.getWorkContext().useCallingThread()) { work.run(); } else { this.addWork(work); } return result; }
public boolean isQueued() { FutureWork<AtomicResultsMessage> future = futureResult; return !running && future != null && !future.isDone(); }
private void cancelFutures() { if (this.scheduledFuture != null) { this.scheduledFuture.cancel(true); this.scheduledFuture = null; } if (this.futureResult != null) { this.futureResult.cancel(false); } }
public void fullyCloseSource() { cancelFutures(); cancelAsynch = true; if (closing.compareAndSet(false, true)) { if (!done && !errored) { this.cwi.cancel(false); } workItem.closeAtomicRequest(this.aqr.getAtomicRequestID()); if (aqr.isSerial() || futureResult == null) { this.cwi.close(); } else { futureResult.addCompletionListener(new CompletionListener<AtomicResultsMessage>() { @Override public void onCompletion(FutureWork<AtomicResultsMessage> future) { if (running) { return; //-- let the other thread close } if (closed.compareAndSet(false, true)) { cwi.close(); } } }); } } }
<T> FutureWork<T> addWork(Callable<T> callable, CompletionListener<T> listener, int priority) { FutureWork<T> work = new FutureWork<T>(callable, priority); work.setRequestId(this.requestID.toString()); WorkWrapper<T> wl = new WorkWrapper<T>(work); work.addCompletionListener(wl); work.addCompletionListener(listener); synchronized (queue) { if (totalThreads < dqpCore.getUserRequestSourceConcurrency()) { dqpCore.addWork(work); totalThreads++; wl.submitted = true; } else { queue.add(wl); LogManager.logDetail(LogConstants.CTX_DQP, this.requestID, " reached max source concurrency of ", dqpCore.getUserRequestSourceConcurrency()); //$NON-NLS-1$ } } return work; }
public boolean isQueued() { FutureWork<AtomicResultsMessage> future = futureResult; return !running && future != null && !future.isDone(); }