public void executeCooldown(String nsr_id, String vnfr_id, long cooldown) { log.info("[EXECUTOR] START_COOLDOWN " + new Date().getTime()); if (actionMonitor.isTerminating(vnfr_id)) { actionMonitor.finishedAction(vnfr_id, Action.TERMINATED); return; } log.info("Starting CooldownTask for VNFR with id: " + vnfr_id); if (actionMonitor.requestAction(vnfr_id, Action.COOLDOWN)) { log.debug("Creating new CooldownTask for VNFR with id: " + vnfr_id); CooldownTask cooldownTask = new CooldownTask(nsr_id, vnfr_id, cooldown, executionEngine, actionMonitor); taskScheduler.execute(cooldownTask); } else { if (actionMonitor.getAction(vnfr_id) == Action.COOLDOWN) { log.debug( "Waiting already for Cooldown for VNFR with id: " + vnfr_id + ". Cannot create another ExecutionTask for VNFR with id: " + vnfr_id); } else if (actionMonitor.getAction(vnfr_id) == Action.SCALE) { log.debug("VNFR with id: " + vnfr_id + " is still in Scaling."); } else { log.debug(actionMonitor.toString()); } } }
@Async public Future<Boolean> stop(String nsr_id, String vnfr_id) { log.debug("Stopping ExecutionTask/CooldownTask for VNFR with id: " + vnfr_id); int i = 60; while (!actionMonitor.isTerminated(vnfr_id) && actionMonitor.getAction(vnfr_id) != Action.INACTIVE && i >= 0) { actionMonitor.terminate(vnfr_id); log.debug( "Waiting for finishing ExecutionTask/Cooldown for VNFR with id: " + vnfr_id + " (" + i + "s)"); log.debug(actionMonitor.toString()); try { Thread.sleep(1_000); } catch (InterruptedException e) { log.error(e.getMessage(), e); } i--; if (i <= 0) { actionMonitor.removeId(vnfr_id); log.error( "Were not able to wait until ExecutionTask finished for VNFR with id: " + vnfr_id); return new AsyncResult<>(false); } } actionMonitor.removeId(vnfr_id); log.info("Stopped ExecutionTask for VNFR with id: " + vnfr_id); return new AsyncResult<>(true); }
public void executeActions( String nsr_id, String vnfr_id, Set<ScalingAction> actions, long cooldown) { log.info("[EXECUTOR] RECEIVED_ACTION " + new Date().getTime()); log.info( "Processing execution request of ScalingActions: " + actions + " for VNFR with id: " + vnfr_id); if (actionMonitor.requestAction(vnfr_id, Action.SCALE)) { log.debug( "Creating new ExecutionTask of ScalingActions: " + actions + " for VNFR with id: " + vnfr_id); ExecutionTask executionTask = new ExecutionTask(nsr_id, vnfr_id, actions, cooldown, executionEngine, actionMonitor); taskScheduler.execute(executionTask); } else { if (actionMonitor.getAction(vnfr_id) == Action.SCALE) { log.debug( "Processing already an execution request for VNFR with id: " + vnfr_id + ". Cannot create another ExecutionTask for VNFR with id: " + vnfr_id); } else if (actionMonitor.getAction(vnfr_id) == Action.COOLDOWN) { log.debug( "Waiting for Cooldown for VNFR with id: " + vnfr_id + ". Cannot create another ExecutionTask for VNFR with id: " + vnfr_id); } else { log.warn( "Problem while starting ExecutionThread. Internal Status is: " + actionMonitor.getAction(vnfr_id)); } } }