public synchronized void updateNeeded() { if (updateNeeded) return; updateNeeded = true; LOG.debug("queueing an update-needed task for "+this+"; update will occur shortly"); Entities.submit(this, Tasks.builder().name("update-needed").body(new Runnable() { @Override public void run() { if (updateNeeded) AbstractControllerImpl.this.update(); } }).build()); }
/** * If custom behaviour is required by sub-classes, consider overriding {@link #doStart()}. */ @Override public final void start(final Collection<? extends Location> locations) { if (DynamicTasks.getTaskQueuingContext() != null) { doStart(locations); } else { Task<?> task = Tasks.builder().name("start").body(new Runnable() { public void run() { doStart(locations); } }).build(); Entities.submit(this, task).getUnchecked(); } }
/** * If custom behaviour is required by sub-classes, consider overriding {@link #doStop()}. */ @Override public final void restart() { if (DynamicTasks.getTaskQueuingContext() != null) { doRestart(); } else { Task<?> task = Tasks.builder().name("restart").body(new Runnable() { public void run() { doRestart(); } }).build(); Entities.submit(this, task).getUnchecked(); } }
/** * If custom behaviour is required by sub-classes, consider overriding {@link #doStop()}. */ @Override public final void stop() { // TODO There is a race where we set SERVICE_UP=false while sensor-adapter threads may still be polling. // The other thread might reset SERVICE_UP to true immediately after we set it to false here. // Deactivating adapters before setting SERVICE_UP reduces the race, and it is reduced further by setting // SERVICE_UP to false at the end of stop as well. // Perhaps we should wait until all feeds have completed here, // or do a SERVICE_STATE check before setting SERVICE_UP to true in a feed (?). if (DynamicTasks.getTaskQueuingContext() != null) { doStop(); } else { Task<?> task = Tasks.builder().name("stop").body(new Runnable() { public void run() { doStop(); } }).build(); Entities.submit(this, task).getUnchecked(); } }
if (isClustered() && !isFirst && CassandraCluster.WAIT_FOR_FIRST) { long firstStartTime = Entities.submit(entity, DependentConfiguration.attributeWhenReady(getEntity().getParent(), CassandraCluster.FIRST_NODE_STARTED_TIME_UTC)).getUnchecked();