Bladeren bron

AMBARI-9499. After deleting host, relevant host versions are not removed (Yurii Shylov via ncole)

Nate Cole 10 jaren geleden
bovenliggende
commit
f2420f6e16

+ 14 - 4
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProvider.java

@@ -165,11 +165,18 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
 
     for (Map<String, Object> propertyMap: propertyMaps) {
       final String hostName = propertyMap.get(HOST_STACK_VERSION_HOST_NAME_PROPERTY_ID).toString();
-      final String clusterName = propertyMap.get(HOST_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID).toString();
+      String clusterName = null;
+      if (propertyMap.containsKey(HOST_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID)) {
+        clusterName = propertyMap.get(HOST_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID).toString();
+      }
       final Long id;
       List<HostVersionEntity> requestedEntities = new ArrayList<HostVersionEntity>();
       if (propertyMap.get(HOST_STACK_VERSION_ID_PROPERTY_ID) == null && propertyMaps.size() == 1) {
-        requestedEntities = hostVersionDAO.findByHost(hostName);
+        if (clusterName == null) {
+          requestedEntities = hostVersionDAO.findByHost(hostName);
+        } else {
+          requestedEntities = hostVersionDAO.findByClusterAndHost(clusterName, hostName);
+        }
       } else {
         try {
           id = Long.parseLong(propertyMap.get(HOST_STACK_VERSION_ID_PROPERTY_ID).toString());
@@ -211,13 +218,16 @@ public class HostStackVersionResourceProvider extends AbstractControllerResource
       final Resource resource = new ResourceImpl(Resource.Type.HostStackVersion);
 
       setResourceProperty(resource, HOST_STACK_VERSION_HOST_NAME_PROPERTY_ID, entity.getHostName(), requestedIds);
-      setResourceProperty(resource, HOST_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID, clusterName, requestedIds);
       setResourceProperty(resource, HOST_STACK_VERSION_ID_PROPERTY_ID, entity.getId(), requestedIds);
       setResourceProperty(resource, HOST_STACK_VERSION_STACK_PROPERTY_ID, stackId.getStackName(), requestedIds);
       setResourceProperty(resource, HOST_STACK_VERSION_VERSION_PROPERTY_ID, stackId.getStackVersion(), requestedIds);
       setResourceProperty(resource, HOST_STACK_VERSION_STATE_PROPERTY_ID, entity.getState().name(), requestedIds);
 
-      if (repoVerEntity!=null) {
+      if (clusterName != null) {
+        setResourceProperty(resource, HOST_STACK_VERSION_CLUSTER_NAME_PROPERTY_ID, clusterName, requestedIds);
+      }
+
+      if (repoVerEntity != null) {
         Long repoVersionId = repoVerEntity.getId();
         setResourceProperty(resource, HOST_STACK_VERSION_REPO_VERSION_PROPERTY_ID, repoVersionId, requestedIds);
       }

+ 8 - 8
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java

@@ -44,24 +44,24 @@ import org.apache.ambari.server.state.RepositoryVersionState;
 )
 @NamedQueries({
     @NamedQuery(name = "hostVersionByClusterAndStackAndVersion", query =
-        "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN ClusterEntity cluster " +
-            "WHERE cluster.clusterName=:clusterName AND hostVersion.repositoryVersion.stack=:stack AND hostVersion.repositoryVersion.version=:version"),
+        "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
+            "WHERE clusters.clusterName=:clusterName AND hostVersion.repositoryVersion.stack=:stack AND hostVersion.repositoryVersion.version=:version"),
 
     @NamedQuery(name = "hostVersionByClusterAndHostname", query =
-        "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN ClusterEntity cluster " +
-            "WHERE cluster.clusterName=:clusterName AND hostVersion.hostName=:hostName"),
+        "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
+            "WHERE clusters.clusterName=:clusterName AND hostVersion.hostName=:hostName"),
 
     @NamedQuery(name = "hostVersionByHostname", query =
         "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host " +
             "WHERE hostVersion.hostName=:hostName"),
 
     @NamedQuery(name = "hostVersionByClusterHostnameAndState", query =
-        "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN ClusterEntity cluster " +
-            "WHERE cluster.clusterName=:clusterName AND hostVersion.hostName=:hostName AND hostVersion.state=:state"),
+        "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
+            "WHERE clusters.clusterName=:clusterName AND hostVersion.hostName=:hostName AND hostVersion.state=:state"),
 
     @NamedQuery(name = "hostVersionByClusterStackVersionAndHostname", query =
-        "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN ClusterEntity cluster " +
-            "WHERE cluster.clusterName=:clusterName AND hostVersion.repositoryVersion.stack=:stack AND hostVersion.repositoryVersion.version=:version AND " +
+        "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
+            "WHERE clusters.clusterName=:clusterName AND hostVersion.repositoryVersion.stack=:stack AND hostVersion.repositoryVersion.version=:version AND " +
             "hostVersion.hostName=:hostName"),
 })
 public class HostVersionEntity {

+ 1 - 1
ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java

@@ -114,7 +114,7 @@ public class HostVersionDAOTest {
     // Both sides of relation should be set when modifying in runtime
     host1.setClusterEntities(Arrays.asList(clusterEntity));
     host2.setClusterEntities(Arrays.asList(clusterEntity));
-    host2.setClusterEntities(Arrays.asList(clusterEntity));
+    host3.setClusterEntities(Arrays.asList(clusterEntity));
 
     hostDAO.create(host1);
     hostDAO.create(host2);