You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/12/15 14:44:52 UTC

ambari git commit: AMBARI-19194 - Deployed Views Throw Exceptions On Ambari Server Startup (jonathanhurley)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.5 d60e9612c -> 72378e26f


AMBARI-19194 - Deployed Views Throw Exceptions On Ambari Server Startup (jonathanhurley)


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

Branch: refs/heads/branch-2.5
Commit: 72378e26f6b8bdb0021a82467d7c5d3d3091e851
Parents: d60e9612
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue Dec 13 17:05:25 2016 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Thu Dec 15 09:44:43 2016 -0500

----------------------------------------------------------------------
 .../ambari/server/orm/dao/ViewInstanceDAO.java  | 23 ++++++++
 .../server/orm/entities/ViewInstanceEntity.java | 58 +++++++++++---------
 .../apache/ambari/server/view/ViewRegistry.java | 13 ++++-
 3 files changed, 67 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/72378e26/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewInstanceDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewInstanceDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewInstanceDAO.java
index eef3e61..061c722 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewInstanceDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewInstanceDAO.java
@@ -25,6 +25,7 @@ import javax.persistence.NoResultException;
 import javax.persistence.TypedQuery;
 
 import org.apache.ambari.server.orm.RequiresSession;
+import org.apache.ambari.server.orm.entities.ResourceEntity;
 import org.apache.ambari.server.orm.entities.ViewInstanceDataEntity;
 import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
 
