You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by ma...@apache.org on 2016/12/15 08:07:00 UTC

incubator-ranger git commit: RANGER-1251: plugin status should show tag data only when tag-service is associated

Repository: incubator-ranger
Updated Branches:
  refs/heads/master a1dd7be65 -> 7901d43c2


RANGER-1251: plugin status should show tag data only when tag-service is associated

Signed-off-by: Madhan Neethiraj <ma...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/7901d43c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/7901d43c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/7901d43c

Branch: refs/heads/master
Commit: 7901d43c21d3e392c2f88ed40c22d5c84e227fac
Parents: a1dd7be
Author: Abhay Kulkarni <ak...@hortonworks.com>
Authored: Fri Dec 9 12:20:55 2016 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Wed Dec 14 23:50:33 2016 -0800

----------------------------------------------------------------------
 .../java/org/apache/ranger/biz/AssetMgr.java    | 25 +++++++++++++++++---
 .../java/org/apache/ranger/db/XXServiceDao.java | 18 ++++++++++++++
 .../ranger/service/RangerPluginInfoService.java | 23 ++++++++++++------
 .../resources/META-INF/jpa_named_queries.xml    | 15 ++++++++++++
 4 files changed, 71 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7901d43c/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
index d32d796..fbe846d 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/AssetMgr.java
@@ -712,19 +712,30 @@ public class AssetMgr extends AssetMgrBase {
 			logger.debug("==> createOrUpdatePluginInfo(pluginInfo=" + pluginInfo + ", httpCode=" + httpCode + ")");
 		}
 
