Repository: ambari
Updated Branches:
  refs/heads/branch-2.5 35adad6e6 -> 298a50e91


AMBARI-18774: Install Package for non-HDP stack fails with non-VDF repo version 
(jluniya)


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

Branch: refs/heads/branch-2.5
Commit: 298a50e91de43f4186d65b55e028e2a4b87f7f48
Parents: 35adad6
Author: Jayush Luniya <jlun...@hortonworks.com>
Authored: Thu Nov 3 13:17:44 2016 -0700
Committer: Jayush Luniya <jlun...@hortonworks.com>
Committed: Thu Nov 3 13:18:38 2016 -0700

----------------------------------------------------------------------
 .../orm/entities/RepositoryVersionEntity.java   | 39 +++++++-------------
 .../org/apache/ambari/server/state/StackId.java |  4 --
 ...leRepositoryVersionResourceProviderTest.java |  4 ++
 .../RepositoryVersionResourceProviderTest.java  | 14 +++++++
 .../orm/dao/RepositoryVersionDAOTest.java       | 35 ++++++++++++++++++
 5 files changed, 67 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/298a50e9/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
index 25aa62b..4e6451e 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
@@ -80,8 +80,6 @@ import static java.util.Arrays.asList;
 })
 @StaticallyInject
 public class RepositoryVersionEntity {
-
-  private static final List<String> STACK_PREFIXES = asList(StackId.HDP_STACK, 
StackId.HDPWIN_STACK);
   private static Logger LOG = 
LoggerFactory.getLogger(RepositoryVersionEntity.class);
 
   @Inject
@@ -158,10 +156,9 @@ public class RepositoryVersionEntity {
   @PreUpdate
   @PrePersist
   public void removePrefixFromVersion() {
-    for (String stackPrefix : STACK_PREFIXES) {
-      if (version.startsWith(stackPrefix + "-")) {
-        version = version.substring(stackPrefix.length() + 1);
-      }
+    String stackName = stack.getStackName();
+    if (version.startsWith(stackName)) {
+      version = version.substring(stackName.length() + 1);
     }
   }
   /**
@@ -394,38 +391,30 @@ public class RepositoryVersionEntity {
 
   /**
    * Determine if the version belongs to the stack.
-   * Right now, this is only applicable for the HDP stack.
    * @param stackId Stack, such as HDP-2.3
    * @param version Version number, such as 2.3.0.0, or 2.3.0.0-1234
    * @return Return true if the version starts with the digits of the stack.
    */
   public static boolean isVersionInStack(StackId stackId, String version) {
     if (null != version && !StringUtils.isBlank(version)) {
-      for (String stackPrefix : STACK_PREFIXES) {
-        if (version.startsWith(stackPrefix + "-")) {
-          version = version.substring(stackPrefix.length() + 1);
-        }
+      String stackName = stackId.getStackName();
+      if (version.startsWith(stackName + "-")) {
+        version = version.substring(stackName.length() + 1);
       }
-      // HDP Stack
-      if (stackId.getStackName().equalsIgnoreCase(StackId.HDP_STACK) ||
-          stackId.getStackName().equalsIgnoreCase(StackId.HDPWIN_STACK)) {
-
-        String leading = stackId.getStackVersion();  // E.g, 2.3
-        // In some cases during unit tests, the leading can contain 3 digits, 
so only the major number (first two parts) are needed.
-        String[] leadingParts = leading.split("\\.");
-        if (null != leadingParts && leadingParts.length > 2) {
-          leading = leadingParts[0] + "." + leadingParts[1];
-        }
-        return version.startsWith(leading);
+
+      String leading = stackId.getStackVersion();  // E.g, 2.3
+      // In some cases during unit tests, the leading can contain 3 digits, so 
only the major number (first two parts) are needed.
+      String[] leadingParts = leading.split("\\.");
+      if (null != leadingParts && leadingParts.length > 2) {
+        leading = leadingParts[0] + "." + leadingParts[1];
       }
-      // For other stacks, don't make the check.
-      return true;
+      return version.startsWith(leading);
     }
     return false;
   }
 
   /**
-   * @param parent
+   * @param entity parent entity
    */
   public void setParent(RepositoryVersionEntity entity) {
     parent = entity;

http://git-wip-us.apache.org/repos/asf/ambari/blob/298a50e9/ambari-server/src/main/java/org/apache/ambari/server/state/StackId.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/StackId.java 
b/ambari-server/src/main/java/org/apache/ambari/server/state/StackId.java
index 367775a..f5a440d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/StackId.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/StackId.java
@@ -25,10 +25,6 @@ public class StackId implements Comparable<StackId> {
 
   private static final String NAME_SEPARATOR = "-";
 
-  public static final String HDP_STACK = "HDP";
-  public static final String HDPWIN_STACK = "HDPWIN";
-  public static final String BIGTOP_STACK = "BIGTOP";
-
   private String stackName;
   private String stackVersion;
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/298a50e9/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
index 78f0a48..dffc4f7 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java
@@ -250,9 +250,13 @@ public class 
CompatibleRepositoryVersionResourceProviderTest {
   public void testVersionInStack() {
     assertTrue(RepositoryVersionEntity.isVersionInStack(new StackId("HDP", 
"2.3"), "2.3.0.0"));
     assertTrue(RepositoryVersionEntity.isVersionInStack(new StackId("HDPWIN", 
"2.3"), "2.3.0.0"));
+    assertTrue(RepositoryVersionEntity.isVersionInStack(new StackId("HDP", 
"2.3.GlusterFS"), "2.3.0.0"));
+    assertTrue(RepositoryVersionEntity.isVersionInStack(new StackId("HDF", 
"2.1"), "2.1.0.0"));
 
     assertTrue(RepositoryVersionEntity.isVersionInStack(new StackId("HDP", 
"2.3"), "HDP-2.3.0.0"));
     assertTrue(RepositoryVersionEntity.isVersionInStack(new StackId("HDPWIN", 
"2.3"), "HDPWIN-2.3.0.0"));
+    assertTrue(RepositoryVersionEntity.isVersionInStack(new StackId("HDP", 
"2.3.GlusterFS"), "HDP-2.3.0.0"));
+    assertTrue(RepositoryVersionEntity.isVersionInStack(new StackId("HDF", 
"2.1"), "HDF-2.1.0.0"));
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/298a50e9/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 a43a1dc..b8d450b 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
@@ -609,17 +609,31 @@ public class RepositoryVersionResourceProviderTest {
   public void testVersionInStack(){
     StackId sid = new StackId("HDP-2.3");
     StackId sid2 = new StackId("HDP-2.3.NEW");
+    StackId sid3 = new StackId("HDF-2.3");
+
     Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid, 
"2.3"));
     Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid2, 
"2.3"));
+    Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid3, 
"2.3"));
 
     Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid, 
"2.3.1"));
     Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid2, 
"2.3.1"));
+    Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid3, 
"2.3.1"));
 
     Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid, 
