This is an automated email from the ASF dual-hosted git repository.

pradeep pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new fde454390 RANGER-4353: Introduce option in Ranger to control retention 
period of x_trx_log table data
fde454390 is described below

commit fde454390e99cb60db125a0ba2241e9807f77b39
Author: Pradeep AgrawaL <[email protected]>
AuthorDate: Mon Aug 21 16:41:17 2023 +0530

    RANGER-4353: Introduce option in Ranger to control retention period of 
x_trx_log table data
    
    Change-Id: Icd3bdade26181afaee2abb54fb866e10a24217e4
---
 .../java/org/apache/ranger/biz/ServiceDBStore.java | 34 ++++++++++++++++++++++
 .../org/apache/ranger/db/XXAuthSessionDao.java     | 17 ++++++-----
 .../java/org/apache/ranger/db/XXTrxLogDao.java     | 12 ++++++++
 .../java/org/apache/ranger/rest/ServiceREST.java   |  8 +++--
 .../main/resources/META-INF/jpa_named_queries.xml  |  7 +++++
 .../main/resources/conf.dist/ranger-admin-site.xml |  9 ++++++
 6 files changed, 78 insertions(+), 9 deletions(-)

diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java 
b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
index ed1ea0376..9b02229e1 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java
@@ -253,6 +253,8 @@ public class ServiceDBStore extends AbstractServiceStore {
        public static Integer TAG_RETENTION_PERIOD_IN_DAYS = 3;
        public static boolean SUPPORTS_PURGE_LOGIN_RECORDS = false;
        public static Integer LOGIN_RECORDS_RETENTION_PERIOD_IN_DAYS = 0;
+       public static boolean SUPPORTS_PURGE_TRANSACTION_RECORDS = false;
+       public static Integer TRANSACTION_RECORDS_RETENTION_PERIOD_IN_DAYS = 0;
 
        private static final String RANGER_PLUGIN_CONFIG_PREFIX = 
"ranger.plugin.";
        public static final String RANGER_PLUGIN_AUDIT_FILTERS  = 
"ranger.plugin.audit.filters";
@@ -398,6 +400,8 @@ public class ServiceDBStore extends AbstractServiceStore {
 
                                        SUPPORTS_PURGE_LOGIN_RECORDS           
= config.getBoolean("ranger.admin.init.purge.login_records", false);
                                        LOGIN_RECORDS_RETENTION_PERIOD_IN_DAYS 
= config.getInt("ranger.admin.init.purge.login_records.retention.days", 0);
+                                       SUPPORTS_PURGE_TRANSACTION_RECORDS      
     = config.getBoolean("ranger.admin.init.purge.transaction_records", false);
+                                       
TRANSACTION_RECORDS_RETENTION_PERIOD_IN_DAYS = 
config.getInt("ranger.admin.init.purge.transaction_records.retention.days", 0);
 
                                        isRolesDownloadedByService   = 
config.getBoolean("ranger.support.for.service.specific.role.download", false);
                                        SUPPORTS_IN_PLACE_POLICY_UPDATES    = 
SUPPORTS_POLICY_DELTAS && config.getBoolean("ranger.admin" + 
RangerCommonConstants.RANGER_ADMIN_SUFFIX_IN_PLACE_POLICY_UPDATES, 
RangerCommonConstants.RANGER_ADMIN_SUFFIX_IN_PLACE_POLICY_UPDATES_DEFAULT);
@@ -407,6 +411,8 @@ public class ServiceDBStore extends AbstractServiceStore {
                                        
LOG.info("TAG_RETENTION_PERIOD_IN_DAYS=" + TAG_RETENTION_PERIOD_IN_DAYS);
                                        
LOG.info("SUPPORTS_PURGE_LOGIN_RECORDS=" + SUPPORTS_PURGE_LOGIN_RECORDS);
                                        
LOG.info("LOGIN_RECORDS_RETENTION_PERIOD_IN_DAYS=" + 
LOGIN_RECORDS_RETENTION_PERIOD_IN_DAYS);
+                                       
LOG.info("SUPPORTS_PURGE_TRANSACTION_RECORDS=" + 
SUPPORTS_PURGE_TRANSACTION_RECORDS);
+                                       
LOG.info("TRANSACTION_RECORDS_RETENTION_PERIOD_IN_DAYS=" + 
TRANSACTION_RECORDS_RETENTION_PERIOD_IN_DAYS);
                                        LOG.info("isRolesDownloadedByService=" 
+ isRolesDownloadedByService);
                                        
LOG.info("SUPPORTS_IN_PLACE_POLICY_UPDATES=" + 
SUPPORTS_IN_PLACE_POLICY_UPDATES);
 
@@ -427,6 +433,9 @@ public class ServiceDBStore extends AbstractServiceStore {
                                                                if 
(SUPPORTS_PURGE_LOGIN_RECORDS) {
                                                                        
removeAuthSessions(LOGIN_RECORDS_RETENTION_PERIOD_IN_DAYS);
                                                                }
+                                                               if 
(SUPPORTS_PURGE_TRANSACTION_RECORDS) {
+                                                                       
removeTransactionLogs(TRANSACTION_RECORDS_RETENTION_PERIOD_IN_DAYS);
+                                                               }
                                                                
//createUnzonedSecurityZone();
                                                                initRMSDaos();
                                                                return null;
@@ -5342,6 +5351,31 @@ public class ServiceDBStore extends AbstractServiceStore 
{
                }
        }
 
+       public void removeTransactionLogs(int retentionInDays) {
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("==> removeTransactionLogs(" + 
retentionInDays + ")");
+               }
+
+               if (retentionInDays > 0) {
+                       long rowsCount = daoMgr.getXXTrxLog().getAllCount();
+                       long rowsDeleted = 
daoMgr.getXXTrxLog().deleteOlderThan(retentionInDays);
+                       LOG.info("Deleted " + rowsDeleted + " records from 
x_trx_log that are older than " + retentionInDays + " days");
+                       List<XXTrxLog> trxLogList = new ArrayList<XXTrxLog>();
+                       XXTrxLog xxTrxLog = new XXTrxLog();
+                       xxTrxLog.setAction("Deleted Transaction records");
+                       
xxTrxLog.setObjectClassType(AppConstants.CLASS_TYPE_AUTH_SESS);
+                       xxTrxLog.setPreviousValue("Total Records : "+rowsCount);
+                       xxTrxLog.setNewValue("Deleted Records : "+rowsDeleted);
+                       trxLogList.add(xxTrxLog);
+                       bizUtil.createTrxLog(trxLogList);
+               }
+
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("<== removeTransactionLogs(" + 
retentionInDays + ")");
+
+               }
+       }
+
     public List<String> getPolicyLabels(SearchFilter searchFilter) {
         if (LOG.isDebugEnabled()) {
                 LOG.debug("==> ServiceDBStore.getPolicyLabels()");
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXAuthSessionDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXAuthSessionDao.java
index f69b8d2bb..645c27cbd 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXAuthSessionDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXAuthSessionDao.java
@@ -95,14 +95,17 @@ public class XXAuthSessionDao extends 
BaseDao<XXAuthSession> {
                batchDeleteByIds("XXAuthSession.deleteByIds", ids, "ids");
        }
 
-    public long deleteOlderThan(int olderThanInDays) {
-        Date since = new Date(System.currentTimeMillis() - 
TimeUnit.DAYS.toMillis(olderThanInDays));
-        LOG.info("Deleting x_auth_sess records that are older than " + 
olderThanInDays + " days, that is, older than " + since);
+       public long deleteOlderThan(int olderThanInDays) {
+               Date since = new Date(System.currentTimeMillis() - 
TimeUnit.DAYS.toMillis(olderThanInDays));
 
-        long ret = 
getEntityManager().createNamedQuery("XXAuthSession.deleteOlderThan").setParameter("olderThan",
 since).executeUpdate();
+               LOG.info("Deleting x_auth_sess records that are older than " + 
olderThanInDays + " days, that is, older than " + since);
+               long ret = 
getEntityManager().createNamedQuery("XXAuthSession.deleteOlderThan").setParameter("olderThan",
 since).executeUpdate();
+               LOG.info("Deleted " + ret + " x_auth_sess records");
 
-        LOG.info("Deleted " + ret + " x_auth_sess records");
-        return ret;
-    }
+               LOG.info("Updating x_trx_log.sess_id with null which are older 
than " + olderThanInDays + " days, that is, older than " + since);
+               long updated = 
getEntityManager().createNamedQuery("XXTrxLog.updateSessIdWithNull").setParameter("olderThan",
 since).executeUpdate();
+               LOG.info("Updated " + updated + " x_trx_log records");
+               return ret;
+       }
 }
 
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXTrxLogDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXTrxLogDao.java
index a83e91f5b..13372ab4a 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXTrxLogDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXTrxLogDao.java
@@ -20,7 +20,9 @@
  package org.apache.ranger.db;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 import javax.persistence.NoResultException;
 
@@ -102,5 +104,15 @@ public class XXTrxLogDao extends BaseDao<XXTrxLog> {
                return rowAffected;
        }
 
+    public long deleteOlderThan(int olderThanInDays) {
+        Date since = new Date(System.currentTimeMillis() - 
TimeUnit.DAYS.toMillis(olderThanInDays));
+        logger.info("Deleting x_trx_log records that are older than " + 
olderThanInDays + " days, that is, older than " + since);
+
+        long ret = 
getEntityManager().createNamedQuery("XXTrxLog.deleteOlderThan").setParameter("olderThan",
 since).executeUpdate();
+
+        logger.info("Deleted " + ret + " x_trx_log records");
+        return ret;
+    }
+
 }
 
diff --git 
a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java 
b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
index d2d76733e..de8a15823 100644
--- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
+++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java
@@ -3951,7 +3951,7 @@ public class ServiceREST {
                        LOG.debug("==> ServiceREST.purgeRecords(" + recordType 
+ ", " + olderThan + ")");
                }
 
-               if (StringUtils.isEmpty(recordType) || 
!"login_records".equalsIgnoreCase(recordType)) {
+               if (!"login_records".equalsIgnoreCase(recordType) && 
!"trx_records".equalsIgnoreCase(recordType)) {
                        throw 
restErrorUtil.createRESTException(HttpServletResponse.SC_BAD_REQUEST, "Invalid 
record type - " + recordType, true);
                }
 
@@ -3966,7 +3966,11 @@ public class ServiceREST {
                                perf = RangerPerfTracer.getPerfTracer(PERF_LOG, 
"ServiceREST.purgeRecords(recordType=" + recordType + ", olderThan=" + 
olderThan + ")");
                        }
 
-                       svcStore.removeAuthSessions(olderThan);
+                       if ("login_records".equalsIgnoreCase(recordType)) {
+                               svcStore.removeAuthSessions(olderThan);
+                       } else if ("trx_records".equalsIgnoreCase(recordType)) {
+                               svcStore.removeTransactionLogs(olderThan);
+                       }
 
                } catch (WebApplicationException excp) {
                        throw excp;
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 1e8e4e2c5..cf6ebad95 100755
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -1529,6 +1529,13 @@
                          AND obj.attributeName = :attrName
                </query>
     </named-query>
+       <named-query name="XXTrxLog.deleteOlderThan">
+               <query>delete from XXTrxLog obj where obj.createTime &lt; 
:olderThan</query>
+       </named-query>
+       <named-query name="XXTrxLog.updateSessIdWithNull">
+               <query>UPDATE XXTrxLog obj SET obj.sessionId = null WHERE 
obj.createTime &lt; :olderThan</query>
+       </named-query>
+
        <named-query name="XXAuthSession.getAuthSessionByUserId">
                <query>SELECT obj FROM XXAuthSession obj WHERE obj.userId = 
:userId
                </query>
diff --git a/security-admin/src/main/resources/conf.dist/ranger-admin-site.xml 
b/security-admin/src/main/resources/conf.dist/ranger-admin-site.xml
index d6bf174e9..f3dbb777b 100644
--- a/security-admin/src/main/resources/conf.dist/ranger-admin-site.xml
+++ b/security-admin/src/main/resources/conf.dist/ranger-admin-site.xml
@@ -393,4 +393,13 @@
                        
<name>ranger.admin.init.purge.login_records.retention.days</name>
                        <value>0</value>
                </property>
+               <property>
+                       <name>ranger.admin.init.purge.transaction_records</name>
+                       <value>false</value>
+               </property>
+               <property>
+                       
<name>ranger.admin.init.purge.transaction_records.retention.days
+                       </name>
+                       <value>0</value>
+               </property>
 </configuration>

Reply via email to