_running.put(runnable, new Owner(source, requestId));
if (local_addr.equals(owner.getAddress())) { if(log.isTraceEnabled()) log.trace("[redirect] <--> [" + local_addr + "] " sendRequest(owner.getAddress(), type, owner.requestId, valueToSend); if (requestIdValue != owner.getRequestId()) { log.warn("Cancelling requestId didn't match waiting"); sendRequest(owner.getAddress(), Type.INTERRUPT_RUN, owner.getRequestId(), null); if (owner != null) { Long requestIdValue = _requestId.remove(cancelRunnable); if (requestIdValue != owner.getRequestId()) { log.warn("Cancelling requestId didn't match waiting"); sendRequest(owner.getAddress(), Type.INTERRUPT_RUN, owner.getRequestId(), null);
if (local_addr.equals(owner.getAddress())) { if(log.isTraceEnabled()) log.trace("[redirect] <--> [" + local_addr + "] " sendRequest(owner.getAddress(), type, owner.requestId, valueToSend); if (requestIdValue != owner.getRequestId()) { log.warn("Cancelling requestId didn't match waiting"); sendRequest(owner.getAddress(), Type.INTERRUPT_RUN, owner.getRequestId(), null); if (owner != null) { Long requestIdValue = _requestId.remove(cancelRunnable); if (requestIdValue != owner.getRequestId()) { log.warn("Cancelling requestId didn't match waiting"); sendRequest(owner.getAddress(), Type.INTERRUPT_RUN, owner.getRequestId(), null);
break; case CREATE_CONSUMER_READY: Owner owner = new Owner((Address)req.object, req.request); handleNewConsumer(owner); break; case CREATE_RUN_REQUEST: owner = new Owner((Address)req.object, req.request); handleNewRunRequest(owner); break; case DELETE_CONSUMER_READY: owner = new Owner((Address)req.object, req.request); handleRemoveConsumer(owner); break; case DELETE_RUN_REQUEST: owner = new Owner((Address)req.object, req.request); handleRemoveRunRequest(owner); break;
_running.put(runnable, new Owner(source, requestId));
while (iterator.hasNext()) { Owner owner = iterator.next(); if (!members.contains(owner.getAddress())) { iterator.remove(); sendRemoveConsumerRequest(owner); while (iterator.hasNext()) { Owner owner = iterator.next(); if (!members.contains(owner.getAddress())) { iterator.remove(); sendRemoveRunRequest(owner); if (!members.contains(owner.getAddress())) { Runnable runnable = entry.getValue(); _requestId.put(runnable, owner.getRequestId()); _awaitingConsumer.add(runnable); sendToCoordinator(RUN_REQUEST, owner.getRequestId(), local_addr);
owner = new Owner(address, threadId); sendToCoordinator(Type.CONSUMER_READY, owner.getRequestId(), owner.getAddress()); owner = new Owner(address, requestId); _awaitingReturn.put(owner, runnable); if (local_addr.equals(owner.getAddress())) { handleTaskSubmittedRequest(runnable, local_addr, requestId, threadId); if (runnable instanceof DistributedFuture) { Callable<?> callable = ((DistributedFuture<?>)runnable).getCallable(); sendThreadRequest(owner.getAddress(), threadId, Type.RUN_SUBMITTED, requestId, callable); sendThreadRequest(owner.getAddress(), threadId, Type.RUN_SUBMITTED, requestId, runnable);
protected void copyQueueTo(List<Address> new_joiners) { Set<Owner> copyRequests; Set<Owner> copyConsumers; _consumerLock.lock(); try { copyRequests = new HashSet<>(_runRequests); copyConsumers = new HashSet<>(_consumersAvailable); } finally { _consumerLock.unlock(); } if(log.isTraceEnabled()) log.trace("copying queue to " + new_joiners); for(Address joiner: new_joiners) { for(Owner address: copyRequests) { sendRequest(joiner, Type.CREATE_RUN_REQUEST, address.getRequestId(), address.getAddress()); } for(Owner address: copyConsumers) { sendRequest(joiner, Type.CREATE_CONSUMER_READY, address.getRequestId(), address.getAddress()); } } }
protected void handleTaskRequest(long requestId, Address address) { final Owner consumer; Owner source = new Owner(address, requestId); _consumerLock.lock(); try { consumer = _consumersAvailable.poll(); // We don't add duplicate run requests - this allows for resubmission // if it is thought the message may have been dropped if (consumer == null && !_runRequests.contains(source)) { _runRequests.add(source); } } finally { _consumerLock.unlock(); } if (consumer != null) { sendRequest(source.getAddress(), Type.CONSUMER_FOUND, consumer.getRequestId(), consumer.getAddress()); sendRemoveConsumerRequest(consumer); } else { sendNewRunRequest(source); } }
protected void handleConsumerReadyRequest(long requestId, Address address) { Owner requestor; final Owner source = new Owner(address, requestId); _consumerLock.lock(); try { requestor = _runRequests.poll(); // We don't add duplicate consumers - this allows for resubmission // if it is thought the message may have been dropped if (requestor == null && !_consumersAvailable.contains(source)) { _consumersAvailable.add(source); } } finally { _consumerLock.unlock(); } if (requestor != null) { sendRequest(requestor.getAddress(), Type.CONSUMER_FOUND, source.getRequestId(), source.getAddress()); sendRemoveRunRequest(requestor); } else { sendNewConsumerRequest(source); } }
protected void handleExceptionResponse(Address source, long requestId, Throwable throwable) { Runnable runnable = _awaitingReturn.remove( new Owner(source, requestId)); if (runnable != null) { _requestId.remove(runnable); } // We can only notify of exception if it was a future if (runnable instanceof RunnableFuture<?>) { RunnableFuture<?> future = (RunnableFuture<?>)runnable; ExecutorNotification notifier = notifiers.remove(future); if (notifier != null) { notifier.throwableEncountered(throwable); } } else { // All we can do is log the error since their is no // way to return this to the user since they don't // have a future object. log.error(Util.getMessage("RuntimeErrorEncounteredFromClusterExecuteRunnableMethod"), throwable); } }
protected void handleValueResponse(Address source, long requestId, Object value) { Runnable runnable = _awaitingReturn.remove( new Owner(source, requestId)); if (runnable != null) { _requestId.remove(runnable); } // We can only notify of success if it was a future if (runnable instanceof RunnableFuture<?>) { RunnableFuture<?> future = (RunnableFuture<?>)runnable; ExecutorNotification notifier = notifiers.remove(future); if (notifier != null) { notifier.resultReturned(value); } } else { log.warn("Runnable was not found in awaiting"); } }
protected void handleTaskRejectedResponse(Address source, long requestId) { Runnable runnable = _awaitingReturn.remove(new Owner( source, requestId)); if (runnable != null) { _awaitingConsumer.add(runnable); Long taskRequestId = _requestId.get(runnable); if (taskRequestId != requestId) { log.warn("Task Request Id doesn't match in rejection"); } sendToCoordinator(RUN_REQUEST, taskRequestId, local_addr); } else { log.error(Util.getMessage("ErrorResubmittingTaskForRequestId") + requestId); } }
protected void handleInterruptRequest(Address source, long requestId) { Owner owner = new Owner(source, requestId); Runnable runnable = removeKeyForValue(_running, owner); Thread thread = null; if (runnable != null) { thread = _runnableThreads.remove(runnable); } if (thread != null) { thread.interrupt(); } else if (log.isTraceEnabled()) log.trace("Message could not be interrupted due to it already returned"); }
protected void updateBackups(Type type, Owner obj) { synchronized(backups) { for(Address backup: backups) sendRequest(backup, type, obj.getRequestId(), obj.getAddress()); } }
protected void handleConsumerUnreadyRequest(long requestId, Address address) { Owner consumer = new Owner(address, requestId); _consumerLock.lock(); try { _consumersAvailable.remove(consumer); } finally { _consumerLock.unlock(); } sendRemoveConsumerRequest(consumer); }
break; case CREATE_CONSUMER_READY: Owner owner = new Owner((Address)req.object, req.request); handleNewConsumer(owner); break; case CREATE_RUN_REQUEST: owner = new Owner((Address)req.object, req.request); handleNewRunRequest(owner); break; case DELETE_CONSUMER_READY: owner = new Owner((Address)req.object, req.request); handleRemoveConsumer(owner); break; case DELETE_RUN_REQUEST: owner = new Owner((Address)req.object, req.request); handleRemoveRunRequest(owner); break;
while (iterator.hasNext()) { Owner owner = iterator.next(); if (!members.contains(owner.getAddress())) { iterator.remove(); sendRemoveConsumerRequest(owner); while (iterator.hasNext()) { Owner owner = iterator.next(); if (!members.contains(owner.getAddress())) { iterator.remove(); sendRemoveRunRequest(owner); if (!members.contains(owner.getAddress())) { Runnable runnable = entry.getValue(); _requestId.put(runnable, owner.getRequestId()); _awaitingConsumer.add(runnable); sendToCoordinator(RUN_REQUEST, owner.getRequestId(), local_addr);
owner = new Owner(address, threadId); sendToCoordinator(Type.CONSUMER_READY, owner.getRequestId(), owner.getAddress()); owner = new Owner(address, requestId); _awaitingReturn.put(owner, runnable); if (local_addr.equals(owner.getAddress())) { handleTaskSubmittedRequest(runnable, local_addr, requestId, threadId); if (runnable instanceof DistributedFuture) { Callable<?> callable = ((DistributedFuture<?>)runnable).getCallable(); sendThreadRequest(owner.getAddress(), threadId, Type.RUN_SUBMITTED, requestId, callable); sendThreadRequest(owner.getAddress(), threadId, Type.RUN_SUBMITTED, requestId, runnable);
protected void handleConsumerReadyRequest(long requestId, Address address) { Owner requestor; final Owner source = new Owner(address, requestId); _consumerLock.lock(); try { requestor = _runRequests.poll(); // We don't add duplicate consumers - this allows for resubmission // if it is thought the message may have been dropped if (requestor == null && !_consumersAvailable.contains(source)) { _consumersAvailable.add(source); } } finally { _consumerLock.unlock(); } if (requestor != null) { sendRequest(requestor.getAddress(), Type.CONSUMER_FOUND, source.getRequestId(), source.getAddress()); sendRemoveRunRequest(requestor); } else { sendNewConsumerRequest(source); } }