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");