RANGER-537: next-ID sequence updated after creating service-def with 
pre-defined ID


Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/0512610e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/0512610e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/0512610e

Branch: refs/heads/ranger-0.5
Commit: 0512610e19c69188ca9f0e44a0f7701888c1b404
Parents: e3bc661
Author: Madhan Neethiraj <[email protected]>
Authored: Mon Jun 8 00:16:15 2015 -0700
Committer: Madhan Neethiraj <[email protected]>
Committed: Mon Jun 8 00:16:15 2015 -0700

----------------------------------------------------------------------
 .../org/apache/ranger/biz/RangerBizUtil.java    | 50 ++++++++++----------
 .../org/apache/ranger/biz/ServiceDBStore.java   |  1 +
 .../org/apache/ranger/common/AppConstants.java  |  8 ++++
 .../org/apache/ranger/common/db/BaseDao.java    | 21 ++++++++
 .../java/org/apache/ranger/db/XXPolicyDao.java  | 10 ++++
 .../java/org/apache/ranger/db/XXServiceDao.java | 11 +++++
 .../org/apache/ranger/db/XXServiceDefDao.java   | 21 ++++++++
 .../ranger/patch/PatchMigration_J10002.java     | 44 ++---------------
 .../resources/META-INF/jpa_named_queries.xml    |  4 ++
 9 files changed, 104 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java 
b/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java
index 2cae01d..6ffcd66 100644
--- a/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/RangerBizUtil.java
@@ -31,6 +31,7 @@ import java.util.Set;
 
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOCase;
+import org.apache.commons.lang.StringUtils;
 import org.apache.log4j.Logger;
 import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.ContextUtil;
