You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2015/04/03 18:08:16 UTC

ambari git commit: AMBARI-10349. RU: Block users from installing a Version with the same existing Version (dlysnichenko)

Repository: ambari
Updated Branches:
  refs/heads/trunk b3fc39395 -> 6b5ef474b


AMBARI-10349. RU: Block users from installing a Version with the same existing Version (dlysnichenko)


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

Branch: refs/heads/trunk
Commit: 6b5ef474b0b43a4b8d9fa49b76ff55c85a04c52d
Parents: b3fc393
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Fri Apr 3 19:07:27 2015 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Fri Apr 3 19:07:27 2015 +0300

----------------------------------------------------------------------
 .../RepositoryVersionResourceProvider.java      | 24 +++++++++++++++++
 .../RepositoryVersionResourceProviderTest.java  | 27 ++++++++++++++++++--
 2 files changed, 49 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6b5ef474/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
index dbad19a..ada207a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
@@ -44,11 +44,13 @@ import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
 import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
 import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
 import org.apache.ambari.server.orm.entities.OperatingSystemEntity;
+import org.apache.ambari.server.orm.entities.RepositoryEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.state.OperatingSystemInfo;
 import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.StackInfo;
+import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.commons.lang.StringUtils;
@@ -339,6 +341,20 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
       throw new AmbariException("Stack " + stackFullName + " doesn't have upgrade packages");
     }
 
+    // List of all repo urls that are already added at stack
+    Set<String> existingRepoUrls = new HashSet<String>();
+    List<RepositoryVersionEntity> existingRepoVersions = repositoryVersionDAO.findByStack(requiredStack.getStackId());
+    for (RepositoryVersionEntity existingRepoVersion : existingRepoVersions) {
+      for (OperatingSystemEntity operatingSystemEntity : existingRepoVersion.getOperatingSystems()) {
+        for (RepositoryEntity repositoryEntity : operatingSystemEntity.getRepositories()) {
+          if (! repositoryEntity.getRepositoryId().startsWith("HDP-UTILS") &&  // HDP-UTILS is shared between repo versions
+                  ! existingRepoVersion.getId().equals(repositoryVersion.getId())) { // Allow modifying already defined repo version
+            existingRepoUrls.add(repositoryEntity.getBaseUrl());
+          }
+        }
+      }
+    }
+
     // check that repositories contain only supported operating systems
     final Set<String> osSupported = new HashSet<String>();
     for (OperatingSystemInfo osInfo: ambariMetaInfo.getOperatingSystems(stackName, stackMajorVersion)) {
@@ -347,6 +363,14 @@ public class RepositoryVersionResourceProvider extends AbstractResourceProvider
     final Set<String> osRepositoryVersion = new HashSet<String>();
     for (OperatingSystemEntity os: repositoryVersion.getOperatingSystems()) {
       osRepositoryVersion.add(os.getOsType());
+
+      for (RepositoryEntity repositoryEntity : os.getRepositories()) {
+        String baseUrl = repositoryEntity.getBaseUrl();
+        if (existingRepoUrls.contains(baseUrl)) {
+          throw new AmbariException("Base url " + baseUrl + " is already defined for another repository version. " +
+                  "Setting up base urls that contain the same versions of components will cause rolling upgrade to fail.");
+        }
+      }
     }
     if (osRepositoryVersion.isEmpty()) {
       throw new AmbariException("At least one set of repositories for OS should be provided");

http://git-wip-us.apache.org/repos/asf/ambari/blob/6b5ef474/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
index 4efdb0c..6e50df6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProviderTest.java
@@ -232,7 +232,7 @@ public class RepositoryVersionResourceProviderTest {
     entity.setStack("HDP-1.1");
     entity.setUpgradePackage("pack1");
     entity.setVersion("1.1");
-    entity.setOperatingSystems("[{\"OperatingSystems/os_type\":\"redhat6\",\"repositories\":[{\"Repositories/repo_id\":\"1\",\"Repositories/repo_name\":\"1\",\"Repositories/base_url\":\"1\"}]}]");
+    entity.setOperatingSystems("[{\"OperatingSystems/os_type\":\"redhat6\",\"repositories\":[{\"Repositories/repo_id\":\"1\",\"Repositories/repo_name\":\"1\",\"Repositories/base_url\":\"http://example.com/repo1\"}]}]");
 
     // test valid usecases
     provider.validateRepositoryVersion(entity);
@@ -273,6 +273,29 @@ public class RepositoryVersionResourceProviderTest {
       Assert.fail("Should throw exception");
     } catch (Exception ex) {
     }
+
+    final RepositoryVersionDAO repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
+    entity.setDisplayName("name");
+    entity.setStack("HDP-1.1");
+    entity.setUpgradePackage("pack1");
+    entity.setVersion("1.1");
+    entity.setOperatingSystems("[{\"OperatingSystems/os_type\":\"redhat6\",\"repositories\":[{\"Repositories/repo_id\":\"1\",\"Repositories/repo_name\":\"1\",\"Repositories/base_url\":\"http://example.com/repo1\"}]}]");
+    repositoryVersionDAO.create(entity);
+
+    final RepositoryVersionEntity entity2 = new RepositoryVersionEntity();
+    entity2.setId(2l);
+    entity2.setDisplayName("name2");
+    entity2.setStack("HDP-1.1");
+    entity2.setUpgradePackage("pack1");
+    entity2.setVersion("1.2");
+    entity2.setOperatingSystems("[{\"OperatingSystems/os_type\":\"redhat6\",\"repositories\":[{\"Repositories/repo_id\":\"1\",\"Repositories/repo_name\":\"1\",\"Repositories/base_url\":\"http://example.com/repo1\"}]}]");
+
+    try {
+      provider.validateRepositoryVersion(entity2);
+      Assert.fail("Should throw exception: Base url http://example.com/repo1 is already defined for another repository version");
+    } catch (Exception ex) {
+    }
+
   }
 
   @Test
@@ -312,7 +335,7 @@ public class RepositoryVersionResourceProviderTest {
     final Set<Map<String, Object>> propertySet = new LinkedHashSet<Map<String, Object>>();
     final Map<String, Object> properties = new LinkedHashMap<String, Object>();
     properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, "name");
-    properties.put(RepositoryVersionResourceProvider.SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID, new Gson().fromJson("[{\"OperatingSystems/os_type\":\"redhat6\",\"repositories\":[{\"Repositories/repo_id\":\"1\",\"Repositories/repo_name\":\"1\",\"Repositories/base_url\":\"1\"}]}]", Object.class));
+    properties.put(RepositoryVersionResourceProvider.SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID, new Gson().fromJson("[{\"OperatingSystems/os_type\":\"redhat6\",\"repositories\":[{\"Repositories/repo_id\":\"1\",\"Repositories/repo_name\":\"1\",\"Repositories/base_url\":\"http://example.com/repo1\"}]}]", Object.class));
     properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID, "HDP");
     properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_UPGRADE_PACK_PROPERTY_ID, "pack1");
     properties.put(RepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID, "1.1");