+		final boolean isTagVersionResetNeeded;
+
 		if (httpCode == HttpServletResponse.SC_NOT_MODIFIED) {
 			// Create or update PluginInfo record after transaction is completed. If it is created in-line here
 			// then the TransactionManager will roll-back the changes because the HTTP return code is
 			// HttpServletResponse.SC_NOT_MODIFIED
+
+			boolean isPolicyInfo = pluginInfo.getPolicyDownloadedVersion() != null;
+			if (isPolicyInfo) {
+				isTagVersionResetNeeded = rangerDaoManager.getXXService().findAssociatedTagService(pluginInfo.getServiceName()) == null;
+			} else {
+				isTagVersionResetNeeded = false;
+			}
+
 			Runnable commitWork = new Runnable() {
 				@Override
 				public void run() {
-					doCreateOrUpdateXXPluginInfo(pluginInfo);
+					doCreateOrUpdateXXPluginInfo(pluginInfo, isTagVersionResetNeeded);
 				}
 			};
 			activityLogger.commitAfterTransactionComplete(commitWork);
 		} else {
-			doCreateOrUpdateXXPluginInfo(pluginInfo);
+			isTagVersionResetNeeded = false;
+			doCreateOrUpdateXXPluginInfo(pluginInfo, isTagVersionResetNeeded);
 		}
 		if (logger.isDebugEnabled()) {
 			logger.debug("<== createOrUpdatePluginInfo(pluginInfo=" + pluginInfo + ", httpCode=" + httpCode + ")");
@@ -732,7 +743,7 @@ public class AssetMgr extends AssetMgrBase {
 
 	}
 
-	private XXPluginInfo doCreateOrUpdateXXPluginInfo(RangerPluginInfo pluginInfo) {
+	private XXPluginInfo doCreateOrUpdateXXPluginInfo(RangerPluginInfo pluginInfo, final boolean isTagVersionResetNeeded) {
 		XXPluginInfo ret = null;
 
 		if (StringUtils.isNotBlank(pluginInfo.getServiceName())) {
@@ -814,6 +825,14 @@ public class AssetMgr extends AssetMgrBase {
 					}
 				}
 
+				if (isTagVersionResetNeeded) {
+					dbObj.setTagDownloadedVersion(null);
+					dbObj.setTagDownloadTime(null);
+					dbObj.setTagActiveVersion(null);
+					dbObj.setTagActivationTime(null);
+					needsUpdating = true;
+				}
+
 				if (needsUpdating) {
 					if (logger.isDebugEnabled()) {
 						logger.debug("Updating XXPluginInfo record for service-version");

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7901d43c/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
index 240345f..93c65a8 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
@@ -81,6 +81,24 @@ public class XXServiceDao extends BaseDao<XXService> {
 		}
 	}
 
+	public XXService findAssociatedTagService(String serviceName) {
+		try {
+			return getEntityManager().createNamedQuery("XXService.findAssociatedTagService", tClass)
+					.setParameter("serviceName", serviceName).getSingleResult();
+		} catch (NoResultException e) {
+			return null;
+		}
+	}
+
+	public List<XXService> getAllServicesWithTagService() {
+		try {
+			return getEntityManager().createNamedQuery("XXService.getAllServicesWithTagService", tClass)
+					.getResultList();
+		} catch (NoResultException e) {
+			return new ArrayList<XXService>();
+		}
+	}
+
 	public void updateSequence() {
 		Long maxId = getMaxIdOfXXService();
 

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7901d43c/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java b/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
index b496b86..d4d0605 100644
--- a/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
+++ b/security-admin/src/main/java/org/apache/ranger/service/RangerPluginInfoService.java
@@ -33,6 +33,7 @@ import org.apache.ranger.common.SearchField;
 import org.apache.ranger.common.SortField;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.entity.XXPluginInfo;
+import org.apache.ranger.entity.XXService;
 import org.apache.ranger.entity.XXServiceVersionInfo;
 import org.apache.ranger.plugin.model.RangerPluginInfo;
 import org.apache.ranger.plugin.store.PList;
@@ -88,6 +89,8 @@ public class RangerPluginInfoService {
 		PList<RangerPluginInfo> retList = new PList<RangerPluginInfo>();
 		List<RangerPluginInfo> objList = new ArrayList<RangerPluginInfo>();
 
+		List<XXService> servicesWithTagService = daoManager.getXXService().getAllServicesWithTagService();
+
 		List<XXPluginInfo> xObjList = searchRangerObjects(searchFilter, searchFields, sortFields, retList);
 
 		List<Object[]> objectsList = null;
@@ -97,6 +100,7 @@ public class RangerPluginInfoService {
 
 		for (XXPluginInfo xObj : xObjList) {
 			XXServiceVersionInfo xxServiceVersionInfo = null;
+			boolean hasAssociatedTagService = false;
 
 			if (CollectionUtils.isNotEmpty(objectsList)) {
 				for (Object[] objects : objectsList) {
@@ -104,6 +108,12 @@ public class RangerPluginInfoService {
 						if (xObj.getServiceName().equals(objects[1])) {
 							if (objects[0] instanceof XXServiceVersionInfo) {
 								xxServiceVersionInfo = (XXServiceVersionInfo) objects[0];
+								for (XXService service : servicesWithTagService) {
+									if (service.getName().equals(xObj.getServiceName())) {
+										hasAssociatedTagService = true;
+										break;
+									}
+								}
 							} else {
 								LOG.warn("Expected first object to be XXServiceVersionInfo, got " + objects[0]);
 							}
@@ -115,7 +125,7 @@ public class RangerPluginInfoService {
 				}
 			}
 
-			RangerPluginInfo obj = populateViewObjectWithServiceVersionInfo(xObj, xxServiceVersionInfo);
+			RangerPluginInfo obj = populateViewObjectWithServiceVersionInfo(xObj, xxServiceVersionInfo, hasAssociatedTagService);
 			objList.add(obj);
 		}
 
@@ -133,7 +143,7 @@ public class RangerPluginInfoService {
 		ret.setHostName(xObj.getHostName());
 		ret.setAppType(xObj.getAppType());
 		ret.setIpAddress(xObj.getIpAddress());
-		ret.setInfo(jsonStringToMap(xObj.getInfo(), null));
+		ret.setInfo(jsonStringToMap(xObj.getInfo(), null, false));
 		return ret;
 	}
 
@@ -150,7 +160,7 @@ public class RangerPluginInfoService {
 		return ret;
 	}
 
-	private RangerPluginInfo populateViewObjectWithServiceVersionInfo(XXPluginInfo xObj, XXServiceVersionInfo xxServiceVersionInfo) {
+	private RangerPluginInfo populateViewObjectWithServiceVersionInfo(XXPluginInfo xObj, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
 		RangerPluginInfo ret = new RangerPluginInfo();
 		ret.setId(xObj.getId());
 		ret.setCreateTime(xObj.getCreateTime());
@@ -159,7 +169,7 @@ public class RangerPluginInfoService {
 		ret.setHostName(xObj.getHostName());
 		ret.setAppType(xObj.getAppType());
 		ret.setIpAddress(xObj.getIpAddress());
-		ret.setInfo(jsonStringToMap(xObj.getInfo(), xxServiceVersionInfo));
+		ret.setInfo(jsonStringToMap(xObj.getInfo(), xxServiceVersionInfo, hasAssociatedTagService));
 		return ret;
 	}
 
@@ -227,7 +237,7 @@ public class RangerPluginInfoService {
 		return ret;
 	}
 
-	private Map<String, String> jsonStringToMap(String jsonStr, XXServiceVersionInfo xxServiceVersionInfo) {
+	private Map<String, String> jsonStringToMap(String jsonStr, XXServiceVersionInfo xxServiceVersionInfo, boolean hasAssociatedTagService) {
 
 		Map<String, String> ret = null;
 
@@ -241,8 +251,7 @@ public class RangerPluginInfoService {
 				Date lastTagUpdateTime = xxServiceVersionInfo.getTagUpdateTime();
 				ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_POLICY_VERSION, Long.toString(latestPolicyVersion));
 				ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_POLICY_UPDATE_TIME, Long.toString(lastPolicyUpdateTime.getTime()));
-				// Meaningful tag-versions start from 2
-				if (latestTagVersion.longValue() > 1L) {
+				if (hasAssociatedTagService) {
 					ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_TAG_VERSION, Long.toString(latestTagVersion));
 					ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_TAG_UPDATE_TIME, Long.toString(lastTagUpdateTime.getTime()));
 				} else {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/7901d43c/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
----------------------------------------------------------------------
diff --git a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
index ac34b07..c8c3d2f 100644
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -402,6 +402,21 @@
 		<query>select obj from XXService obj where obj.tagService = :tagServiceId</query>
 	</named-query>
 
+	<named-query name="XXService.findAssociatedTagService">
+		<query>select obj from XXService obj
+			where obj.name = :serviceName
+			and obj.tagService is NOT null
+			and exists (select tagService from XXService tagService where obj.tagService = tagService.id and tagService.isEnabled = TRUE)
+		</query>
+	</named-query>
+
+	<named-query name="XXService.getAllServicesWithTagService">
+		<query>select obj from XXService obj
+			where obj.tagService is NOT null
+			and exists (select tagService from XXService tagService where obj.tagService = tagService.id and tagService.isEnabled = TRUE)
+		</query>
+	</named-query>
+
 	<!-- XXServiceVersionInfo -->
 	<named-query name="XXServiceVersionInfo.findByServiceName">
 		<query>