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);
}
}