You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2015/11/17 02:23:34 UTC

ambari git commit: AMBARI-13906. Cluster cannot be deleted when it is deployed via blueprint (Sebastian Toader via alejandro)

Repository: ambari
Updated Branches:
  refs/heads/trunk 004e4f98e -> 55d0b1844


AMBARI-13906. Cluster cannot be deleted when it is deployed via blueprint (Sebastian Toader via alejandro)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/55d0b184
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/55d0b184
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/55d0b184

Branch: refs/heads/trunk
Commit: 55d0b18448542868d4f94abd388a46025d87ffbd
Parents: 004e4f9
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Mon Nov 16 16:10:13 2015 -0800
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Mon Nov 16 17:23:28 2015 -0800

----------------------------------------------------------------------
 .../server/orm/dao/TopologyRequestDAO.java      | 12 +++++
 .../server/state/alert/AlertDefinitionHash.java | 12 +++--
 .../server/state/cluster/ClusterImpl.java       |  5 ++
 .../server/orm/dao/TopologyRequestDAOTest.java  | 14 ++++++
 .../server/state/cluster/ClustersTest.java      | 52 ++++++++++++++++++--
 5 files changed, 88 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/55d0b184/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/TopologyRequestDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/TopologyRequestDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/TopologyRequestDAO.java
index 65cd59f..a9a9e9d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/TopologyRequestDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/TopologyRequestDAO.java
@@ -73,4 +73,16 @@ public class TopologyRequestDAO {
   public void removeByPK(Long requestId) {
     remove(findById(requestId));
   }
+
+  /**
+   * Removes all {@link TopologyRequestEntity} that are associated with the specified cluster ID.
+   * @param clusterId the cluster ID.
+   */
+  @Transactional
+  public void removeAll(Long clusterId) {
+    List<TopologyRequestEntity> clusterTopologyRequests = findByClusterId(clusterId);
+    for (TopologyRequestEntity topologyRequestEntity: clusterTopologyRequests)
+      remove(topologyRequestEntity);
+  }
 }
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/55d0b184/ambari-server/src/main/java/org/apache/ambari/server/state/alert/AlertDefinitionHash.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/alert/AlertDefinitionHash.java b/ambari-server/src/main/java/org/apache/ambari/server/state/alert/AlertDefinitionHash.java
index a3979c1..6c0a839 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/alert/AlertDefinitionHash.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/alert/AlertDefinitionHash.java
@@ -33,6 +33,7 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.ClusterNotFoundException;
 import org.apache.ambari.server.agent.ActionQueue;
 import org.apache.ambari.server.agent.AgentCommand.AgentCommandType;
 import org.apache.ambari.server.agent.AlertDefinitionCommand;
