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>
