* available for deployment)
* @throws Exception
*/
protected void updateDeploymentUnitState(ModuleDeployment moduleDeployment,
ModuleDeploymentStatus deploymentStatus) throws Exception {
final DeploymentUnit deploymentUnit = moduleDeployment.deploymentUnit;
final ModuleDescriptor moduleDescriptor = moduleDeployment.moduleDescriptor;
Collection<ModuleDeploymentStatus> aggregateStatuses = aggregateState(deploymentUnit);
// If the module deployment was successful, it will be present in this
// list; remove it to avoid duplication since the deployment status
// that was returned from the deployment request will be used instead.
// This is especially important if the deployment failed because
// that deployment status will contain the error condition that
// caused the failure.
if (deploymentStatus != null) {
for (Iterator<ModuleDeploymentStatus> iterator = aggregateStatuses.iterator(); iterator.hasNext();) {
ModuleDeploymentStatus status = iterator.next();
if (logger.isTraceEnabled()) {
logger.trace("module deployment status: {}", status);
logger.trace("deploymentStatus: {}", deploymentStatus);
}
if (status.getKey().getLabel().equals(moduleDescriptor.getModuleLabel())
&& status.getContainer().equals(deploymentStatus.getContainer())) {
iterator.remove();
}
}
aggregateStatuses.add(deploymentStatus);
}
Assert.state(deploymentUnit instanceof Stream || deploymentUnit instanceof Job);
boolean isStream = (deploymentUnit instanceof Stream);
ModuleDeploymentPropertiesProvider<ModuleDeploymentProperties> provider = new DefaultModuleDeploymentPropertiesProvider(
deploymentUnit);
DeploymentUnitStatus status = stateCalculator.calculate(deploymentUnit, provider, aggregateStatuses);
logger.info("Deployment state for {} '{}': {}",
isStream ? "stream" : "job", deploymentUnit.getName(), status);
getClient().setData().forPath(
Paths.build(isStream ? Paths.STREAM_DEPLOYMENTS : Paths.JOB_DEPLOYMENTS,
deploymentUnit.getName(), Paths.STATUS),
ZooKeeperUtils.mapToBytes(status.toMap()));
}