You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by va...@apache.org on 2017/06/14 00:57:04 UTC

[26/52] [abbrv] sentry git commit: SENTRY-1768: Avoid detaching object on transaction exit when it isn't needed (Alex Kolbasov, reviewed by Na Li and Vamsee Yarlagadda)

SENTRY-1768: Avoid detaching object on transaction exit when it isn't needed (Alex Kolbasov, reviewed by Na Li and Vamsee Yarlagadda)

Change-Id: Idec00b5caebba12524df5678b2e2b818b11fb1b6
Reviewed-on: http://gerrit.sjc.cloudera.com:8080/22791
Reviewed-by: Na Li <li...@cloudera.com>
Tested-by: Jenkins User
Reviewed-by: Alexander Kolbasov <ak...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/sentry/repo
Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/49cc480b
Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/49cc480b
Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/49cc480b

Branch: refs/for/cdh5-1.5.1_ha
Commit: 49cc480b3c4326151e07cf7cd4d760ee7b1d49d1
Parents: e4f6f22
Author: Alexander Kolbasov <ak...@cloudera.com>
Authored: Wed May 17 13:19:30 2017 -0700
Committer: Alexander Kolbasov <ak...@cloudera.com>
Committed: Wed May 17 15:16:19 2017 -0700

----------------------------------------------------------------------
 .../persistent/DeltaTransactionBlock.java       |  1 +
 .../db/service/persistent/SentryStore.java      | 47 +++++++++++++-------
 2 files changed, 32 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sentry/blob/49cc480b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/DeltaTransactionBlock.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/DeltaTransactionBlock.java b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/DeltaTransactionBlock.java
