Repository: incubator-ranger Updated Branches: refs/heads/tag-policy 2b3482600 -> 3afb0d69e
RANGER-559 : Fix ID preservation for MSSQL Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/6f903e3a Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/6f903e3a Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/6f903e3a Branch: refs/heads/tag-policy Commit: 6f903e3ab0394c1c98abc014362a317eea7e79ea Parents: e73fe78 Author: Gautam Borad <[email protected]> Authored: Thu Jun 18 22:25:06 2015 +0530 Committer: Madhan Neethiraj <[email protected]> Committed: Thu Jun 18 17:56:25 2015 -0400 ---------------------------------------------------------------------- security-admin/scripts/db_setup.py | 12 ++- .../org/apache/ranger/biz/ServiceDBStore.java | 14 ++++ .../org/apache/ranger/common/db/BaseDao.java | 34 ++++++++ .../ranger/solr/SolrAccessAuditsService.java | 9 ++ .../src/main/webapp/WEB-INF/db_patch.log4j.xml | 87 ++++++++++++++++++++ .../apache/ranger/biz/TestServiceDBStore.java | 26 +++--- 6 files changed, 168 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/6f903e3a/security-admin/scripts/db_setup.py ---------------------------------------------------------------------- diff --git a/security-admin/scripts/db_setup.py b/security-admin/scripts/db_setup.py index 67f2a43..35f4dc9 100644 --- a/security-admin/scripts/db_setup.py +++ b/security-admin/scripts/db_setup.py @@ -327,6 +327,7 @@ class MysqlConf(BaseDB): version = "" className = "" app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") javaFiles = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch") if not os.path.exists(javaFiles): @@ -366,7 +367,7 @@ class MysqlConf(BaseDB): path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) elif os_name == "WINDOWS": path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) - get_cmd = "%s -cp %s org.apache.ranger.patch.%s"%(self.JAVA_BIN,path,className) + get_cmd = "%s -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.%s"%(self.JAVA_BIN,ranger_log,path,className) if os_name == "LINUX": ret = subprocess.call(shlex.split(get_cmd)) elif os_name == "WINDOWS": @@ -591,6 +592,7 @@ class OracleConf(BaseDB): version = "" className = "" app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") javaFiles = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch") if not os.path.exists(javaFiles): @@ -630,7 +632,7 @@ class OracleConf(BaseDB): path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) elif os_name == "WINDOWS": path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) - get_cmd = "%s -cp %s org.apache.ranger.patch.%s"%(self.JAVA_BIN,path,className) + get_cmd = "%s -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.%s"%(self.JAVA_BIN,ranger_log,path,className) if os_name == "LINUX": ret = subprocess.call(shlex.split(get_cmd)) elif os_name == "WINDOWS": @@ -838,6 +840,7 @@ class PostgresConf(BaseDB): version = "" className = "" app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") javaFiles = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch") if not os.path.exists(javaFiles): @@ -877,7 +880,7 @@ class PostgresConf(BaseDB): path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s")%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) elif os_name == "WINDOWS": path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s")%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) - get_cmd = "%s -cp %s org.apache.ranger.patch.%s"%(self.JAVA_BIN,path,className) + get_cmd = "%s -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.%s"%(self.JAVA_BIN,ranger_log,path,className) if os_name == "LINUX": ret = subprocess.call(shlex.split(get_cmd)) elif os_name == "WINDOWS": @@ -1073,6 +1076,7 @@ class SqlServerConf(BaseDB): version = "" className = "" app_home = os.path.join(RANGER_ADMIN_HOME,"ews","webapp") + ranger_log = os.path.join(RANGER_ADMIN_HOME,"ews","logs") javaFiles = os.path.join(app_home,"WEB-INF","classes","org","apache","ranger","patch") if not os.path.exists(javaFiles): @@ -1112,7 +1116,7 @@ class SqlServerConf(BaseDB): path = os.path.join("%s","WEB-INF","classes","conf:%s","WEB-INF","classes","lib","*:%s","WEB-INF",":%s","META-INF",":%s","WEB-INF","lib","*:%s","WEB-INF","classes",":%s","WEB-INF","classes","META-INF:%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) elif os_name == "WINDOWS": path = os.path.join("%s","WEB-INF","classes","conf;%s","WEB-INF","classes","lib","*;%s","WEB-INF",";%s","META-INF",";%s","WEB-INF","lib","*;%s","WEB-INF","classes",";%s","WEB-INF","classes","META-INF;%s" )%(app_home ,app_home ,app_home, app_home, app_home, app_home ,app_home ,self.SQL_CONNECTOR_JAR) - get_cmd = "%s -cp %s org.apache.ranger.patch.%s"%(self.JAVA_BIN,path,className) + get_cmd = "%s -Dlogdir=%s -Dlog4j.configuration=db_patch.log4j.xml -cp %s org.apache.ranger.patch.%s"%(self.JAVA_BIN,ranger_log,path,className) if os_name == "LINUX": ret = subprocess.call(shlex.split(get_cmd)) elif os_name == "WINDOWS": http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/6f903e3a/security-admin/src/main/java/org/apache/ranger/biz/ServiceDBStore.java ---------------------------------------------------------------------- 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 ff04d3f..326cae0 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 @@ -262,9 +262,13 @@ public class ServiceDBStore implements ServiceStore { if (populateExistingBaseFields) { svcDefServiceWithAssignedId.setPopulateExistingBaseFields(true); + daoMgr.getXXServiceDef().setIdentityInsert(true); + svcDefServiceWithAssignedId.create(serviceDef); + svcDefServiceWithAssignedId.setPopulateExistingBaseFields(false); daoMgr.getXXServiceDef().updateSequence(); + daoMgr.getXXServiceDef().setIdentityInsert(false); } else { // following fields will be auto populated serviceDef.setId(null); @@ -1009,7 +1013,12 @@ public class ServiceDBStore implements ServiceStore { if (populateExistingBaseFields) { svcServiceWithAssignedId.setPopulateExistingBaseFields(true); + daoMgr.getXXService().setIdentityInsert(true); + service = svcServiceWithAssignedId.create(service); + + daoMgr.getXXService().setIdentityInsert(false); + daoMgr.getXXService().updateSequence(); svcServiceWithAssignedId.setPopulateExistingBaseFields(false); createDefaultPolicy = false; } else { @@ -1359,7 +1368,12 @@ public class ServiceDBStore implements ServiceStore { if(populateExistingBaseFields) { assignedIdPolicyService.setPopulateExistingBaseFields(true); + daoMgr.getXXPolicy().setIdentityInsert(true); + policy = assignedIdPolicyService.create(policy); + + daoMgr.getXXPolicy().setIdentityInsert(false); + daoMgr.getXXPolicy().updateSequence(); assignedIdPolicyService.setPopulateExistingBaseFields(false); } else { policy = policyService.create(policy); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/6f903e3a/security-admin/src/main/java/org/apache/ranger/common/db/BaseDao.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/common/db/BaseDao.java b/security-admin/src/main/java/org/apache/ranger/common/db/BaseDao.java index bfa4c40..aaa4fa5 100644 --- a/security-admin/src/main/java/org/apache/ranger/common/db/BaseDao.java +++ b/security-admin/src/main/java/org/apache/ranger/common/db/BaseDao.java @@ -23,12 +23,15 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; +import java.sql.Connection; +import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.Query; +import javax.persistence.Table; import javax.persistence.TypedQuery; import org.apache.log4j.Logger; @@ -231,4 +234,35 @@ public abstract class BaseDao<T> { } + public void setIdentityInsert(boolean identityInsert) { + if (RangerBizUtil.getDBFlavor() != AppConstants.DB_FLAVOR_SQLSERVER) { + logger.debug("Ignoring BaseDao.setIdentityInsert(). This should be executed if DB flavor is sqlserver."); + return; + } + + EntityManager entityMgr = getEntityManager(); + + String identityInsertStr; + if (identityInsert) { + identityInsertStr = "ON"; + } else { + identityInsertStr = "OFF"; + } + + Table table = tClass.getAnnotation(Table.class); + + if(table == null) { + throw new NullPointerException("Required annotation `Table` not found"); + } + + String tableName = table.name(); + + Connection conn = entityMgr.unwrap(Connection.class); + try { + conn.createStatement().execute("SET IDENTITY_INSERT " + tableName + " " + identityInsertStr); + } catch (SQLException e) { + logger.error("Error while settion identity_insert " + identityInsertStr, e); + } + } + } http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/6f903e3a/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java b/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java index ad19822..5fc45d2 100644 --- a/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java +++ b/security-admin/src/main/java/org/apache/ranger/solr/SolrAccessAuditsService.java @@ -32,6 +32,8 @@ import org.apache.ranger.common.StringUtil; import org.apache.ranger.common.SearchField.DATA_TYPE; import org.apache.ranger.common.SearchField.SEARCH_TYPE; import org.apache.ranger.common.SortField.SORT_ORDER; +import org.apache.ranger.db.RangerDaoManager; +import org.apache.ranger.entity.XXServiceDef; import org.apache.ranger.view.VXAccessAudit; import org.apache.ranger.view.VXAccessAuditList; import org.apache.ranger.view.VXLong; @@ -60,6 +62,9 @@ public class SolrAccessAuditsService { @Autowired StringUtil stringUtil; + @Autowired + RangerDaoManager daoManager; + public List<SortField> sortFields = new ArrayList<SortField>(); public List<SearchField> searchFields = new ArrayList<SearchField>(); @@ -221,6 +226,10 @@ public class SolrAccessAuditsService { value = doc.getFieldValue("repoType"); if (value != null) { accessAudit.setRepoType(solrUtil.toInt(value)); + XXServiceDef xServiceDef = daoManager.getXXServiceDef().getById((long) accessAudit.getRepoType()); + if (xServiceDef != null) { + accessAudit.setServiceType(xServiceDef.getName()); + } } value = doc.getFieldValue("resType"); if (value != null) { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/6f903e3a/security-admin/src/main/webapp/WEB-INF/db_patch.log4j.xml ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/WEB-INF/db_patch.log4j.xml b/security-admin/src/main/webapp/WEB-INF/db_patch.log4j.xml new file mode 100644 index 0000000..1aafb07 --- /dev/null +++ b/security-admin/src/main/webapp/WEB-INF/db_patch.log4j.xml @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> + +<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false"> + + <appender name="xa_log_appender" class="org.apache.log4j.DailyRollingFileAppender"> + <param name="file" value="${logdir}/ranger_db_patch.log" /> + <param name="datePattern" value="'.'yyyy-MM-dd" /> + <param name="append" value="true" /> + <layout class="org.apache.log4j.PatternLayout"> + <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> + </layout> + </appender> + + <appender name="sql_appender" class="org.apache.log4j.DailyRollingFileAppender"> + <param name="file" value="${logdir}/xa_portal_sql_db_patch.log" /> + <param name="datePattern" value="'.'yyyy-MM-dd" /> + <param name="append" value="true" /> + <layout class="org.apache.log4j.PatternLayout"> + <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n" /> + </layout> + </appender> + + <category name="org.springframework" additivity="false"> + <priority value="warn" /> + <appender-ref ref="xa_log_appender" /> + </category> + + <category name="org.hibernate.SQL" additivity="false"> + <priority value="warn" /> + <appender-ref ref="sql_appender" /> + </category> + <category name="jdbc.sqlonly" additivity="false"> + <priority value="fatal" /> + <appender-ref ref="sql_appender" /> + </category> + + <category name="jdbc.sqltiming" additivity="false"> + <priority value="warn" /> + <appender-ref ref="sql_appender" /> + </category> + <category name="jdbc.audit" additivity="false"> + <priority value="fatal" /> + <appender-ref ref="sql_appender" /> + </category> + <category name="jdbc.resultset" additivity="false"> + <priority value="fatal" /> + <appender-ref ref="sql_appender" /> + </category> + + <category name="jdbc.connection" additivity="false"> + <priority value="fatal" /> + <appender-ref ref="sql_appender" /> + </category> + + <category name="org.apache.ranger" additivity="false"> + <priority value="info" /> + <appender-ref ref="xa_log_appender" /> + </category> + + <category name="xa" additivity="false"> + <priority value="info" /> + <appender-ref ref="xa_log_appender" /> + </category> + + <root> + <priority value="warn" /> + <appender-ref ref="xa_log_appender" /> + </root> + +</log4j:configuration> http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/6f903e3a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java ---------------------------------------------------------------------- diff --git a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java index 6f95a8a..e13b862 100644 --- a/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java +++ b/security-admin/src/test/java/org/apache/ranger/biz/TestServiceDBStore.java @@ -1160,13 +1160,17 @@ public class TestServiceDBStore { @Test public void test19createService() throws Exception { - XXServiceDao xServiceDao = Mockito.mock(XXServiceDao.class); + XXServiceDao xServiceDao = Mockito.mock(XXServiceDao.class); XXServiceConfigMapDao xServiceConfigMapDao = Mockito .mock(XXServiceConfigMapDao.class); XXUserDao xUserDao = Mockito.mock(XXUserDao.class); XXServiceConfigDefDao xServiceConfigDefDao = Mockito .mock(XXServiceConfigDefDao.class); XXService xService = Mockito.mock(XXService.class); + XXService xService2 = new XXService(); + xService2.setId(1L); + xService2.setName("Test"); + xService2.setType(1L); XXUser xUser = Mockito.mock(XXUser.class); RangerService rangerService = rangerService(); @@ -1183,8 +1187,7 @@ public class TestServiceDBStore { Mockito.when(xServiceConfigDefDao.findByServiceDefName(userName)) .thenReturn(svcConfDefList); - Mockito.when(svcServiceWithAssignedId.create(rangerService)) - .thenReturn(rangerService); + Mockito.when(svcService.create(rangerService)).thenReturn(rangerService); Mockito.when(daoManager.getXXService()).thenReturn(xServiceDao); Mockito.when(xServiceDao.getById(rangerService.getId())).thenReturn( @@ -1207,18 +1210,21 @@ public class TestServiceDBStore { Mockito.when(svcService.getPopulatedViewObject(xService)).thenReturn( rangerService); - serviceDBStore.setPopulateExistingBaseFields(true); + Mockito.when(daoManager.getXXService()).thenReturn(xServiceDao); + Mockito.when(xServiceDao.getById(Mockito.anyLong())).thenReturn(xService2); Mockito.when( rangerAuditFields.populateAuditFields( Mockito.isA(XXServiceConfigMap.class), Mockito.isA(XXService.class))).thenReturn(xConfMap); - - RangerService dbRangerService = serviceDBStore - .createService(rangerService); - serviceDBStore.setPopulateExistingBaseFields(false); - Assert.assertNotNull(dbRangerService); - Mockito.verify(daoManager).getXXService(); + + RangerServiceDef ran = new RangerServiceDef(); + ran.setName("Test"); + Mockito.when(serviceDefService.read(1L)).thenReturn(ran); + + serviceDBStore.createService(rangerService); + + Mockito.verify(daoManager, Mockito.atLeast(1)).getXXService(); Mockito.verify(daoManager).getXXServiceConfigMap(); }