@@ -93,6 +94,28 @@ public class ViewInstanceDAO {
   }
 
   /**
+   * Gets the associated {@link ResourceEntity} for a given instance.
+   *
+   * @param viewName
+   *          the name of the view
+   * @param instanceName
+   *          the name of the view instance
+   *
+   * @return the associated resource entity or {@code null}.
+   */
+  @RequiresSession
+  public ResourceEntity findResourceForViewInstance(String viewName,
+      String instanceName) {
+    TypedQuery<ResourceEntity> query = entityManagerProvider.get().createNamedQuery(
+        "getResourceIdByViewInstance", ResourceEntity.class);
+
+    query.setParameter("viewName", viewName);
+    query.setParameter("instanceName", instanceName);
+
+    return daoUtils.selectOne(query);
+  }
+
+  /**
    * Refresh the state of the instance from the database,
    * overwriting changes made to the entity, if any.
    *

http://git-wip-us.apache.org/repos/asf/ambari/blob/72378e26/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
index e20db3b..b632c54 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java
@@ -72,14 +72,17 @@ import org.apache.ambari.view.validation.ValidationResult;
     name = "UQ_viewinstance_name", columnNames = {"view_name", "name"}
   )
 )
-@NamedQueries({
-  @NamedQuery(name = "allViewInstances",
-      query = "SELECT viewInstance FROM ViewInstanceEntity viewInstance"),
-  @NamedQuery(name = "viewInstanceByResourceId", query =
-      "SELECT viewInstance " +
-          "FROM ViewInstanceEntity viewInstance " +
-          "WHERE viewInstance.resource.id=:resourceId")
-})
+@NamedQueries({ @NamedQuery(
+    name = "allViewInstances",
+    query = "SELECT viewInstance FROM ViewInstanceEntity viewInstance"),
+    @NamedQuery(
+        name = "viewInstanceByResourceId",
+        query = "SELECT viewInstance FROM ViewInstanceEntity viewInstance "
+            + "WHERE viewInstance.resource.id=:resourceId"),
+    @NamedQuery(
+        name = "getResourceIdByViewInstance",
+        query = "SELECT viewInstance.resource FROM ViewInstanceEntity viewInstance "
+            + "WHERE viewInstance.viewName = :viewName AND viewInstance.name = :instanceName"), })
 
 @TableGenerator(name = "view_instance_id_generator",
   table = "ambari_sequences", pkColumnName = "sequence_name", valueColumnName = "sequence_value"
@@ -242,7 +245,7 @@ public class ViewInstanceEntity implements ViewInstanceDefinition {
 
   public ViewInstanceEntity() {
     instanceConfig = null;
-    this.alterNames = 1;
+    alterNames = 1;
   }
 
   /**
@@ -252,15 +255,15 @@ public class ViewInstanceEntity implements ViewInstanceDefinition {
    * @param instanceConfig the associated configuration
    */
   public ViewInstanceEntity(ViewEntity view, InstanceConfig instanceConfig) {
-    this.name = instanceConfig.getName();
+    name = instanceConfig.getName();
     this.instanceConfig = instanceConfig;
     this.view = view;
-    this.viewName = view.getName();
-    this.description = instanceConfig.getDescription();
-    this.clusterHandle = null;
-    this.visible = instanceConfig.isVisible() ? 'Y' : 'N';
-    this.alterNames = 1;
-    this.clusterType = ClusterType.LOCAL_AMBARI;
+    viewName = view.getName();
+    description = instanceConfig.getDescription();
+    clusterHandle = null;
+    visible = instanceConfig.isVisible() ? 'Y' : 'N';
+    alterNames = 1;
+    clusterType = ClusterType.LOCAL_AMBARI;
 
     String label = instanceConfig.getLabel();
     this.label = (label == null || label.length() == 0) ? view.getLabel() : label;
@@ -291,13 +294,13 @@ public class ViewInstanceEntity implements ViewInstanceDefinition {
    */
   public ViewInstanceEntity(ViewEntity view, String name, String label) {
     this.name = name;
-    this.instanceConfig = null;
+    instanceConfig = null;
     this.view = view;
-    this.viewName = view.getName();
-    this.description = null;
-    this.clusterHandle = null;
-    this.visible = 'Y';
-    this.alterNames = 1;
+    viewName = view.getName();
+    description = null;
+    clusterHandle = null;
+    visible = 'Y';
+    alterNames = 1;
     this.label = label;
   }
 
@@ -456,6 +459,7 @@ public class ViewInstanceEntity implements ViewInstanceDefinition {
    *
    * @return clusterType the type of cluster for cluster handle
    */
+  @Override
   public ClusterType getClusterType() {
     return clusterType;
   }
@@ -957,8 +961,12 @@ public class ViewInstanceEntity implements ViewInstanceDefinition {
 
   @Override
   public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
 
     ViewInstanceEntity that = (ViewInstanceEntity) o;
 
@@ -992,7 +1000,7 @@ public class ViewInstanceEntity implements ViewInstanceDefinition {
    * Remove the URL associated with this entity
    */
   public void clearUrl() {
-    this.viewUrl = null;
+    viewUrl = null;
   }
 
   //----- ViewInstanceVersionDTO inner class --------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ambari/blob/72378e26/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 ab83696..608435d 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
@@ -565,7 +565,6 @@ public class ViewRegistry {
         }
 
         instanceEntity.validate(viewEntity, Validator.ValidationContext.PRE_CREATE);
-
         setPersistenceEntities(instanceEntity);
 
         ViewInstanceEntity persistedInstance = mergeViewInstance(instanceEntity, viewEntity.getResourceType());
@@ -587,6 +586,7 @@ public class ViewRegistry {
         // add the web app context
         handlerList.addViewInstance(instanceEntity);
       }
+
     } else {
       String message = "Attempt to install an instance for an unknown view " +
           instanceEntity.getViewName() + ".";
@@ -969,6 +969,7 @@ public class ViewRegistry {
         String viewName = viewEntity.getName();
         ViewConfig viewConfig = viewEntity.getConfiguration();
         AutoInstanceConfig autoConfig = viewConfig.getAutoInstance();
+        Collection<String> roles = autoConfig.getRoles();
 
         try {
           if (checkAutoInstanceConfig(autoConfig, stackId, event.getServiceName(), serviceNames)) {
@@ -977,6 +978,7 @@ public class ViewRegistry {
             ViewInstanceEntity viewInstanceEntity = createViewInstanceEntity(viewEntity, viewConfig, autoConfig);
             viewInstanceEntity.setClusterHandle(clusterId);
             installViewInstance(viewInstanceEntity);
+            setViewInstanceRoleAccess(viewInstanceEntity, roles);
           }
         } catch (Exception e) {
           LOG.error("Can't auto create instance of view " + viewName + " for cluster " + clusterName +
@@ -1725,6 +1727,7 @@ public class ViewRegistry {
           instanceEntity.setXmlDriven(true);
           instanceDefinitions.add(instanceEntity);
         }
+
         persistView(viewDefinition, instanceDefinitions);
 
         // auto instances of loaded old views for doing data migration can not be installed
@@ -1885,6 +1888,12 @@ public class ViewRegistry {
     if ((roles != null) && !roles.isEmpty()) {
       PermissionEntity permissionViewUser = permissionDAO.findViewUsePermission();
 
+      ResourceEntity resourceEntity = viewInstanceEntity.getResource();
+      if (null == resourceEntity) {
+        resourceEntity = instanceDAO.findResourceForViewInstance(viewInstanceEntity.getViewName(),
+            viewInstanceEntity.getInstanceName());
+      }
+
       if (permissionViewUser == null) {
         LOG.error("Missing the {} role.  Access to view cannot be set.",
             PermissionEntity.VIEW_USER_PERMISSION_NAME, viewInstanceEntity.getName());
@@ -1905,7 +1914,7 @@ public class ViewRegistry {
               PrivilegeEntity privilegeEntity = new PrivilegeEntity();
               privilegeEntity.setPermission(permissionViewUser);
               privilegeEntity.setPrincipal(principalRole);
-              privilegeEntity.setResource(viewInstanceEntity.getResource());
+              privilegeEntity.setResource(resourceEntity);
               privilegeDAO.create(privilegeEntity);
             }
           }