/** * Undeploy the given stream. * * @param stream stream to undeploy */ private void undeployStream(StreamDefinition stream) { for (ModuleDefinition module : stream.getModuleDefinitions()) { ModuleDeploymentId id = ModuleDeploymentId.fromModuleDefinition(module); ModuleStatus status = this.deployer.status(id); if (!EnumSet.of(DeploymentState.unknown, DeploymentState.undeployed) .contains(status.getState())) { this.deployer.undeploy(id); } } }
/** * Return a string that describes the state of the given stream. * @param name name of stream to determine state for * @return stream state * @see DeploymentState */ private String calculateStreamState(String name) { Set<DeploymentState> moduleStates = EnumSet.noneOf(DeploymentState.class); StreamDefinition stream = repository.findOne(name); for (ModuleDefinition module : stream.getModuleDefinitions()) { ModuleStatus status = deployer.status(ModuleDeploymentId.fromModuleDefinition(module)); moduleStates.add(status.getState()); } logger.debug("Module states for stream {}: {}", name, moduleStates); return aggregateState(moduleStates).toString(); }
@Override public TaskDefinitionResource instantiateResource(TaskDefinition taskDefinition) { ModuleDeploymentId id = ModuleDeploymentId.fromModuleDefinition(taskDefinition.getModuleDefinition()); TaskDefinitionResource taskDefinitionResource = new TaskDefinitionResource(taskDefinition.getName(), taskDefinition.getDslText()); taskDefinitionResource.setStatus(moduleDeployer.status(id).getState().name()); return taskDefinitionResource; } }
@Override public ModuleDeploymentId deploy(ModuleDeploymentRequest request) { int count = request.getCount(); ModuleCoordinates coordinates = request.getCoordinates(); ModuleDefinition definition = request.getDefinition(); ModuleDeploymentId id = ModuleDeploymentId.fromModuleDefinition(definition); String clusterId = moduleDeploymentIdToClusterId(id); String module = coordinates.toString(); Map<String, String> definitionParameters = definition.getParameters(); Map<String, String> deploymentProperties = request.getDeploymentProperties(); logger.info("deploying request for definition: " + definition); logger.info("deploying module: " + module); logger.info("definitionParameters: " + definitionParameters); logger.info("deploymentProperties: " + deploymentProperties); // TODO: using default app name "app" until we start to customise // via deploymentProperties Message<Events> message = MessageBuilder.withPayload(Events.DEPLOY) .setHeader(YarnCloudAppStateMachine.HEADER_APP_VERSION, "app") .setHeader(YarnCloudAppStateMachine.HEADER_CLUSTER_ID, clusterId) .setHeader(YarnCloudAppStateMachine.HEADER_COUNT, count) .setHeader(YarnCloudAppStateMachine.HEADER_MODULE, module) .setHeader(YarnCloudAppStateMachine.HEADER_DEFINITION_PARAMETERS, definitionParameters) .build(); stateMachine.sendEvent(message); return id; }