This is an automated email from the ASF dual-hosted git repository. madhan pushed a commit to branch RANGER-3923 in repository https://gitbox.apache.org/repos/asf/ranger.git
commit a86520d03cb295e9a5bad22b697c6b89d01c6b85 Author: Madhan Neethiraj <mad...@apache.org> AuthorDate: Mon Nov 20 17:51:58 2023 -0800 RANGER-4538: updated plugin-status to record GDS info download details --- .../ranger/plugin/model/RangerPluginInfo.java | 53 ++++++++++++++++++++++ .../main/java/org/apache/ranger/biz/AssetMgr.java | 53 ++++++++++++++++++---- .../main/java/org/apache/ranger/rest/GdsREST.java | 37 +++++++++++---- .../ranger/service/RangerPluginInfoService.java | 5 ++ 4 files changed, 129 insertions(+), 19 deletions(-) diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPluginInfo.java b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPluginInfo.java index 238a98242..6d3d17d9e 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPluginInfo.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/RangerPluginInfo.java @@ -40,11 +40,13 @@ public class RangerPluginInfo implements Serializable { public static final int ENTITY_TYPE_TAGS = 1; public static final int ENTITY_TYPE_ROLES = 2; public static final int ENTITY_TYPE_USERSTORE = 3; + public static final int ENTITY_TYPE_GDS = 4; public static final String PLUGIN_INFO_POLICY_DOWNLOAD_TIME = "policyDownloadTime"; public static final String PLUGIN_INFO_POLICY_DOWNLOADED_VERSION = "policyDownloadedVersion"; public static final String PLUGIN_INFO_POLICY_ACTIVATION_TIME = "policyActivationTime"; public static final String PLUGIN_INFO_POLICY_ACTIVE_VERSION = "policyActiveVersion"; + public static final String PLUGIN_INFO_TAG_DOWNLOAD_TIME = "tagDownloadTime"; public static final String PLUGIN_INFO_TAG_DOWNLOADED_VERSION = "tagDownloadedVersion"; public static final String PLUGIN_INFO_TAG_ACTIVATION_TIME = "tagActivationTime"; @@ -60,10 +62,17 @@ public class RangerPluginInfo implements Serializable { public static final String PLUGIN_INFO_USERSTORE_ACTIVATION_TIME = "userstoreActivationTime"; public static final String PLUGIN_INFO_USERSTORE_ACTIVE_VERSION = "userstoreActiveVersion"; + public static final String PLUGIN_INFO_GDS_DOWNLOAD_TIME = "gdsDownloadTime"; + public static final String PLUGIN_INFO_GDS_DOWNLOADED_VERSION = "gdsDownloadedVersion"; + public static final String PLUGIN_INFO_GDS_ACTIVATION_TIME = "gdsActivationTime"; + public static final String PLUGIN_INFO_GDS_ACTIVE_VERSION = "gdsActiveVersion"; + public static final String RANGER_ADMIN_LAST_POLICY_UPDATE_TIME = "lastPolicyUpdateTime"; public static final String RANGER_ADMIN_LATEST_POLICY_VERSION = "latestPolicyVersion"; public static final String RANGER_ADMIN_LAST_TAG_UPDATE_TIME = "lastTagUpdateTime"; public static final String RANGER_ADMIN_LATEST_TAG_VERSION = "latestTagVersion"; + public static final String RANGER_ADMIN_LAST_GDS_UPDATE_TIME = "lastGdsUpdateTime"; + public static final String RANGER_ADMIN_LATEST_GDS_VERSION = "latestGdsVersion"; public static final String RANGER_ADMIN_CAPABILITIES = "adminCapabilities"; public static final String PLUGIN_INFO_CAPABILITIES = "pluginCapabilities"; @@ -388,6 +397,50 @@ public class RangerPluginInfo implements Serializable { return StringUtils.isNotBlank(activeVersionString) ? Long.valueOf(activeVersionString) : null; } + @JsonIgnore + public void setGdsDownloadTime(Long gdsDownloadTime) { + getInfo().put(PLUGIN_INFO_GDS_DOWNLOAD_TIME, gdsDownloadTime == null ? null : Long.toString(gdsDownloadTime)); + } + + @JsonIgnore + public Long getGdsDownloadTime() { + String downloadTimeString = getInfo().get(PLUGIN_INFO_GDS_DOWNLOAD_TIME); + return StringUtils.isNotBlank(downloadTimeString) ? Long.valueOf(downloadTimeString) : null; + } + + @JsonIgnore + public void setGdsDownloadedVersion(Long gdsDownloadedVersion) { + getInfo().put(PLUGIN_INFO_GDS_DOWNLOADED_VERSION, gdsDownloadedVersion == null ? null : Long.toString(gdsDownloadedVersion)); + } + + @JsonIgnore + public Long getGdsDownloadedVersion() { + String downloadedVersionString = getInfo().get(PLUGIN_INFO_GDS_DOWNLOADED_VERSION); + return StringUtils.isNotBlank(downloadedVersionString) ? Long.valueOf(downloadedVersionString) : null; + } + + @JsonIgnore + public void setGdsActivationTime(Long gdsActivationTime) { + getInfo().put(PLUGIN_INFO_GDS_ACTIVATION_TIME, gdsActivationTime == null ? null : Long.toString(gdsActivationTime)); + } + + @JsonIgnore + public Long getGdsActivationTime() { + String activationTimeString = getInfo().get(PLUGIN_INFO_GDS_ACTIVATION_TIME); + return StringUtils.isNotBlank(activationTimeString) ? Long.valueOf(activationTimeString) : null; + } + + @JsonIgnore + public void setGdsActiveVersion(Long gdsActiveVersion) { + getInfo().put(PLUGIN_INFO_GDS_ACTIVE_VERSION, gdsActiveVersion == null ? null : Long.toString(gdsActiveVersion)); + } + + @JsonIgnore + public Long getGdsActiveVersion() { + String activeVersionString = getInfo().get(PLUGIN_INFO_GDS_ACTIVE_VERSION); + return StringUtils.isNotBlank(activeVersionString) ? Long.valueOf(activeVersionString) : null; + } + @JsonIgnore public void setPluginCapabilities(String capabilities) { setCapabilities(PLUGIN_INFO_CAPABILITIES, capabilities); 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 8bbeba783..6f1bcc40e 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 @@ -752,6 +752,12 @@ public class AssetMgr extends AssetMgrBase { pluginSvcVersionInfo.setUserStoreDownloadedVersion(downloadedVersion); pluginSvcVersionInfo.setUserStoreDownloadTime(new Date().getTime()); break; + case RangerPluginInfo.ENTITY_TYPE_GDS: + pluginSvcVersionInfo.setGdsActiveVersion(lastKnownVersion); + pluginSvcVersionInfo.setGdsActivationTime(lastActivationTime); + pluginSvcVersionInfo.setGdsDownloadedVersion(downloadedVersion); + pluginSvcVersionInfo.setGdsDownloadTime(new Date().getTime()); + break; } createOrUpdatePluginInfo(pluginSvcVersionInfo, entityType , httpCode, clusterName); @@ -781,14 +787,9 @@ public class AssetMgr extends AssetMgrBase { isTagVersionResetNeeded = rangerDaoManager.getXXService().findAssociatedTagService(pluginInfo.getServiceName()) == null; break; case RangerPluginInfo.ENTITY_TYPE_TAGS: - isTagVersionResetNeeded = false; - break; case RangerPluginInfo.ENTITY_TYPE_ROLES: - isTagVersionResetNeeded = false; - break; case RangerPluginInfo.ENTITY_TYPE_USERSTORE: - isTagVersionResetNeeded = false; - break; + case RangerPluginInfo.ENTITY_TYPE_GDS: default: isTagVersionResetNeeded = false; break; @@ -805,7 +806,8 @@ public class AssetMgr extends AssetMgrBase { if ((isPolicyDownloadRequest(entityType) && (pluginInfo.getPolicyActiveVersion() == null || pluginInfo.getPolicyActiveVersion() == -1)) || (isTagDownloadRequest(entityType) && (pluginInfo.getTagActiveVersion() == null || pluginInfo.getTagActiveVersion() == -1)) || (isRoleDownloadRequest(entityType) && (pluginInfo.getRoleActiveVersion() == null || pluginInfo.getRoleActiveVersion() == -1)) - || (isUserStoreDownloadRequest(entityType) && (pluginInfo.getUserStoreActiveVersion() == null || pluginInfo.getUserStoreActiveVersion() == -1))) { + || (isUserStoreDownloadRequest(entityType) && (pluginInfo.getUserStoreActiveVersion() == null || pluginInfo.getUserStoreActiveVersion() == -1)) + || (isGdsDownloadRequest(entityType) && (pluginInfo.getGdsActiveVersion() == null || pluginInfo.getGdsActiveVersion() == -1))) { commitWork = new Runnable() { @Override public void run() { @@ -876,11 +878,16 @@ public class AssetMgr extends AssetMgrBase { // This is our best guess of when role may have been downloaded pluginInfo.setRoleDownloadTime(pluginInfo.getRoleActivationTime()); } - } else { + } else if (isUserStoreDownloadRequest(entityType)) { if (pluginInfo.getUserStoreDownloadTime() != null && pluginInfo.getUserStoreDownloadedVersion().equals(pluginInfo.getUserStoreActiveVersion())) { // This is our best guess of when users and groups may have been downloaded pluginInfo.setUserStoreDownloadTime(pluginInfo.getUserStoreActivationTime()); } + } else if (isGdsDownloadRequest(entityType)) { + if (pluginInfo.getGdsDownloadTime() != null && pluginInfo.getGdsDownloadedVersion().equals(pluginInfo.getGdsActiveVersion())) { + // This is our best guess of when GDS info may have been downloaded + pluginInfo.setGdsDownloadTime(pluginInfo.getGdsActivationTime()); + } } pluginInfo.setAdminCapabilities(adminCapabilities); @@ -987,7 +994,7 @@ public class AssetMgr extends AssetMgrBase { dbObj.setRoleActivationTime(lastRoleActivationTime); needsUpdating = true; } - } else { + } else if (isUserStoreDownloadRequest(entityType)) { if (dbObj.getUserStoreDownloadedVersion() == null || !dbObj.getUserStoreDownloadedVersion().equals(pluginInfo.getUserStoreDownloadedVersion())) { dbObj.setUserStoreDownloadedVersion(pluginInfo.getUserStoreDownloadedVersion()); dbObj.setUserStoreDownloadTime(pluginInfo.getUserStoreDownloadTime()); @@ -1011,6 +1018,30 @@ public class AssetMgr extends AssetMgrBase { dbObj.setUserStoreActivationTime(lastUserStoreActivationTime); needsUpdating = true; } + } else if (isGdsDownloadRequest(entityType)) { + if (dbObj.getGdsDownloadedVersion() == null || !dbObj.getGdsDownloadedVersion().equals(pluginInfo.getGdsDownloadedVersion())) { + dbObj.setGdsDownloadedVersion(pluginInfo.getGdsDownloadedVersion()); + dbObj.setGdsDownloadTime(pluginInfo.getGdsDownloadTime()); + needsUpdating = true; + } + + Long lastKnownGdsVersion = pluginInfo.getGdsActiveVersion(); + Long lastGdsActivationTime = pluginInfo.getGdsActivationTime(); + + if (lastKnownGdsVersion != null && lastKnownGdsVersion == -1) { + dbObj.setGdsDownloadTime(pluginInfo.getGdsDownloadTime()); + needsUpdating = true; + } + + if (lastKnownGdsVersion != null && lastKnownGdsVersion > 0 && (dbObj.getGdsActiveVersion() == null || !dbObj.getGdsActiveVersion().equals(lastKnownGdsVersion))) { + dbObj.setGdsActiveVersion(lastKnownGdsVersion); + needsUpdating = true; + } + + if (lastGdsActivationTime != null && lastGdsActivationTime > 0 && (dbObj.getGdsActivationTime() == null || !dbObj.getGdsActivationTime().equals(lastGdsActivationTime))) { + dbObj.setGdsActivationTime(lastGdsActivationTime); + needsUpdating = true; + } } if (isTagVersionResetNeeded) { @@ -1360,4 +1391,8 @@ public class AssetMgr extends AssetMgrBase { private boolean isUserStoreDownloadRequest(int entityType) { return entityType == RangerPluginInfo.ENTITY_TYPE_USERSTORE; } + + private boolean isGdsDownloadRequest(int entityType) { + return entityType == RangerPluginInfo.ENTITY_TYPE_GDS; + } } diff --git a/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java b/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java index 1c312e5e9..043d00b59 100755 --- a/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/GdsREST.java @@ -21,6 +21,7 @@ package org.apache.ranger.rest; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.apache.ranger.biz.AssetMgr; import org.apache.ranger.biz.GdsDBStore; import org.apache.ranger.biz.RangerBizUtil; import org.apache.ranger.common.RESTErrorUtil; @@ -32,6 +33,7 @@ import org.apache.ranger.plugin.model.RangerGds.RangerDataShareInDataset; import org.apache.ranger.plugin.model.RangerGds.RangerDataShare; import org.apache.ranger.plugin.model.RangerGds.RangerProject; import org.apache.ranger.plugin.model.RangerGds.RangerSharedResource; +import org.apache.ranger.plugin.model.RangerPluginInfo; import org.apache.ranger.plugin.model.RangerPolicy; import org.apache.ranger.plugin.model.RangerGds.DatasetSummary; import org.apache.ranger.plugin.model.RangerGds.DataShareSummary; @@ -103,6 +105,9 @@ public class GdsREST { @Autowired ServiceUtil serviceUtil; + @Autowired + AssetMgr assetMgr; + @POST @Path("/dataset") @@ -1500,9 +1505,10 @@ public class GdsREST { @Context HttpServletRequest request) { LOG.debug("==> GdsREST.getServiceGdsInfoIfUpdated(serviceName={}, lastKnownVersion={}, lastActivationTime={}, pluginId={}, clusterName={}, pluginCapabilities{})", serviceName, lastKnownVersion, lastActivationTime, pluginId, clusterName, pluginCapabilities); - ServiceGdsInfo ret = null; - int httpCode = HttpServletResponse.SC_OK; - String logMsg = null; + ServiceGdsInfo ret = null; + int httpCode = HttpServletResponse.SC_OK; + Long downloadedVersion = null; + String logMsg = null; try { bizUtil.failUnauthenticatedDownloadIfNotAllowed(); @@ -1513,8 +1519,11 @@ public class GdsREST { ret = gdsStore.getGdsInfoIfUpdated(serviceName, lastKnownVersion); if (ret == null) { - httpCode = HttpServletResponse.SC_NOT_MODIFIED; - logMsg = "No change since last update"; + downloadedVersion = lastKnownVersion; + httpCode = HttpServletResponse.SC_NOT_MODIFIED; + logMsg = "No change since last update"; + } else { + downloadedVersion = ret.getGdsVersion(); } } } catch (WebApplicationException webException) { @@ -1527,6 +1536,8 @@ public class GdsREST { LOG.error("GdsREST.getServiceGdsInfoIfUpdated(serviceName={}, lastKnownVersion={}, lastActivationTime={}, pluginId={}, clusterName={}, pluginCapabilities{})", serviceName, lastKnownVersion, lastActivationTime, pluginId, clusterName, pluginCapabilities, e); } + assetMgr.createPluginInfo(serviceName, pluginId, request, RangerPluginInfo.ENTITY_TYPE_GDS, downloadedVersion, lastKnownVersion, lastActivationTime, httpCode, clusterName, pluginCapabilities); + if (httpCode != HttpServletResponse.SC_OK) { boolean logError = httpCode != HttpServletResponse.SC_NOT_MODIFIED; @@ -1550,9 +1561,10 @@ public class GdsREST { @Context HttpServletRequest request) { LOG.debug("==> GdsREST.getSecureServiceGdsInfoIfUpdated(serviceName={}, lastKnownVersion={}, lastActivationTime={}, pluginId={}, clusterName={}, pluginCapabilities{})", serviceName, lastKnownVersion, lastActivationTime, pluginId, clusterName, pluginCapabilities); - ServiceGdsInfo ret = null; - int httpCode = HttpServletResponse.SC_OK; - String logMsg = null; + ServiceGdsInfo ret = null; + int httpCode = HttpServletResponse.SC_OK; + Long downloadedVersion = null; + String logMsg = null; try { bizUtil.failUnauthenticatedDownloadIfNotAllowed(); @@ -1563,8 +1575,11 @@ public class GdsREST { ret = gdsStore.getGdsInfoIfUpdated(serviceName, lastKnownVersion); if (ret == null) { - httpCode = HttpServletResponse.SC_NOT_MODIFIED; - logMsg = "No change since last update"; + downloadedVersion = lastKnownVersion; + httpCode = HttpServletResponse.SC_NOT_MODIFIED; + logMsg = "No change since last update"; + } else { + downloadedVersion = ret.getGdsVersion(); } } } catch (WebApplicationException webException) { @@ -1577,6 +1592,8 @@ public class GdsREST { LOG.error("GdsREST.getServiceGdsInfoIfUpdated(serviceName={}, lastKnownVersion={}, lastActivationTime={}, pluginId={}, clusterName={}, pluginCapabilities{})", serviceName, lastKnownVersion, lastActivationTime, pluginId, clusterName, pluginCapabilities, e); } + assetMgr.createPluginInfo(serviceName, pluginId, request, RangerPluginInfo.ENTITY_TYPE_GDS, downloadedVersion, lastKnownVersion, lastActivationTime, httpCode, clusterName, pluginCapabilities); + if (httpCode != HttpServletResponse.SC_OK) { boolean logError = httpCode != HttpServletResponse.SC_NOT_MODIFIED; 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 3a4746def..9dc26ceb7 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 @@ -294,8 +294,13 @@ public class RangerPluginInfoService { Date lastPolicyUpdateTime = xxServiceVersionInfo.getPolicyUpdateTime(); Long latestTagVersion = xxServiceVersionInfo.getTagVersion(); Date lastTagUpdateTime = xxServiceVersionInfo.getTagUpdateTime(); + Long latestGdsVersion = xxServiceVersionInfo.getGdsVersion(); + Date lastGdsUpdateTime = xxServiceVersionInfo.getGdsUpdateTime(); + ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_POLICY_VERSION, Long.toString(latestPolicyVersion)); ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_POLICY_UPDATE_TIME, Long.toString(lastPolicyUpdateTime.getTime())); + ret.put(RangerPluginInfo.RANGER_ADMIN_LATEST_GDS_VERSION, Long.toString(latestGdsVersion)); + ret.put(RangerPluginInfo.RANGER_ADMIN_LAST_GDS_UPDATE_TIME, Long.toString(lastGdsUpdateTime.getTime())); 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()));