Repository: ambari Updated Branches: refs/heads/trunk bf82dfe69 -> bbf95144c
AMBARI-14025. Deleting host from cluster does not work on blueprint deployed cluster. (swagle) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/bbf95144 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/bbf95144 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/bbf95144 Branch: refs/heads/trunk Commit: bbf95144cd5bef938413dd87f8dcf970e79429ec Parents: bf82dfe Author: Siddharth Wagle <swa...@hortonworks.com> Authored: Mon Nov 23 22:06:43 2015 -0800 Committer: Siddharth Wagle <swa...@hortonworks.com> Committed: Mon Nov 23 22:06:43 2015 -0800 ---------------------------------------------------------------------- .../server/state/cluster/ClustersImpl.java | 28 ++++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/bbf95144/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java index 15730f4..b89a8c4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClustersImpl.java @@ -44,9 +44,11 @@ import org.apache.ambari.server.orm.dao.RequestOperationLevelDAO; import org.apache.ambari.server.orm.dao.ResourceTypeDAO; import org.apache.ambari.server.orm.dao.ServiceConfigDAO; import org.apache.ambari.server.orm.dao.StackDAO; +import org.apache.ambari.server.orm.dao.TopologyLogicalTaskDAO; import org.apache.ambari.server.orm.entities.ClusterEntity; import org.apache.ambari.server.orm.entities.ClusterVersionEntity; import org.apache.ambari.server.orm.entities.HostEntity; +import org.apache.ambari.server.orm.entities.HostRoleCommandEntity; import org.apache.ambari.server.orm.entities.PermissionEntity; import org.apache.ambari.server.orm.entities.PrivilegeEntity; import org.apache.ambari.server.orm.entities.ResourceEntity; @@ -136,6 +138,8 @@ public class ClustersImpl implements Clusters { private AmbariMetaInfo ambariMetaInfo; @Inject private SecurityHelper securityHelper; + @Inject + private TopologyLogicalTaskDAO topologyLogicalTaskDAO; /** * Data access object for stacks. @@ -718,10 +722,13 @@ public class ClustersImpl implements Clusters { @Override public void unmapHostFromCluster(String hostname, String clusterName) throws AmbariException { final Cluster cluster = getCluster(clusterName); - unmapHostFromClusters(hostname, new HashSet<Cluster>() {{ add(cluster); }}); + unmapHostFromClusters(hostname, new HashSet<Cluster>() {{ + add(cluster); + }}); } - public void unmapHostFromClusters(String hostname, Set<Cluster> clusters) throws AmbariException { + @Transactional + void unmapHostFromClusters(String hostname, Set<Cluster> clusters) throws AmbariException { Host host = null; HostEntity hostEntity = null; @@ -766,7 +773,7 @@ public class ClustersImpl implements Clusters { } @Transactional - private void unmapHostClusterEntities(String hostName, long clusterId) { + void unmapHostClusterEntities(String hostName, long clusterId) { HostEntity hostEntity = hostDAO.findByName(hostName); ClusterEntity clusterEntity = clusterDAO.findById(clusterId); @@ -778,7 +785,7 @@ public class ClustersImpl implements Clusters { } @Transactional - private void deleteConfigGroupHostMapping(Long hostId) throws AmbariException { + void deleteConfigGroupHostMapping(Long hostId) throws AmbariException { // Remove Config group mapping for (Cluster cluster : clusters.values()) { for (ConfigGroup configGroup : cluster.getConfigGroups().values()) { @@ -823,7 +830,7 @@ public class ClustersImpl implements Clusters { * @throws AmbariException */ @Transactional - private void deleteHostEntityRelationships(String hostname) throws AmbariException { + void deleteHostEntityRelationships(String hostname) throws AmbariException { checkLoaded(); if (!hosts.containsKey(hostname)) { @@ -846,6 +853,17 @@ public class ClustersImpl implements Clusters { hostDAO.refresh(entity); hostVersionDAO.removeByHostName(hostname); + + // Remove blueprint tasks before hostRoleCommands + // TopologyLogicalTask owns the OneToOne relationship but Cascade is on HostRoleCommandEntity + if (entity.getHostRoleCommandEntities() != null) { + for (HostRoleCommandEntity hrcEntity : entity.getHostRoleCommandEntities()) { + if (hrcEntity.getTopologyLogicalTaskEntity() != null) { + topologyLogicalTaskDAO.remove(hrcEntity.getTopologyLogicalTaskEntity()); + hrcEntity.setTopologyLogicalTaskEntity(null); + } + } + } entity.setHostRoleCommandEntities(null); hostRoleCommandDAO.removeByHostId(entity.getHostId());