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

Reply via email to