AMBARI-22659. unable to proceed with cluster install after component install fails. (mpapirkovskyy)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/856d9a53 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/856d9a53 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/856d9a53 Branch: refs/heads/branch-feature-AMBARI-21674 Commit: 856d9a53d39b1658a846311d672ba54699b73f90 Parents: 3ab1045 Author: Myroslav Papirkovskyi <mpapyrkovs...@hortonworks.com> Authored: Fri Dec 15 18:13:49 2017 +0200 Committer: Myroslav Papirkovskyi <mpapyrkovs...@hortonworks.com> Committed: Fri Dec 15 18:46:35 2017 +0200 ---------------------------------------------------------------------- .../apache/ambari/server/orm/dao/HostVersionDAO.java | 15 +++++++++++++++ .../server/orm/entities/HostVersionEntity.java | 5 +++++ .../ambari/server/state/cluster/ClusterImpl.java | 10 ++++++++++ .../ambari/server/orm/dao/HostVersionDAOTest.java | 12 ++++++++++++ 4 files changed, 42 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/856d9a53/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java index 158370f..feb4172 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java @@ -130,6 +130,21 @@ public class HostVersionDAO extends CrudDAO<HostVersionEntity, Long> { } /** + * Retrieve all of the cluster versions for the given cluster name. + * + * @param clusterName Cluster name + * @return Return all of the host versions that match the criteria. + */ + @RequiresSession + public List<HostVersionEntity> findByCluster(String clusterName) { + final TypedQuery<HostVersionEntity> query = entityManagerProvider.get() + .createNamedQuery("findByCluster", HostVersionEntity.class); + query.setParameter("clusterName", clusterName); + + return daoUtils.selectList(query); + } + + /** * Retrieve all of the host versions for the given cluster name, and state. <br/> * @param clusterName Cluster name * @param state repository version state http://git-wip-us.apache.org/repos/asf/ambari/blob/856d9a53/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java index 4a030af..2c61a3c 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java @@ -66,6 +66,11 @@ import org.apache.ambari.server.state.RepositoryVersionState; query = "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " + "WHERE clusters.clusterName=:clusterName AND hostVersion.state=:state"), + @NamedQuery( + name = "findByCluster", + query = "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " + + "WHERE clusters.clusterName=:clusterName"), + @NamedQuery(name = "hostVersionByClusterHostnameAndState", query = "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " + "WHERE clusters.clusterName=:clusterName AND hostVersion.hostEntity.hostName=:hostName AND hostVersion.state=:state"), http://git-wip-us.apache.org/repos/asf/ambari/blob/856d9a53/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 c23b971..2266c62 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 @@ -1334,6 +1334,7 @@ public class ClusterImpl implements Cluster { try { refresh(); deleteAllServices(); + resetHostVersions(); refresh(); // update one-to-many clusterServiceEntities removeEntities(); @@ -1353,6 +1354,15 @@ public class ClusterImpl implements Cluster { clusterDAO.removeByPK(clusterId); } + private void resetHostVersions() { + for (HostVersionEntity hostVersionEntity : hostVersionDAO.findByCluster(getClusterName())) { + if (!hostVersionEntity.getState().equals(RepositoryVersionState.NOT_REQUIRED)) { + hostVersionEntity.setState(RepositoryVersionState.NOT_REQUIRED); + hostVersionDAO.merge(hostVersionEntity); + } + } + } + @Override public ServiceConfigVersionResponse addDesiredConfig(String user, Set<Config> configs) { return addDesiredConfig(user, configs, null); http://git-wip-us.apache.org/repos/asf/ambari/blob/856d9a53/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java index bb077d6..88f42d3 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/HostVersionDAOTest.java @@ -247,6 +247,18 @@ public class HostVersionDAOTest { } /** + * Test the {@link HostVersionDAO#findByCluster(String)} method. + */ + @Test + public void testFindByCluster() { + Assert.assertEquals(3, hostVersionDAO.findByCluster("test_cluster1").size()); + + addMoreVersions(); + + Assert.assertEquals(9, hostVersionDAO.findByCluster("test_cluster1").size()); + } + + /** * Test the {@link HostVersionDAO#findByClusterHostAndState(String, String, org.apache.ambari.server.state.RepositoryVersionState)} method. */ @Test