@@ -596,8 +597,7 @@ public class AlertDefinitionHash {
     try {
       Cluster cluster = m_clusters.get().getCluster(clusterName);
       if (null == cluster) {
-        LOG.warn("Unable to get alert definitions for the missing cluster {}",
-            clusterName);
+
 
         return Collections.emptySet();
       }
@@ -642,7 +642,13 @@ public class AlertDefinitionHash {
 
       // add any alerts not bound to a service (host level alerts)
       definitions.addAll(m_definitionDao.findAgentScoped(clusterId));
-    } catch (AmbariException ambariException) {
+    }
+    catch (ClusterNotFoundException clusterNotFound) {
+      LOG.warn("Unable to get alert definitions for the missing cluster {}",
+        clusterName);
+      return Collections.emptySet();
+    }
+    catch (AmbariException ambariException) {
       LOG.error("Unable to get alert definitions", ambariException);
       return Collections.emptySet();
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/55d0b184/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
index 24c7bce..e7c1b19 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
@@ -69,6 +69,7 @@ import org.apache.ambari.server.orm.dao.HostVersionDAO;
 import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
 import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
 import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.dao.TopologyRequestDAO;
 import org.apache.ambari.server.orm.dao.UpgradeDAO;
 import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
 import org.apache.ambari.server.orm.entities.ClusterConfigMappingEntity;
@@ -249,6 +250,9 @@ public class ClusterImpl implements Cluster {
   @Inject
   private AmbariSessionManager sessionManager;
 
+  @Inject
+  private TopologyRequestDAO topologyRequestDAO;
+
   /**
    * Data access object used for looking up stacks from the database.
    */
@@ -2018,6 +2022,7 @@ public class ClusterImpl implements Cluster {
     alertDefinitionDAO.removeAll(clusterId);
     alertDispatchDAO.removeAllGroups(clusterId);
     upgradeDAO.removeAll(clusterId);
+    topologyRequestDAO.removeAll(clusterId);
     clusterDAO.removeByPK(clusterId);
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/55d0b184/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
index f5ece39..c489eba 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
@@ -115,4 +115,18 @@ public class TopologyRequestDAOTest {
     create();
     testRequestEntity(requestDAO.findByClusterId(clusterId));
   }
+
+  @Test
+  public void testRemoveAll() throws Exception {
+    // Given
+    create();
+
+    // When
+    requestDAO.removeAll(clusterId);
+
+
+    // Then
+    List<TopologyRequestEntity> requestEntities = requestDAO.findByClusterId(clusterId);
+    Assert.assertEquals("All topology request entities associated with cluster should be removed !", 0, requestEntities.size());
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/55d0b184/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
index 2d9d779..daf8d12 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClustersTest.java
@@ -18,6 +18,7 @@
 
 package org.apache.ambari.server.state.cluster;
 
+import com.google.common.collect.Maps;
 import com.google.inject.Guice;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
@@ -36,6 +37,7 @@ import org.apache.ambari.server.orm.dao.ClusterStateDAO;
 import org.apache.ambari.server.orm.dao.HostComponentDesiredStateDAO;
 import org.apache.ambari.server.orm.dao.HostComponentStateDAO;
 import org.apache.ambari.server.orm.dao.HostDAO;
+import org.apache.ambari.server.orm.dao.TopologyRequestDAO;
 import org.apache.ambari.server.orm.entities.ClusterStateEntity;
 import org.apache.ambari.server.orm.entities.HostComponentDesiredStateEntityPK;
 import org.apache.ambari.server.orm.entities.HostEntity;
@@ -51,6 +53,11 @@ import org.apache.ambari.server.state.ServiceComponent;
 import org.apache.ambari.server.state.ServiceComponentHost;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
+import org.apache.ambari.server.topology.Blueprint;
+import org.apache.ambari.server.topology.Configuration;
+import org.apache.ambari.server.topology.HostGroupInfo;
+import org.apache.ambari.server.topology.PersistedState;
+import org.apache.ambari.server.topology.TopologyRequest;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -64,6 +71,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
 import static org.junit.Assert.fail;
 
 public class ClustersTest {
@@ -77,6 +87,13 @@ public class ClustersTest {
   @Inject
   private HostDAO hostDAO;
 
+  @Inject
+  private TopologyRequestDAO topologyRequestDAO;
+
+
+  @Inject
+  private PersistedState persistedState;
+
   @Before
   public void setup() throws Exception {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
@@ -451,25 +468,52 @@ public class ClustersTest {
     hkdspk.setComponentName(nameNodeHost.getServiceComponentName());
 
     Assert.assertNotNull(injector.getInstance(HostComponentStateDAO.class).findByIndex(
-        nameNodeHost.getClusterId(), nameNodeHost.getServiceName(),
-        nameNodeHost.getServiceComponentName(), nameNodeHostEntity.getHostId()));
+      nameNodeHost.getClusterId(), nameNodeHost.getServiceName(),
+      nameNodeHost.getServiceComponentName(), nameNodeHostEntity.getHostId()));
 
     Assert.assertNotNull(injector.getInstance(HostComponentDesiredStateDAO.class).findByPK(hkdspk));
     Assert.assertEquals(2, injector.getProvider(EntityManager.class).get().createQuery("SELECT config FROM ClusterConfigEntity config").getResultList().size());
     Assert.assertEquals(1, injector.getProvider(EntityManager.class).get().createQuery("SELECT state FROM ClusterStateEntity state").getResultList().size());
     Assert.assertEquals(1, injector.getProvider(EntityManager.class).get().createQuery("SELECT config FROM ClusterConfigMappingEntity config").getResultList().size());
 
+    // add topology request
+    Blueprint bp = createNiceMock(Blueprint.class);
+    expect(bp.getName()).andReturn("TestBluePrint").anyTimes();
+
+    Configuration clusterConfig = new Configuration(
+      Maps.<String, Map<String, String>>newHashMap(),
+      Maps.<String, Map<String, Map<String, String>>>newHashMap()
+      );
+
+    Map<String, HostGroupInfo> hostGroups = Maps.newHashMap();
+
+    TopologyRequest topologyRequest = createNiceMock(TopologyRequest.class);
+    expect(topologyRequest.getType()).andReturn(TopologyRequest.Type.PROVISION).anyTimes();
+    expect(topologyRequest.getBlueprint()).andReturn(bp).anyTimes();
+    expect(topologyRequest.getClusterId()).andReturn(cluster.getClusterId()).anyTimes();
+    expect(topologyRequest.getConfiguration()).andReturn(clusterConfig).anyTimes();
+    expect(topologyRequest.getDescription()).andReturn("Test description").anyTimes();
+    expect(topologyRequest.getHostGroupInfo()).andReturn(hostGroups).anyTimes();
+
+
+    replay(bp, topologyRequest);
+
+    persistedState.persistTopologyRequest(topologyRequest);
+
+    Assert.assertEquals(1, topologyRequestDAO.findByClusterId(cluster.getClusterId()).size());
+
     clusters.deleteCluster(c1);
 
     Assert.assertEquals(2, hostDAO.findAll().size());
     Assert.assertNull(injector.getInstance(HostComponentStateDAO.class).findByIndex(
-        nameNodeHost.getClusterId(), nameNodeHost.getServiceName(),
-        nameNodeHost.getServiceComponentName(), nameNodeHostEntity.getHostId()));
+      nameNodeHost.getClusterId(), nameNodeHost.getServiceName(),
+      nameNodeHost.getServiceComponentName(), nameNodeHostEntity.getHostId()));
 
     Assert.assertNull(injector.getInstance(HostComponentDesiredStateDAO.class).findByPK(hkdspk));
     Assert.assertEquals(0, injector.getProvider(EntityManager.class).get().createQuery("SELECT config FROM ClusterConfigEntity config").getResultList().size());
     Assert.assertEquals(0, injector.getProvider(EntityManager.class).get().createQuery("SELECT state FROM ClusterStateEntity state").getResultList().size());
     Assert.assertEquals(0, injector.getProvider(EntityManager.class).get().createQuery("SELECT config FROM ClusterConfigMappingEntity config").getResultList().size());
+    Assert.assertEquals(0, topologyRequestDAO.findByClusterId(cluster.getClusterId()).size());
   }
 
   @Test