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 2014/09/20 00:50:14 UTC

git commit: AMBARI-7418 - Views: cannot create instance w/o a restart.

Repository: ambari
Updated Branches:
  refs/heads/trunk 40050513e -> c840be073


AMBARI-7418 - Views: cannot create instance w/o a restart.


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

Branch: refs/heads/trunk
Commit: c840be073d1b969b50bedee9d8252dbc20ea9ab9
Parents: 4005051
Author: tbeerbower <tb...@hortonworks.com>
Authored: Fri Sep 19 18:32:31 2014 -0400
Committer: tbeerbower <tb...@hortonworks.com>
Committed: Fri Sep 19 18:49:46 2014 -0400

----------------------------------------------------------------------
 .../ambari/server/view/ViewProviderModule.java  | 26 ++++----------------
 .../apache/ambari/server/view/ViewRegistry.java | 22 ++++++++++++++++-
 .../ambari/server/view/ViewRegistryTest.java    | 20 +++++++++++++++
 3 files changed, 46 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c840be07/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java
index edaff1b..5fadf22 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewProviderModule.java
@@ -22,9 +22,7 @@ import org.apache.ambari.server.controller.spi.PropertyProvider;
 import org.apache.ambari.server.controller.spi.ProviderModule;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
-import org.apache.ambari.server.orm.entities.ViewEntity;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -35,11 +33,6 @@ import java.util.Map;
  */
 public class ViewProviderModule implements ProviderModule {
   /**
-   * Mapping of view resource type to resource provider.
-   */
-  private final Map<Resource.Type, ResourceProvider> resourceProviders;
-
-  /**
    * The delegate provider module.
    */
   private final ProviderModule providerModule;
@@ -51,12 +44,9 @@ public class ViewProviderModule implements ProviderModule {
    * Construct a view provider module.
    *
    * @param providerModule     the delegate provider module
-   * @param resourceProviders  the map of view resource types to resource providers
    */
-  private ViewProviderModule(ProviderModule providerModule,
-                            Map<Resource.Type, ResourceProvider> resourceProviders) {
+  private ViewProviderModule(ProviderModule providerModule) {
     this.providerModule = providerModule;
-    this.resourceProviders = resourceProviders;
   }
 
 
@@ -65,6 +55,9 @@ public class ViewProviderModule implements ProviderModule {
   @Override
   public ResourceProvider getResourceProvider(Resource.Type type) {
 
+    Map<Resource.Type, ResourceProvider> resourceProviders =
+        ViewRegistry.getInstance().getResourceProviders();
+
     if (resourceProviders.containsKey(type)) {
       return resourceProviders.get(type);
     }
@@ -87,15 +80,6 @@ public class ViewProviderModule implements ProviderModule {
    * @return a view provider module
    */
   public static ViewProviderModule getViewProviderModule(ProviderModule module) {
-    Map<Resource.Type, ResourceProvider> resourceProviders = new HashMap<Resource.Type, ResourceProvider>();
-
-    ViewRegistry registry = ViewRegistry.getInstance();
-    for (ViewEntity definition : registry.getDefinitions()) {
-      for (Resource.Type type : definition.getViewResourceTypes()){
-        ResourceProvider provider = definition.getResourceProvider(type);
-        resourceProviders.put(type, provider);
-      }
-    }
-    return new ViewProviderModule(module, resourceProviders);
+    return new ViewProviderModule(module);
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/c840be07/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 5e652a1..58c4334 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
@@ -29,6 +29,7 @@ import org.apache.ambari.server.api.services.ViewExternalSubResourceService;
 import org.apache.ambari.server.api.services.ViewSubResourceService;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.orm.dao.MemberDAO;
 import org.apache.ambari.server.orm.dao.PrivilegeDAO;
 import org.apache.ambari.server.orm.dao.ResourceDAO;
@@ -125,6 +126,12 @@ public class ViewRegistry {
       new HashMap<String, Set<SubResourceDefinition>>();
 
   /**
+   * Mapping of view types to resource providers.
+   */
+  private final Map<Resource.Type, ResourceProvider> resourceProviders =
+      new ConcurrentHashMap<Resource.Type, ResourceProvider>();
+
+  /**
    * Mapping of view names to registered listeners.
    */
   private final Map<String, Set<Listener>> listeners =
@@ -732,6 +739,15 @@ public class ViewRegistry {
     listeners.clear();
   }
 
+  /**
+   * Get the view resource provider mapping.
+   *
+   * @return the map of view resource providers
+   */
+  protected Map<Resource.Type, ResourceProvider> getResourceProviders() {
+    return resourceProviders;
+  }
+
   // get a view entity for the given internal view name
   private ViewEntity getDefinition(String viewName) {
     return viewDefinitions.get(viewName);
@@ -768,6 +784,8 @@ public class ViewRegistry {
         new ViewExternalSubResourceProvider(externalResourceType, viewDefinition);
     viewDefinition.addResourceProvider(externalResourceType, viewExternalSubResourceProvider );
 
+    resourceProviders.put(externalResourceType, viewExternalSubResourceProvider);
+
     ResourceInstanceFactoryImpl.addResourceDefinition(externalResourceType,
         new ViewExternalSubResourceDefinition(externalResourceType));
 
@@ -799,7 +817,9 @@ public class ViewRegistry {
         Class<?> clazz      = resourceConfiguration.getResourceClass(cl);
         String   idProperty = resourceConfiguration.getIdProperty();
 
-        viewDefinition.addResourceProvider(type, new ViewSubResourceProvider(type, clazz, idProperty, viewDefinition));
+        ViewSubResourceProvider provider = new ViewSubResourceProvider(type, clazz, idProperty, viewDefinition);
+        viewDefinition.addResourceProvider(type, provider);
+        resourceProviders.put(type, provider);
 
         resources.add(viewResourceEntity);
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/c840be07/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 56ee434..47bf5c3 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
@@ -519,6 +519,26 @@ public class ViewRegistryTest {
   }
 
   @Test
+  public void testGetResourceProviders() throws Exception {
+
+    ViewConfig config = ViewConfigTest.getConfig();
+
+    ViewEntity viewDefinition = ViewEntityTest.getViewEntity();
+
+    ViewRegistry registry = ViewRegistry.getInstance();
+
+    registry.setupViewDefinition(viewDefinition, config, getClass().getClassLoader());
+
+    Map<Resource.Type, ResourceProvider> providerMap = registry.getResourceProviders();
+
+    Assert.assertEquals(3, providerMap.size());
+
+    Assert.assertTrue(providerMap.containsKey(Resource.Type.valueOf("MY_VIEW{1.0.0}/resource")));
+    Assert.assertTrue(providerMap.containsKey(Resource.Type.valueOf("MY_VIEW{1.0.0}/subresource")));
+    Assert.assertTrue(providerMap.containsKey(Resource.Type.valueOf("MY_VIEW{1.0.0}/resources")));
+  }
+
+  @Test
   public void testAddGetDefinitions() throws Exception {
     ViewEntity viewDefinition = ViewEntityTest.getViewEntity();