@Override public void run() { try { if (isNodeReady(this)) { m_operationQueue.dequeueOperationForNode(m_nodeId, this); // Synchronize here so that we can signal any interested classes that this // operation is being executed synchronized(this) { try { processPendingOperationForNode(this); } catch (ProvisioningAdapterException e) { LOG.warn("Exception thrown during adapter queuing, rescheduling: {}", e.getMessage(), e); //reschedule if the adapter throws a provisioning adapter exception schedule(getExecutorService(), true); } finally { this.notifyAll(); } } } else { schedule(getExecutorService(), false); } } catch (Throwable e) { LOG.error("Unexpected exception during node operation: {}", e.getMessage(), e); } } }
/** {@inheritDoc} */ @Override public final ScheduledFuture<?> deleteNode(int nodeId) { AdapterOperation op = new AdapterOperation(Integer.valueOf(nodeId), AdapterOperationType.DELETE, createScheduleForNode(nodeId, AdapterOperationType.DELETE)); if (m_operationQueue.enqueOperation(nodeId, op)) { op.schedule(m_executorService, true); } else { //TODO: log something } return null; }
/** {@inheritDoc} */ @Override public final ScheduledFuture<?> updateNode(int nodeId) { AdapterOperation op = new AdapterOperation(Integer.valueOf(nodeId), AdapterOperationType.UPDATE, createScheduleForNode(nodeId, AdapterOperationType.UPDATE)); if (m_operationQueue.enqueOperation(nodeId, op)) { return op.schedule(m_executorService, true); } else { //TODO: log something } return null; }
/** {@inheritDoc} * @return */ @Override public final ScheduledFuture<?> addNode(int nodeId) { AdapterOperation op = new AdapterOperation(Integer.valueOf(nodeId), AdapterOperationType.ADD, createScheduleForNode(nodeId, AdapterOperationType.ADD)); if (m_operationQueue.enqueOperation(nodeId, op)) { return op.schedule(m_executorService, true); } else { //TODO: log something } return null; }
/** {@inheritDoc} */ @Override public final ScheduledFuture<?> nodeConfigChanged(int nodeId) { AdapterOperation op = new AdapterOperation(Integer.valueOf(nodeId), AdapterOperationType.CONFIG_CHANGE, createScheduleForNode(nodeId, AdapterOperationType.CONFIG_CHANGE)); if (m_operationQueue.enqueOperation(nodeId, op)) { op.schedule(m_executorService, true); } else { //TODO: log something } return null; }