@Override public boolean add(E e) { queueingStrategy.onBeforeAdd(e); try { return super.add(e); } finally { queueingStrategy.onAfterAdd(); } }
@Override public E poll() { queueingStrategy.onBeforeRemove(); E value = null; try { return value = super.poll(); } finally { queueingStrategy.onAfterRemove(value); } }
@SuppressWarnings("unchecked") @Override public void onSuccess(QSTaskModel task, TaskKit kit, Object result) { kit.worker.onSuccess(kit.factory, kit, result); queueingStrategy.onBeforeRemove(); taskService.closeTask(task); LOG.info("Task succeeded: {}", task); task.finishedHappy = true; }
@SuppressWarnings("unchecked") @Override public void onComplete(QSTaskModel task, TaskKit kit, Object result) { kit.worker.onComplete(kit.factory, kit, result); task.finished = System.currentTimeMillis(); task.elapsed = task.finished - task.started; logService.completedTask(task); queueingStrategy.onAfterRemove(task); }
@SuppressWarnings("unchecked") @Override public void onError(QSTaskModel task, TaskKit kit, Throwable throwable) { try { kit.worker.onError(kit.factory, kit, throwable); } catch (Throwable anotherThrowable) { LOG.warn("There was an error in worker.onError It will replace the current throwable.", anotherThrowable); throwable = anotherThrowable; } queueingStrategy.onBeforeRemove(); ImmutableMap<String, ImmutableMap<String, String>> exceptionDetails = ImmutableMap.of("exception", ImmutableMap.of( "class", throwable.getClass().getName(), "message", throwable.getMessage(), "stackTrace", ExceptionUtils.getStackTrace(throwable) )); QSLogModel logTick = new QSLogModel(task.taskId, workerIdService.getWorkerId(), task.handler, System.currentTimeMillis(), exceptionDetails); if (LOG.isDebugEnabled()) { LOG.debug("Task erred: {}", logTick, throwable); } else { LOG.info("Task erred: {}", logTick); } logService.log(logTick); if (--task.remainingAttempts > 0) { taskService.resetTask(task); } else { taskService.closeTask(task); } task.finishedHappy = false; }
@Override public E take() throws InterruptedException { queueingStrategy.onBeforeRemove(); E value = null; try { return value = super.take(); } finally { queueingStrategy.onAfterRemove(value); } }
@Override public void put(E e) throws InterruptedException { queueingStrategy.onBeforeAdd(e); try { super.put(e); } finally { queueingStrategy.onAfterAdd(); } }
@Override public E poll(long timeout, TimeUnit unit) throws InterruptedException { queueingStrategy.onBeforeRemove(); E value = null; try { return value = super.poll(timeout, unit); } finally { queueingStrategy.onAfterRemove(value); } }
@Override protected void go() throws Exception { // If the heap is filling up, this should block for a bit. queueStrategy.on*Remove called when // task processing completes in the WorkerQueueItemHandler. queueingStrategy.onBeforeAdd(null); QSTaskModel task = taskService.getAvailableTask(); taskServices.put(task, taskService); transferQueue.put(task); queueingStrategy.onAfterAdd(); } }