"2.3.2.0-2300"));
     Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid2, 
"2.3.2.1-3562"));
+    Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid3, 
"2.3.2.1-3562"));
+
+    Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid, 
"HDP-2.3.2.0-2300"));
+    Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid2, 
"HDP-2.3.2.1-3562"));
+    Assert.assertEquals(true, RepositoryVersionEntity.isVersionInStack(sid3, 
"HDF-2.3.2.1-3562"));
 
     Assert.assertEquals(false, RepositoryVersionEntity.isVersionInStack(sid, 
"2.4.2.0-2300"));
     Assert.assertEquals(false, RepositoryVersionEntity.isVersionInStack(sid2, 
"2.1"));
+    Assert.assertEquals(false, RepositoryVersionEntity.isVersionInStack(sid3, 
"2.1"));
+
+    Assert.assertEquals(false, RepositoryVersionEntity.isVersionInStack(sid, 
"HDP-2.4.2.0-2300"));
+    Assert.assertEquals(false, RepositoryVersionEntity.isVersionInStack(sid2, 
"HDP-2.1"));
+    Assert.assertEquals(false, RepositoryVersionEntity.isVersionInStack(sid3, 
"HDF-2.1"));
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/298a50e9/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
index 1267f96..6f6f05b 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
@@ -48,6 +48,7 @@ public class RepositoryVersionDAOTest {
   private static Injector injector;
 
   private static final StackId HDP_206 = new StackId("HDP", "2.0.6");
+  private static final StackId OTHER_10 = new StackId("OTHER", "1.0");
   private static final StackId BAD_STACK = new StackId("BADSTACK", "1.0");
 
   private RepositoryVersionDAO repositoryVersionDAO;
@@ -198,6 +199,40 @@ public class RepositoryVersionDAOTest {
 
   }
 
+  @Test
+  public void testRemovePrefixFromVersion() {
+
+    StackEntity hdp206StackEntity = stackDAO.find(HDP_206.getStackName(),
+        HDP_206.getStackVersion());
+    Assert.assertNotNull(hdp206StackEntity);
+
+    final RepositoryVersionEntity hdp206RepoEntity = new 
RepositoryVersionEntity();
+    hdp206RepoEntity.setDisplayName("HDP-2.0.6.0-1234");
+    hdp206RepoEntity.setOperatingSystems("repositories");
+    hdp206RepoEntity.setStack(hdp206StackEntity);
+    hdp206RepoEntity.setVersion("HDP-2.0.6.0-1234");
+    repositoryVersionDAO.create(hdp206RepoEntity);
+    Assert.assertEquals("Failed to remove HDP stack prefix from version", 
"2.0.6.0-1234", hdp206RepoEntity.getVersion());
+    
Assert.assertNotNull(repositoryVersionDAO.findByDisplayName("HDP-2.0.6.0-1234"));
+    Assert.assertNotNull(repositoryVersionDAO.findByStackAndVersion(HDP_206,
+        "2.0.6.0-1234"));
+
+    StackEntity other10StackEntity = stackDAO.find(OTHER_10.getStackName(),
+        OTHER_10.getStackVersion());
+    Assert.assertNotNull(other10StackEntity);
+
+    final RepositoryVersionEntity other10RepoEntity = new 
RepositoryVersionEntity();
+    other10RepoEntity.setDisplayName("OTHER-1.0.1.0-1234");
+    other10RepoEntity.setOperatingSystems("repositories");
+    other10RepoEntity.setStack(other10StackEntity);
+    other10RepoEntity.setVersion("OTHER-1.0.1.0-1234");
+    repositoryVersionDAO.create(other10RepoEntity);
+    Assert.assertEquals("Failed to remove OTHER stack prefix from version", 
"1.0.1.0-1234", other10RepoEntity.getVersion());
+    
Assert.assertNotNull(repositoryVersionDAO.findByDisplayName("OTHER-1.0.1.0-1234"));
+    Assert.assertNotNull(repositoryVersionDAO.findByStackAndVersion(OTHER_10,
+        "1.0.1.0-1234"));
+  }
+
   @After
   public void after() {
     injector.getInstance(PersistService.class).stop();

Reply via email to