index e2c14e0..716ce09 100644
--- a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/DeltaTransactionBlock.java
+++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/DeltaTransactionBlock.java
@@ -70,6 +70,7 @@ public class DeltaTransactionBlock implements TransactionBlock<Object> {
    */
   private void persistUpdate(PersistenceManager pm, Update update)
       throws Exception {
+    pm.setDetachAllOnCommit(false); // No need to detach objects
 
     Preconditions.checkNotNull(update);
     // persistUpdate cannot handle full image update, instead

http://git-wip-us.apache.org/repos/asf/sentry/blob/49cc480b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
----------------------------------------------------------------------
diff --git a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
index fb648bb..0faaf28 100644
--- a/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
+++ b/sentry-provider/sentry-provider-db/src/main/java/org/apache/sentry/provider/db/service/persistent/SentryStore.java
@@ -190,8 +190,8 @@ public class SentryStore {
     if (prop.getProperty(ServerConfig.DATANUCLEUS_ISOLATION_LEVEL, "").
             equals(ServerConfig.DATANUCLEUS_REPEATABLE_READ) &&
                     jdbcUrl.contains(oracleDb)) {
-      String parts[] = jdbcUrl.split(":");
-      if (parts.length > 1 && parts[1].equals(oracleDb)) {
+      String[] parts = jdbcUrl.split(":");
+      if ((parts.length > 1) && parts[1].equals(oracleDb)) {
         // For Oracle JDBC driver, replace "repeatable-read" with "read-committed"
         prop.setProperty(ServerConfig.DATANUCLEUS_ISOLATION_LEVEL,
                 "read-committed");
@@ -636,11 +636,11 @@ public class SentryStore {
           MSentryPrivilege mSelect = getMSentryPrivilege(tNotAll, pm);
           tNotAll.setAction(AccessConstants.INSERT);
           MSentryPrivilege mInsert = getMSentryPrivilege(tNotAll, pm);
-          if ((mSelect != null) && (mRole.getPrivileges().contains(mSelect))) {
+          if ((mSelect != null) && mRole.getPrivileges().contains(mSelect)) {
             mSelect.removeRole(mRole);
             pm.makePersistent(mSelect);
           }
-          if ((mInsert != null) && (mRole.getPrivileges().contains(mInsert))) {
+          if ((mInsert != null) && mRole.getPrivileges().contains(mInsert)) {
             mInsert.removeRole(mRole);
             pm.makePersistent(mInsert);
           }
@@ -2226,6 +2226,7 @@ public class SentryStore {
     new TransactionBlock<PermissionsImage>() {
       public PermissionsImage execute(PersistenceManager pm)
       throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         // curChangeID could be 0, if Sentry server has been running before
         // enable SentryPlugin(HDFS Sync feature).
         long curChangeID = getLastProcessedChangeIDCore(pm, MSentryPermChange.class);
@@ -2247,6 +2248,7 @@ public class SentryStore {
    */
    private Map<String, Map<String, String>> retrieveFullPrivilegeImageCore(PersistenceManager pm)
         throws Exception {
+     pm.setDetachAllOnCommit(false); // No need to detach objects
 
     Map<String, Map<String, String>> retVal = new HashMap<>();
     Query query = pm.newQuery(MSentryPrivilege.class);
@@ -2292,6 +2294,7 @@ public class SentryStore {
    */
   private Map<String, List<String>> retrieveFullRoleImageCore(PersistenceManager pm)
           throws Exception {
+    pm.setDetachAllOnCommit(false); // No need to detach objects
     Query query = pm.newQuery(MSentryGroup.class);
     @SuppressWarnings("unchecked")
     List<MSentryGroup> groups = (List<MSentryGroup>) query.execute();
@@ -2330,6 +2333,7 @@ public class SentryStore {
       public Object execute(PersistenceManager pm) throws Exception {
         // curChangeID could be 0 for the first full snapshot fetching
         // from HMS. It does not have corresponding delta update.
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         long curChangeID = getLastProcessedChangeIDCore(pm, MSentryPathChange.class);
         Map<String, Set<String>> pathImage = retrieveFullPathsImageCore(pm);
 
@@ -2366,6 +2370,7 @@ public class SentryStore {
     tm.executeTransactionWithRetry(
       new TransactionBlock() {
         public Object execute(PersistenceManager pm) throws Exception {
+          pm.setDetachAllOnCommit(false); // No need to detach objects
           for (Map.Entry<String, Set<String>> authzPath : authzPaths.entrySet()) {
             createAuthzPathsMappingCore(pm, authzPath.getKey(), authzPath.getValue());
           }
@@ -2452,6 +2457,7 @@ public class SentryStore {
       final Update update) throws Exception {
     execute(new DeltaTransactionBlock(update), new TransactionBlock<Object>() {
       public Object execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         deleteAuthzPathsMappingCore(pm, authzObj, paths);
         return null;
       }
@@ -2473,7 +2479,7 @@ public class SentryStore {
       for (String path : paths) {
         MPath mPath = mAuthzPathsMapping.getPath(path);
         if (mPath == null) {
-          LOGGER.error("nonexistent path: " + path);
+          LOGGER.error("nonexistent path: {}", path);
         } else {
           mAuthzPathsMapping.removePath(mPath);
           pm.deletePersistent(mPath);
@@ -2481,7 +2487,7 @@ public class SentryStore {
       }
       pm.makePersistent(mAuthzPathsMapping);
     } else {
-      LOGGER.error("nonexistent authzObj: " + authzObj);
+      LOGGER.error("nonexistent authzObj: {}", authzObj);
     }
   }
 
@@ -2497,6 +2503,7 @@ public class SentryStore {
         throws Exception {
     execute(new DeltaTransactionBlock(update), new TransactionBlock<Object>() {
       public Object execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         deleteAllAuthzPathsMappingCore(pm, authzObj);
         return null;
       }
@@ -2519,7 +2526,7 @@ public class SentryStore {
       }
       pm.deletePersistent(mAuthzPathsMapping);
     } else {
-      LOGGER.error("nonexistent authzObj: " + authzObj);
+      LOGGER.error("nonexistent authzObj: {}", authzObj);
     }
   }
 
@@ -2539,6 +2546,7 @@ public class SentryStore {
       final String oldPath, final String newPath, final Update update) throws Exception {
     execute(new DeltaTransactionBlock(update), new TransactionBlock<Object>() {
       public Object execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         renameAuthzPathsMappingCore(pm, oldObj, newObj, oldPath, newPath);
         return null;
       }
@@ -2563,7 +2571,7 @@ public class SentryStore {
     if (mAuthzPathsMapping != null) {
       MPath mOldPath = mAuthzPathsMapping.getPath(oldPath);
       if (mOldPath == null) {
-        LOGGER.error("nonexistent path: " + oldPath);
+        LOGGER.error("nonexistent path: {}", oldPath);
       } else {
         mAuthzPathsMapping.removePath(mOldPath);
         pm.deletePersistent(mOldPath);
@@ -2572,7 +2580,7 @@ public class SentryStore {
       mAuthzPathsMapping.setAuthzObjName(newObj);
       pm.makePersistent(mAuthzPathsMapping);
     } else {
-      LOGGER.error("nonexistent authzObj: " + oldObj);
+      LOGGER.error("nonexistent authzObj: {}", oldObj);
     }
   }
 
@@ -2589,6 +2597,7 @@ public class SentryStore {
       final Update update) throws Exception {
     execute(new DeltaTransactionBlock(update), new TransactionBlock<Object>() {
       public Object execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         renameAuthzObjCore(pm, oldObj, newObj);
         return null;
       }
@@ -2611,7 +2620,7 @@ public class SentryStore {
       mAuthzPathsMapping.setAuthzObjName(newObj);
       pm.makePersistent(mAuthzPathsMapping);
     } else {
-      LOGGER.error("nonexistent authzObj: " + oldObj);
+      LOGGER.error("nonexistent authzObj: {}", oldObj);
     }
   }
 
@@ -2630,6 +2639,7 @@ public class SentryStore {
         final String newPath, final Update update) throws Exception {
     execute(new DeltaTransactionBlock(update), new TransactionBlock<Object>() {
       public Object execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         updateAuthzPathsMappingCore(pm, authzObj, oldPath, newPath);
         return null;
       }
@@ -2656,7 +2666,7 @@ public class SentryStore {
     } else {
       MPath mOldPath = mAuthzPathsMapping.getPath(oldPath);
       if (mOldPath == null) {
-        LOGGER.error("nonexistent path: " + oldPath);
+        LOGGER.error("nonexistent path: {}", oldPath);
       } else {
         mAuthzPathsMapping.removePath(mOldPath);
         pm.deletePersistent(mOldPath);
@@ -2711,9 +2721,9 @@ public class SentryStore {
   }
 
   Boolean findOrphanedPrivilegesCore(PersistenceManager pm) {
-    ArrayList<Object> idList = new ArrayList<Object>();
     //Perform a SQL query to get things that look like orphans
     List<MSentryPrivilege> results = getAllMSentryPrivilegesCore(pm);
+    List<Object> idList = new ArrayList<>(results.size());
     for (MSentryPrivilege orphan : results) {
       idList.add(pm.getObjectId(orphan));
     }
@@ -2826,6 +2836,7 @@ public class SentryStore {
     return tm.executeTransaction(
       new TransactionBlock<Long>() {
         public Long execute(PersistenceManager pm) throws Exception {
+          pm.setDetachAllOnCommit(false); // No need to detach objects
           return getLastProcessedChangeIDCore(pm, MSentryPermChange.class);
         }
       });
@@ -2840,6 +2851,7 @@ public class SentryStore {
     return tm.executeTransaction(
     new TransactionBlock<Long>() {
       public Long execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         return getLastProcessedChangeIDCore(pm, MSentryPathChange.class);
       }
     });
@@ -2855,8 +2867,8 @@ public class SentryStore {
     return tm.executeTransaction(
     new TransactionBlock<Long>() {
       public Long execute(PersistenceManager pm) throws Exception {
-        long changeID = getLastProcessedChangeIDCore(pm,
-            MSentryPathChange.class);
+        pm.setDetachAllOnCommit(false); // No need to detach objects
+        long changeID = getLastProcessedChangeIDCore(pm, MSentryPathChange.class);
         if (changeID == EMPTY_CHANGE_ID) {
           return EMPTY_CHANGE_ID;
         } else {
@@ -2972,6 +2984,7 @@ public class SentryStore {
     return tm.executeTransaction(
     new TransactionBlock<Boolean>() {
       public Boolean execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         return changeExistsCore(pm, MSentryPermChange.class, changeID);
       }
     });
@@ -2988,6 +3001,7 @@ public class SentryStore {
     return tm.executeTransaction(
     new TransactionBlock<Boolean>() {
       public Boolean execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         return changeExistsCore(pm, MSentryPathChange.class, changeID);
       }
     });
@@ -3041,8 +3055,7 @@ public class SentryStore {
     Query query = pm.newQuery(changeCls);
     query.setFilter("this.changeID >= t");
     query.declareParameters("long t");
-    List<T> changes = (List<T>) query.execute(changeID);
-    return changes;
+    return (List<T>) query.execute(changeID);
   }
 
   /**
@@ -3059,6 +3072,7 @@ public class SentryStore {
       throws Exception {
     return tm.executeTransaction(new TransactionBlock<List<MSentryPathChange>>() {
       public List<MSentryPathChange> execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         List<MSentryPathChange> pathChanges =
             getMSentryChangesCore(pm, MSentryPathChange.class, changeID);
         long curChangeID = getLastProcessedChangeIDCore(pm, MSentryPathChange.class);
@@ -3092,6 +3106,7 @@ public class SentryStore {
     return tm.executeTransaction(
     new TransactionBlock<List<MSentryPermChange>>() {
       public List<MSentryPermChange> execute(PersistenceManager pm) throws Exception {
+        pm.setDetachAllOnCommit(false); // No need to detach objects
         List<MSentryPermChange> permChanges =
             getMSentryChangesCore(pm, MSentryPermChange.class, changeID);
         long curChangeID = getLastProcessedChangeIDCore(pm, MSentryPermChange.class);