Repository: ambari
Updated Branches:
  refs/heads/branch-1.7.0 240c9f69c -> 605ee38b8


AMBARI-7644 - After view deploy, GET call returning 400, not possible to create 
view instances w/o restart - backport to 1.7.0


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

Branch: refs/heads/branch-1.7.0
Commit: 605ee38b88f11f2332d431f0c144f99fee04f117
Parents: 240c9f6
Author: tbeerbower <tbeerbo...@hortonworks.com>
Authored: Fri Oct 31 17:32:18 2014 -0400
Committer: tbeerbower <tbeerbo...@hortonworks.com>
Committed: Fri Oct 31 17:32:47 2014 -0400

----------------------------------------------------------------------
 .../ViewInstanceResourceDefinition.java         |  5 ++-
 .../apache/ambari/server/view/ViewRegistry.java | 36 ++++++++------------
 .../ambari/server/view/ViewRegistryTest.java    | 33 ++++++++----------
 3 files changed, 34 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/605ee38b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ViewInstanceResourceDefinition.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ViewInstanceResourceDefinition.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ViewInstanceResourceDefinition.java
index 632a6bc..7b1008c 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ViewInstanceResourceDefinition.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/api/resources/ViewInstanceResourceDefinition.java
@@ -41,7 +41,10 @@ public class ViewInstanceResourceDefinition extends 
BaseResourceDefinition {
    */
   public ViewInstanceResourceDefinition(Set<SubResourceDefinition> 
subResourceDefinitions) {
     super(Resource.Type.ViewInstance);
-    this.subResourceDefinitions = new 
HashSet<SubResourceDefinition>(subResourceDefinitions);
+
+    this.subResourceDefinitions = subResourceDefinitions == null ? new 
HashSet<SubResourceDefinition>() :
+        new HashSet<SubResourceDefinition>(subResourceDefinitions);
+
     this.subResourceDefinitions.add(new 
SubResourceDefinition(Resource.Type.ViewPrivilege));
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/605ee38b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java 
b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
index 6581dfe..07b237f 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
@@ -123,7 +123,7 @@ public class ViewRegistry {
    * Mapping of view names to sub-resources.
    */
   private final Map<String, Set<SubResourceDefinition>> 
subResourceDefinitionsMap =
-      new HashMap<String, Set<SubResourceDefinition>>();
+      new ConcurrentHashMap<String, Set<SubResourceDefinition>>();
 
   /**
    * Mapping of view types to resource providers.
@@ -402,27 +402,12 @@ public class ViewRegistry {
    *
    * @return the set of sub-resource definitions
    */
-  public synchronized Set<SubResourceDefinition> getSubResourceDefinitions(
+  public Set<SubResourceDefinition> getSubResourceDefinitions(
       String viewName, String version) {
 
     viewName = ViewEntity.getViewName(viewName, version);
 
-    Set<SubResourceDefinition> subResourceDefinitions =
-        subResourceDefinitionsMap.get(viewName);
-
-    if (subResourceDefinitions == null) {
-      subResourceDefinitions = new HashSet<SubResourceDefinition>();
-      ViewEntity definition = getDefinition(viewName);
-      if (definition != null) {
-        if (definition.isDeployed()) {
-          for (Resource.Type type : definition.getViewResourceTypes()) {
-            subResourceDefinitions.add(new SubResourceDefinition(type));
-          }
-          subResourceDefinitionsMap.put(viewName, subResourceDefinitions);
-        }
-      }
-    }
-    return subResourceDefinitions;
+    return subResourceDefinitionsMap.get(viewName);
   }
 
   /**
@@ -820,10 +805,13 @@ public class ViewRegistry {
     List<ParameterConfig> parameterConfigurations = viewConfig.getParameters();
 
     Collection<ViewParameterEntity> parameters = new 
HashSet<ViewParameterEntity>();
+
+    String viewName = viewDefinition.getName();
+
     for (ParameterConfig parameterConfiguration : parameterConfigurations) {
       ViewParameterEntity viewParameterEntity =  new ViewParameterEntity();
 
-      viewParameterEntity.setViewName(viewDefinition.getName());
+      viewParameterEntity.setViewName(viewName);
       viewParameterEntity.setName(parameterConfiguration.getName());
       
viewParameterEntity.setDescription(parameterConfiguration.getDescription());
       viewParameterEntity.setRequired(parameterConfiguration.isRequired());
@@ -850,7 +838,7 @@ public class ViewRegistry {
     for (ResourceConfig resourceConfiguration : resourceConfigurations) {
       ViewResourceEntity viewResourceEntity = new ViewResourceEntity();
 
-      viewResourceEntity.setViewName(viewDefinition.getName());
+      viewResourceEntity.setViewName(viewName);
       viewResourceEntity.setName(resourceConfiguration.getName());
       viewResourceEntity.setPluralName(resourceConfiguration.getPluralName());
       viewResourceEntity.setIdProperty(resourceConfiguration.getIdProperty());
@@ -884,7 +872,7 @@ public class ViewRegistry {
     }
 
     ResourceTypeEntity resourceTypeEntity = new ResourceTypeEntity();
-    resourceTypeEntity.setName(viewDefinition.getName());
+    resourceTypeEntity.setName(viewName);
 
     viewDefinition.setResourceType(resourceTypeEntity);
 
@@ -907,6 +895,12 @@ public class ViewRegistry {
     viewDefinition.setView(view);
     viewDefinition.setMask(viewConfig.getMasker());
 
+    Set<SubResourceDefinition> subResourceDefinitions = new 
HashSet<SubResourceDefinition>();
+    for (Resource.Type type : viewDefinition.getViewResourceTypes()) {
+      subResourceDefinitions.add(new SubResourceDefinition(type));
+    }
+    subResourceDefinitionsMap.put(viewName, subResourceDefinitions);
+
     return viewDefinition;
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/605ee38b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
index bcbcfad..7c0cade 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
@@ -40,6 +40,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -75,8 +76,6 @@ import 
org.apache.ambari.server.security.authorization.AmbariGrantedAuthority;
 import org.apache.ambari.server.view.configuration.InstanceConfig;
 import org.apache.ambari.server.view.configuration.InstanceConfigTest;
 import org.apache.ambari.server.view.configuration.PropertyConfig;
-import org.apache.ambari.server.view.configuration.ResourceConfig;
-import org.apache.ambari.server.view.configuration.ResourceConfigTest;
 import org.apache.ambari.server.view.configuration.ViewConfig;
 import org.apache.ambari.server.view.configuration.ViewConfigTest;
 import org.apache.ambari.server.view.events.EventImpl;
@@ -611,30 +610,28 @@ public class ViewRegistryTest {
 
   @Test
   public void testGetSubResourceDefinitions() throws Exception {
-    ViewEntity viewDefinition = ViewEntityTest.getViewEntity();
-    ViewRegistry registry = ViewRegistry.getInstance();
-
-    viewDefinition.setStatus(ViewDefinition.ViewStatus.DEPLOYING);
+    ViewConfig config = ViewConfigTest.getConfig();
 
-    registry.addDefinition(viewDefinition);
-    Set<SubResourceDefinition> subResourceDefinitions = 
registry.getSubResourceDefinitions("MY_VIEW", "1.0.0");
+    ViewEntity viewDefinition = ViewEntityTest.getViewEntity();
 
-    Assert.assertTrue(subResourceDefinitions.isEmpty());
+    ViewRegistry registry = ViewRegistry.getInstance();
 
-    ResourceConfig config = ResourceConfigTest.getResourceConfigs().get(0);
-    Resource.Type type1 = new Resource.Type("myType");
+    registry.setupViewDefinition(viewDefinition, config, 
getClass().getClassLoader());
 
-    ResourceProvider provider1 = createNiceMock(ResourceProvider.class);
-    viewDefinition.addResourceProvider(type1, provider1);
+    Set<SubResourceDefinition> subResourceDefinitions =
+        registry.getSubResourceDefinitions(viewDefinition.getCommonName(), 
viewDefinition.getVersion());
 
-    viewDefinition.addResourceConfiguration(type1, config);
 
-    viewDefinition.setStatus(ViewDefinition.ViewStatus.DEPLOYED);
+    Assert.assertEquals(3, subResourceDefinitions.size());
 
-    subResourceDefinitions = registry.getSubResourceDefinitions("MY_VIEW", 
"1.0.0");
+    Set<String> names = new HashSet<String>();
+    for (SubResourceDefinition definition : subResourceDefinitions) {
+      names.add(definition.getType().name());
+    }
 
-    Assert.assertEquals(1, subResourceDefinitions.size());
-    Assert.assertEquals("myType", 
subResourceDefinitions.iterator().next().getType().name());
+    Assert.assertTrue(names.contains("MY_VIEW{1.0.0}/resources"));
+    Assert.assertTrue(names.contains("MY_VIEW{1.0.0}/resource"));
+    Assert.assertTrue(names.contains("MY_VIEW{1.0.0}/subresource"));
   }
 
   @Test

Reply via email to