public void persistActions(List<Stage> stages) {
if (LOG.isDebugEnabled()) {
LOG.debug("Adding stages to DB, stageCount=" + stages.size());
}
for (Stage stage : stages) {
StageEntity stageEntity = stage.constructNewPersistenceEntity();
Cluster cluster;
try {
cluster = clusters.getCluster(stage.getClusterName());
} catch (AmbariException e) {
throw new RuntimeException(e);
}
ClusterEntity clusterEntity = clusterDAO.findById(cluster.getClusterId());
stageEntity.setCluster(clusterEntity);
clusterEntity.getStages().add(stageEntity);
for (HostRoleCommand hostRoleCommand : stage.getOrderedHostRoleCommands()) {
HostRoleCommandEntity hostRoleCommandEntity = hostRoleCommand.constructNewPersistenceEntity();
stageEntity.getHostRoleCommands().add(hostRoleCommandEntity);
hostRoleCommandEntity.setStage(stageEntity);
HostEntity hostEntity = hostDAO.findByName(hostRoleCommandEntity.getHostName());
if (hostEntity == null) {
LOG.error("Host {} doesn't exists in database" + hostRoleCommandEntity.getHostName());
throw new RuntimeException("Host '"+hostRoleCommandEntity.getHostName()+"' doesn't exists in database");
}
hostEntity.getHostRoleCommandEntities().add(hostRoleCommandEntity);
hostRoleCommandEntity.setHost(hostEntity);
hostRoleCommandDAO.create(hostRoleCommandEntity);
assert hostRoleCommandEntity.getTaskId() != null;
hostRoleCommand.setTaskId(hostRoleCommandEntity.getTaskId());
ExecutionCommandEntity executionCommandEntity = hostRoleCommand.constructExecutionCommandEntity();
executionCommandEntity.setHostRoleCommand(hostRoleCommandEntity);
executionCommandEntity.setTaskId(hostRoleCommandEntity.getTaskId());
hostRoleCommandEntity.setExecutionCommand(executionCommandEntity);
executionCommandDAO.create(hostRoleCommandEntity.getExecutionCommand());
hostRoleCommandDAO.merge(hostRoleCommandEntity);
hostDAO.merge(hostEntity);
}
for (RoleSuccessCriteriaEntity roleSuccessCriteriaEntity : stageEntity.getRoleSuccessCriterias()) {
roleSuccessCriteriaDAO.create(roleSuccessCriteriaEntity);
}
stageDAO.create(stageEntity);
clusterDAO.merge(clusterEntity);