/** * Send the done signal to other nodes * We are adding 1 to the result, since the thread officially has been released yet, but will be shortly */ private void done() { if (longThreadPool != null && isLong) { transport.updateLongRunningFree(address, longThreadPool.getNumberOfFreeThreads() + 1); } else { transport.updateShortRunningFree(address, shortThreadPool.getNumberOfFreeThreads() + 1); } } }
/** * {@inheritDoc} */ @Override public synchronized boolean shouldDistribute(DistributedWorkManager dwm, DistributableWork work) { log.tracef("Work=%s", work); Boolean override = WorkManagerUtil.getShouldDistribute(work); if (override != null) return override.booleanValue(); if (WorkManagerUtil.isLongRunning(work) && dwm.getLongRunningThreadPool() != null) { return !(dwm.getLongRunningThreadPool().getNumberOfFreeThreads() > watermark); } else { return !(dwm.getShortRunningThreadPool().getNumberOfFreeThreads() > watermark); } }
/** * localGetLongRunningFree * * @param address the logical address * @return the free count */ public long localGetLongRunningFree(Address address) { log.tracef("LOCAL_GET_LONGRUNNING_FREE(%s)", address); WorkManagerCoordinator wmc = WorkManagerCoordinator.getInstance(); WorkManager wm = wmc.resolveWorkManager(address); if (wm != null) { StatisticsExecutor executor = wm.getLongRunningThreadPool(); if (executor != null) return executor.getNumberOfFreeThreads(); } return 0L; }
/** * localGetShortRunningFree * * @param address the logical address * @return the free count */ public long localGetShortRunningFree(Address address) { log.tracef("LOCAL_GET_SHORTRUNNING_FREE(%s)", address); WorkManagerCoordinator wmc = WorkManagerCoordinator.getInstance(); WorkManager wm = wmc.resolveWorkManager(address); if (wm != null) { StatisticsExecutor executor = wm.getShortRunningThreadPool(); if (executor != null) return executor.getNumberOfFreeThreads(); } return 0L; }
/** * {@inheritDoc} */ public void localDoWork(Work work) throws WorkException { if (transport != null) { checkTransport(); if (getLongRunningThreadPool() != null && WorkManagerUtil.isLongRunning(work)) { transport.updateLongRunningFree(getLocalAddress(), getLongRunningThreadPool().getNumberOfFreeThreads() - 1); } else { transport.updateShortRunningFree(getLocalAddress(), getShortRunningThreadPool().getNumberOfFreeThreads() - 1); } WorkEventListener wel = new WorkEventListener(WorkManagerUtil.isLongRunning(work), getShortRunningThreadPool(), getLongRunningThreadPool(), getLocalAddress(), transport); super.doWork(work, WorkManager.INDEFINITE, null, wel); } else { super.doWork(work); } }
/** * {@inheritDoc} */ public long localStartWork(Work work) throws WorkException { if (transport != null) { checkTransport(); if (getLongRunningThreadPool() != null && WorkManagerUtil.isLongRunning(work)) { transport.updateLongRunningFree(getLocalAddress(), getLongRunningThreadPool().getNumberOfFreeThreads() - 1); } else { transport.updateShortRunningFree(getLocalAddress(), getShortRunningThreadPool().getNumberOfFreeThreads() - 1); } WorkEventListener wel = new WorkEventListener(WorkManagerUtil.isLongRunning(work), getShortRunningThreadPool(), getLongRunningThreadPool(), getLocalAddress(), transport); return super.startWork(work, WorkManager.INDEFINITE, null, wel); } else { return super.startWork(work); } }
/** * {@inheritDoc} */ public void localScheduleWork(Work work) throws WorkException { if (transport != null) { checkTransport(); if (getLongRunningThreadPool() != null && WorkManagerUtil.isLongRunning(work)) { transport.updateLongRunningFree(getLocalAddress(), getLongRunningThreadPool().getNumberOfFreeThreads() - 1); } else { transport.updateShortRunningFree(getLocalAddress(), getShortRunningThreadPool().getNumberOfFreeThreads() - 1); } WorkEventListener wel = new WorkEventListener(WorkManagerUtil.isLongRunning(work), getShortRunningThreadPool(), getLongRunningThreadPool(), getLocalAddress(), transport); super.scheduleWork(work, WorkManager.INDEFINITE, null, wel); } else { super.scheduleWork(work); } }