You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by gn...@apache.org on 2017/02/09 10:29:44 UTC
ambari git commit: AMBARI-19891 - Extend View URL's to auto instances
This commit creates a default view URL for each view using the view
name.(Ashwin Rajeev via gauravn7)
Repository: ambari
Updated Branches:
refs/heads/trunk 9c07b8b54 -> af8b1cdfe
AMBARI-19891 - Extend View URL's to auto instances This commit creates a default view URL for each view using the view name.(Ashwin Rajeev via gauravn7)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/af8b1cdf
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/af8b1cdf
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/af8b1cdf
Branch: refs/heads/trunk
Commit: af8b1cdfee14c11c2b37a0da6faa1aa3361ddf36
Parents: 9c07b8b
Author: Gaurav Nagar <gr...@gmail.com>
Authored: Thu Feb 9 15:59:09 2017 +0530
Committer: Gaurav Nagar <gr...@gmail.com>
Committed: Thu Feb 9 15:59:35 2017 +0530
----------------------------------------------------------------------
.../apache/ambari/server/orm/dao/ViewDAO.java | 8 ++-
.../apache/ambari/server/view/ViewRegistry.java | 62 ++++++++++++++++++++
2 files changed, 67 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/af8b1cdf/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewDAO.java
index ab6dcf4..192e426 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ViewDAO.java
@@ -26,6 +26,7 @@ import javax.persistence.TypedQuery;
import org.apache.ambari.server.orm.RequiresSession;
import org.apache.ambari.server.orm.entities.ViewEntity;
+import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.Singleton;
@@ -62,15 +63,16 @@ public class ViewDAO {
* @return a matching view or null
*/
@RequiresSession
- public ViewEntity findByCommonName(String viewCommonName) {
+ public List<ViewEntity> findByCommonName(String viewCommonName) {
+ List<ViewEntity> list = Lists.newArrayList();
if (viewCommonName != null) {
for (ViewEntity viewEntity : findAll()) {
if (viewCommonName.equals(viewEntity.getCommonName())) {
- return viewEntity;
+ list.add(viewEntity);
}
}
}
- return null;
+ return list;
}
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/af8b1cdf/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 6316b5b..81c4734 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
@@ -71,6 +71,7 @@ import org.apache.ambari.server.orm.dao.ResourceTypeDAO;
import org.apache.ambari.server.orm.dao.UserDAO;
import org.apache.ambari.server.orm.dao.ViewDAO;
import org.apache.ambari.server.orm.dao.ViewInstanceDAO;
+import org.apache.ambari.server.orm.dao.ViewURLDAO;
import org.apache.ambari.server.orm.entities.GroupEntity;
import org.apache.ambari.server.orm.entities.MemberEntity;
import org.apache.ambari.server.orm.entities.PermissionEntity;
@@ -86,6 +87,7 @@ import org.apache.ambari.server.orm.entities.ViewInstanceDataEntity;
import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
import org.apache.ambari.server.orm.entities.ViewParameterEntity;
import org.apache.ambari.server.orm.entities.ViewResourceEntity;
+import org.apache.ambari.server.orm.entities.ViewURLEntity;
import org.apache.ambari.server.security.SecurityHelper;
import org.apache.ambari.server.security.authorization.AuthorizationHelper;
import org.apache.ambari.server.security.authorization.ResourceType;
@@ -125,6 +127,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;
@@ -133,6 +137,7 @@ import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.persist.Transactional;
+
/**
* Registry for view and view instance definitions.
*/
@@ -153,6 +158,7 @@ public class ViewRegistry {
private static final String LOG4J = "log4j.";
public static final String API_PREFIX = "/api/v1/clusters/";
+ public static final String DEFAULT_AUTO_INSTANCE_URL = "auto_instance";
/**
* Thread pool
@@ -317,6 +323,9 @@ public class ViewRegistry {
@Inject
RemoteAmbariClusterDAO remoteAmbariClusterDAO;
+ @Inject
+ ViewURLDAO viewURLDAO;
+
// ----- Constructors -----------------------------------------------------
/**
@@ -997,6 +1006,59 @@ public class ViewRegistry {
viewInstanceEntity.setClusterHandle(clusterId);
installViewInstance(viewInstanceEntity);
setViewInstanceRoleAccess(viewInstanceEntity, roles);
+ try {
+ setViewUrl(viewInstanceEntity);
+ } catch (Exception urlCreateException) {
+ LOG.error("Error while creating an auto URL for the view instance {}, Url should be created in view instance settings", viewInstanceEntity.getViewName());
+ LOG.error("View URL creation error ", urlCreateException);
+ }
+
+ }
+
+ private String getUrlName(ViewInstanceEntity viewInstanceEntity) {
+ return viewInstanceEntity.getViewEntity().getCommonName().toLowerCase() + "_" + viewInstanceEntity.getInstanceName().toLowerCase();
+ }
+
+ private void setViewUrl(ViewInstanceEntity instanceEntity) {
+ ViewInstanceEntity viewInstanceEntity = instanceDAO.findByName(instanceEntity.getViewName(), instanceEntity.getInstanceName());
+ Preconditions.checkNotNull(viewInstanceEntity);
+ ViewURLEntity viewUrl = viewInstanceEntity.getViewUrl();
+ // check if there is a URL attached
+ if (viewUrl != null) {
+ LOG.warn("Url exists for the auto instance {}, new url will not be created", viewInstanceEntity.getViewName());
+ return;
+ }
+
+ String urlName = getUrlName(viewInstanceEntity);
+ //Check if a URL exists with the same name
+ Optional<ViewURLEntity> existingUrl = viewURLDAO.findByName(urlName);
+ // remove any pre-existing URL's before creating new URL's
+ ViewURLEntity urlEntity = new ViewURLEntity();
+ urlEntity.setUrlName(urlName);
+
+ urlEntity.setUrlSuffix(viewInstanceEntity.getInstanceName().toLowerCase());
+
+ ViewURLEntity toSaveOrUpdate = existingUrl.or(urlEntity);
+ toSaveOrUpdate.setViewInstanceEntity(viewInstanceEntity);
+
+ if (existingUrl.isPresent()) {
+ LOG.info("Url already present for {}", viewInstanceEntity.getViewName());
+ viewURLDAO.update(toSaveOrUpdate);
+ } else {
+ LOG.info("Creating a new URL for auto instance {}", viewInstanceEntity.getViewName());
+ viewURLDAO.save(urlEntity);
+ }
+ // Update the view with the URL
+ viewInstanceEntity.setViewUrl(urlEntity);
+ try {
+ updateViewInstance(viewInstanceEntity);
+ } catch (Exception ex) {
+ LOG.error("Could not update the view instance with new URL, removing URL", ex);
+ // Clean up
+ Optional<ViewURLEntity> viewURLDAOByName = viewURLDAO.findByName(urlName);
+ if (viewURLDAOByName.isPresent())
+ viewURLDAO.delete(viewURLDAOByName.get());
+ }
}
@Subscribe