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

Reply via email to