@@ -1344,38 +1345,37 @@ public class RangerBizUtil {
        }
 
        public static int getDBFlavor() {
+               String[] propertyNames = { "xa.db.flavor",
+                                                                       
"ranger.jpa.jdbc.dialect",
+                                                                       
"ranger.jpa.jdbc.url",
+                                                                       
"ranger.jpa.jdbc.driver"
+                                                               };
 
-               String dbFlavor = "";
-               boolean dbFlavorPropFound = true;
+               for(String propertyName : propertyNames) {
+                       String propertyValue = 
PropertiesUtil.getProperty(propertyName);
 
-               dbFlavor = PropertiesUtil.getProperty("xa.db.flavor");
-               if (dbFlavor == null || dbFlavor.trim().isEmpty()) {
-                       dbFlavor = 
PropertiesUtil.getProperty("ranger.jpa.jdbc.dialect");
-                       dbFlavorPropFound = false;
-               }
+                       if(StringUtils.isBlank(propertyValue)) {
+                               continue;
+                       }
 
-               if (dbFlavor != null && !dbFlavor.trim().isEmpty()) {
-                       if (dbFlavorPropFound) {
-                               if ("MYSQL".equalsIgnoreCase(dbFlavor)) {
-                                       return AppConstants.DB_FLAVOR_MYSQL;
-                               } else if ("ORACLE".equalsIgnoreCase(dbFlavor)) 
{
-                                       return AppConstants.DB_FLAVOR_ORACLE;
-                               } else {
-                                       return AppConstants.DB_FLAVOR_UNKNOWN;
-                               }
+                       if (StringUtils.containsIgnoreCase(propertyValue, 
"mysql")) {
+                               return AppConstants.DB_FLAVOR_MYSQL;
+                       } else if 
(StringUtils.containsIgnoreCase(propertyValue, "oracle")) {
+                               return AppConstants.DB_FLAVOR_ORACLE;
+                       } else if 
(StringUtils.containsIgnoreCase(propertyValue, "postgresql")) {
+                               return AppConstants.DB_FLAVOR_POSTGRES;
+                       } else if 
(StringUtils.containsIgnoreCase(propertyValue, "sqlserver")) {
+                               return AppConstants.DB_FLAVOR_SQLSERVER;
                        } else {
-                               if (dbFlavor.toUpperCase().contains("MYSQL")) {
-                                       return AppConstants.DB_FLAVOR_MYSQL;
-                               } else if 
(dbFlavor.toUpperCase().contains("ORACLE")) {
-                                       return AppConstants.DB_FLAVOR_ORACLE;
-                               } else {
-                                       return AppConstants.DB_FLAVOR_UNKNOWN;
+                               if(logger.isDebugEnabled()) {
+                                       logger.debug("DB Falvor could not be 
determined from property - " + propertyName + "=" + propertyValue);
                                }
                        }
-               } else {
-                       logger.error("Property : xa.db.flavor or 
ranger.jpa.jdbc.dialect, not found");
-                       return AppConstants.DB_FLAVOR_UNKNOWN;
                }
+
+               logger.error("DB Falvor could not be determined");
+
+               return AppConstants.DB_FLAVOR_UNKNOWN;
        }
 
        public String getAuditDBType() {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/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 e213937..d57f0be 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
@@ -263,6 +263,7 @@ public class ServiceDBStore implements ServiceStore {
                        
svcDefServiceWithAssignedId.setPopulateExistingBaseFields(true);
                        svcDefServiceWithAssignedId.create(serviceDef);
                        
svcDefServiceWithAssignedId.setPopulateExistingBaseFields(false);
+                       daoMgr.getXXServiceDef().updateSequence();
                } else {
                        // following fields will be auto populated
                        serviceDef.setId(null);

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java 
b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
index 59ab3db..491726f 100644
--- a/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
+++ b/security-admin/src/main/java/org/apache/ranger/common/AppConstants.java
@@ -364,6 +364,14 @@ public class AppConstants extends RangerCommonEnums {
         * DB Favor Oracle
         */
        public static final int DB_FLAVOR_ORACLE = 2;
+       /**
+        * DB Favor Postgres
+        */
+       public static final int DB_FLAVOR_POSTGRES = 3;
+       /**
+        * DB Favor SQLServer
+        */
+       public static final int DB_FLAVOR_SQLSERVER = 4;
 
 
        /***************************************************************

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/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 8ef9e08..bfa4c40 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
@@ -32,6 +32,8 @@ import javax.persistence.Query;
 import javax.persistence.TypedQuery;
 
 import org.apache.log4j.Logger;
+import org.apache.ranger.biz.RangerBizUtil;
+import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.db.RangerDaoManager;
 import org.apache.ranger.db.RangerDaoManagerBase;
 
@@ -210,4 +212,23 @@ public abstract class BaseDao<T> {
                return ret;
        }
 
+       public void updateSequence(String seqName, long nextValue) {
+               if(RangerBizUtil.getDBFlavor() == 
AppConstants.DB_FLAVOR_ORACLE) {
+                       String[] queries = {
+                                       "ALTER SEQUENCE " + seqName + " 
INCREMENT BY " + (nextValue - 1),
+                                       "select " + seqName + ".nextval from 
dual",
+                                       "ALTER SEQUENCE " + seqName + " 
INCREMENT BY 1 NOCACHE NOCYCLE"
+                       };
+
+                       for(String query : queries) {
+                               
getEntityManager().createNativeQuery(query).executeUpdate();
+                       }
+               } else if(RangerBizUtil.getDBFlavor() == 
AppConstants.DB_FLAVOR_POSTGRES) {
+                       String query = "SELECT setval('" + seqName + "', " + 
nextValue + ")";
+
+                       
getEntityManager().createNativeQuery(query).getSingleResult();
+               }
+
+       }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
----------------------------------------------------------------------
diff --git a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
index 9901832..006964c 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXPolicyDao.java
@@ -113,4 +113,14 @@ public class XXPolicyDao extends BaseDao<XXPolicy> {
                }
        }
 
+       public void updateSequence() {
+               Long maxId = getMaxIdOfXXPolicy();
+
+               if(maxId == null) {
+                       return;
+               }
+
+               updateSequence("X_POLICY_SEQ", maxId + 1);
+       }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
index 4f35ad3..0a0e44a 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDao.java
@@ -22,6 +22,8 @@ import java.util.List;
 
 import javax.persistence.NoResultException;
 
+import org.apache.ranger.biz.RangerBizUtil;
+import org.apache.ranger.common.AppConstants;
 import org.apache.ranger.common.db.BaseDao;
 import org.apache.ranger.entity.XXService;
 
@@ -69,4 +71,13 @@ public class XXServiceDao extends BaseDao<XXService> {
                }
        }
 
+       public void updateSequence() {
+               Long maxId = getMaxIdOfXXService();
+
+               if(maxId == null) {
+                       return;
+               }
+
+               updateSequence("X_SERVICE_SEQ", maxId + 1);
+       }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/security-admin/src/main/java/org/apache/ranger/db/XXServiceDefDao.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDefDao.java 
b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDefDao.java
index 1affbf7..d4f182c 100644
--- a/security-admin/src/main/java/org/apache/ranger/db/XXServiceDefDao.java
+++ b/security-admin/src/main/java/org/apache/ranger/db/XXServiceDefDao.java
@@ -17,6 +17,9 @@
 
 package org.apache.ranger.db;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.persistence.NoResultException;
 
 import org.apache.ranger.common.db.BaseDao;
@@ -44,4 +47,22 @@ public class XXServiceDefDao extends BaseDao<XXServiceDef> {
                }
        }
 
+       public Long getMaxIdOfXXServiceDef() {
+               try {
+                       return (Long) 
getEntityManager().createNamedQuery("XXServiceDef.getMaxIdOfXXServiceDef").getSingleResult();
+               } catch (NoResultException e) {
+                       return null;
+               }
+       }
+
+       public void updateSequence() {
+               Long maxId = getMaxIdOfXXServiceDef();
+
+               if(maxId == null) {
+                       return;
+               }
+
+               updateSequence("X_SERVICE_DEF_SEQ", maxId + 1);
+       }
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
----------------------------------------------------------------------
diff --git 
a/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
 
b/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
index c33b39d..1747324 100644
--- 
a/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
+++ 
b/security-admin/src/main/java/org/apache/ranger/patch/PatchMigration_J10002.java
@@ -485,47 +485,9 @@ public class PatchMigration_J10002 extends BaseLoader {
        }
        
        private void updateSequences() {
-               
-               if(RangerBizUtil.getDBFlavor() != 
AppConstants.DB_FLAVOR_ORACLE) {
-                       return;
-               }
-               
-               List<String> queryList = new ArrayList<String>();
-               String policySequence = "X_POLICY_SEQ";
-               String svcSequence = "X_SERVICE_SEQ";
-               
-               if(serviceCounter > 0) {
-                       
-                       Long maxSvcId = 
daoMgr.getXXService().getMaxIdOfXXService();
-                       
-                       if(maxSvcId != null) {
-                               String query1 = "ALTER SEQUENCE " + svcSequence 
+ " INCREMENT BY " + maxSvcId;
-                               String query2 = "select " + svcSequence + 
".nextval from dual";
-                               String query3 = "ALTER SEQUENCE " + svcSequence 
+ " INCREMENT BY 1 NOCACHE NOCYCLE";
-                               queryList.add(query1);
-                               queryList.add(query2);
-                               queryList.add(query3);
-                       }
-               }
-               
-               if(policyCounter > 0) {
-                       
-                       Long maxPolId = 
daoMgr.getXXPolicy().getMaxIdOfXXPolicy();
-                       
-                       if(maxPolId != null) {                          
-                               String query1 = "ALTER SEQUENCE " + 
policySequence + " INCREMENT BY " + maxPolId;
-                               String query2 = "select " + policySequence + 
".nextval from dual";
-                               String query3 = "ALTER SEQUENCE " + 
policySequence + " INCREMENT BY 1 NOCACHE NOCYCLE";
-                               queryList.add(query1);
-                               queryList.add(query2);
-                               queryList.add(query3);
-                       }
-               }
-               
-               for(String query : queryList) {
-                       
daoMgr.getEntityManager().createNativeQuery(query).executeUpdate();
-               }
-               
+               daoMgr.getXXServiceDef().updateSequence();
+               daoMgr.getXXService().updateSequence();
+               daoMgr.getXXPolicy().updateSequence();
        }
 
        private String getUserName(VXPermMap permMap) {

http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/0512610e/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
----------------------------------------------------------------------
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 054a0bd..7761756 100644
--- a/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
+++ b/security-admin/src/main/resources/META-INF/jpa_named_queries.xml
@@ -227,6 +227,10 @@
                <query>select obj from XXServiceDef obj where obj.name = 
:name</query>
        </named-query>
 
+       <named-query name="XXServiceDef.getMaxIdOfXXServiceDef">
+               <query>select MAX(obj.id) from XXServiceDef obj</query>
+       </named-query>
+
        <!-- XXResourceDef -->
        <named-query name="XXResourceDef.findByNameAndDefId">
                <query>select obj from XXResourceDef obj where obj.name = :name 
and obj.defId = :defId order by obj.level</query>

Reply via email to