You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by tb...@apache.org on 2013/12/05 16:37:27 UTC

git commit: AMBARI-3987 - Resource providers are set with wrong stack version.

Updated Branches:
  refs/heads/trunk 107aa5808 -> e353a1f5d


AMBARI-3987 - Resource providers are set with wrong stack version.


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

Branch: refs/heads/trunk
Commit: e353a1f5d0a4cb53026bdeca746e56cbfd4fdafc
Parents: 107aa58
Author: tbeerbower <tb...@hortonworks.com>
Authored: Thu Dec 5 10:20:06 2013 -0500
Committer: tbeerbower <tb...@hortonworks.com>
Committed: Thu Dec 5 10:36:53 2013 -0500

----------------------------------------------------------------------
 .../internal/AbstractProviderModule.java        |  27 ++++-
 .../internal/AbstractProviderModuleTest.java    | 121 +++++++++++++++++++
 2 files changed, 144 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e353a1f5/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
index 5d106bd..051eb31 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
@@ -43,11 +43,12 @@ import org.apache.ambari.server.state.DesiredConfig;
 import org.apache.ambari.server.state.HostState;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.State;
-import org.apache.commons.collections.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * An abstract provider module implementation.
@@ -309,6 +310,18 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource
 
   // ----- utility methods ---------------------------------------------------
 
+  /**
+   * Get the metrics version for the given cluster name.
+   *
+   * @param clusterName  the cluster name
+   *
+   * @return the metrics version for the given cluster name
+   */
+  protected PropertyHelper.MetricsVersion getMetricsVersion(String clusterName) {
+    updateClusterVersion();
+    return clusterVersionsMap.get(clusterName);
+  }
+
   protected abstract ResourceProvider createResourceProvider(Resource.Type type);
 
   protected void registerResourceProvider(Resource.Type type) {
@@ -465,9 +478,15 @@ public abstract class AbstractProviderModule implements ProviderModule, Resource
 
         for (Resource cluster : clusters) {
           String clusterVersion = (String) cluster.getPropertyValue(CLUSTER_VERSION_PROPERTY_ID);
-
-          PropertyHelper.MetricsVersion version =  clusterVersion.startsWith("HDP-1") ?
-              PropertyHelper.MetricsVersion.HDP1 : PropertyHelper.MetricsVersion.HDP2;
+          PropertyHelper.MetricsVersion version = PropertyHelper.MetricsVersion.HDP2;
+
+          Matcher m = Pattern.compile("[0-9]+(\\.[0-9]+)+").matcher(clusterVersion);
+          if (m.find()) {
+            clusterVersion = m.group(0);
+            if (clusterVersion.equals("1") || clusterVersion.startsWith("1.")) {
+              version = PropertyHelper.MetricsVersion.HDP1;
+            }
+          }
 
           clusterVersionsMap.put(
               (String) cluster.getPropertyValue(CLUSTER_NAME_PROPERTY_ID),

http://git-wip-us.apache.org/repos/asf/ambari/blob/e353a1f5/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractProviderModuleTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractProviderModuleTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractProviderModuleTest.java
new file mode 100644
index 0000000..36410c9
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractProviderModuleTest.java
@@ -0,0 +1,121 @@
+package org.apache.ambari.server.controller.internal;
+
+import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
+import org.apache.ambari.server.controller.spi.NoSuchResourceException;
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.RequestStatus;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
+import org.apache.ambari.server.controller.spi.ResourceProvider;
+import org.apache.ambari.server.controller.spi.SystemException;
+import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * AbstractProviderModule tests.
+ */
+public class AbstractProviderModuleTest {
+  @Test
+  public void testGetMetricsVersion() throws Exception {
+
+    TestAbstractProviderModule module = new TestAbstractProviderModule("HDP-1.0");
+    PropertyHelper.MetricsVersion version = module.getMetricsVersion("c1");
+    Assert.assertEquals(PropertyHelper.MetricsVersion.HDP1, version);
+    version = module.getMetricsVersion("c2");
+    Assert.assertNull(version);
+
+    module = new TestAbstractProviderModule("HDPLocal-1.3.2");
+    version = module.getMetricsVersion("c1");
+    Assert.assertEquals(PropertyHelper.MetricsVersion.HDP1, version);
+
+    module = new TestAbstractProviderModule("HDP-2.0.1");
+    version = module.getMetricsVersion("c1");
+    Assert.assertEquals(PropertyHelper.MetricsVersion.HDP2, version);
+
+    module = new TestAbstractProviderModule("HDP-2.0.1.x");
+    version = module.getMetricsVersion("c1");
+    Assert.assertEquals(PropertyHelper.MetricsVersion.HDP2, version);
+
+    module = new TestAbstractProviderModule("HDP-9.9.9");
+    version = module.getMetricsVersion("c1");
+    Assert.assertEquals(PropertyHelper.MetricsVersion.HDP2, version);
+
+    module = new TestAbstractProviderModule("HDPLocal-2.0.0");
+    version = module.getMetricsVersion("c1");
+    Assert.assertEquals(PropertyHelper.MetricsVersion.HDP2, version);
+  }
+
+  private static class TestAbstractProviderModule extends AbstractProviderModule {
+    private final String clusterVersion;
+
+    private TestAbstractProviderModule(String clusterVersion) {
+      this.clusterVersion = clusterVersion;
+    }
+
+    @Override
+    protected ResourceProvider createResourceProvider(Resource.Type type) {
+      return new TestResourceProvider(type, clusterVersion);
+    }
+  }
+
+  private static class TestResourceProvider implements ResourceProvider {
+    private final Resource.Type type;
+    private final String clusterVersion;
+
+    private TestResourceProvider(Resource.Type type, String clusterVersion) {
+      this.type = type;
+      this.clusterVersion = clusterVersion;
+    }
+
+    @Override
+    public RequestStatus createResources(Request request)
+        throws SystemException, UnsupportedPropertyException,
+        ResourceAlreadyExistsException, NoSuchParentResourceException {
+      return null;
+    }
+
+    @Override
+    public Set<Resource> getResources(Request request, Predicate predicate)
+        throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
+
+      if (type == Resource.Type.Cluster) {
+        Resource cluster = new ResourceImpl(Resource.Type.Cluster);
+        cluster.setProperty(ClusterResourceProvider.CLUSTER_ID_PROPERTY_ID, 1);
+        cluster.setProperty(ClusterResourceProvider.CLUSTER_NAME_PROPERTY_ID, "c1");
+        cluster.setProperty(ClusterResourceProvider.CLUSTER_VERSION_PROPERTY_ID, clusterVersion);
+
+        return Collections.singleton(cluster);
+      }
+      return Collections.emptySet();
+    }
+
+    @Override
+    public RequestStatus updateResources(Request request, Predicate predicate)
+        throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
+      return null;
+    }
+
+    @Override
+    public RequestStatus deleteResources(Predicate predicate)
+        throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
+      return null;
+    }
+
+    @Override
+    public Map<Resource.Type, String> getKeyPropertyIds() {
+      return null;
+    }
+
+    @Override
+    public Set<String> checkPropertyIds(Set<String> propertyIds) {
+      return null;
+    }
+  }
+}