You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ng...@apache.org on 2021/07/09 04:49:05 UTC

[hive] branch master updated: HIVE-25131: PreAlterPartitionEvent should have table owner details that can be authorized in Ranger

This is an automated email from the ASF dual-hosted git repository.

ngangam pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new f05f933  HIVE-25131: PreAlterPartitionEvent should have table owner details that can be authorized in Ranger
f05f933 is described below

commit f05f933e011a900ef3e2fc836777ee24c908d21d
Author: saihemanth <sa...@cloudera.com>
AuthorDate: Tue May 18 10:11:52 2021 -0700

    HIVE-25131: PreAlterPartitionEvent should have table owner details that can be authorized in Ranger
---
 .../metastore/events/AlterPartitionEvent.java      |  4 ++--
 .../apache/hadoop/hive/metastore/HMSHandler.java   | 24 ++++++++++------------
 .../metastore/events/PreAlterPartitionEvent.java   |  7 ++++++-
 3 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterPartitionEvent.java b/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterPartitionEvent.java
index f7bedb5..2f9e474 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterPartitionEvent.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterPartitionEvent.java
@@ -60,7 +60,7 @@ public class AlterPartitionEvent extends HiveMetaStoreAuthorizableEvent {
     List<HivePrivilegeObject> ret   = new ArrayList<>();
     PreAlterPartitionEvent    event = (PreAlterPartitionEvent) preEventContext;
 
-    ret.add(new HivePrivilegeObject(HivePrivilegeObjectType.TABLE_OR_VIEW, event.getDbName(), event.getTableName()));
+    ret.add(getHivePrivilegeObject(event.getTable()));
 
     LOG.debug("<== AlterPartitionEvent.getInputHObjs() ret={}", ret);
 
@@ -73,7 +73,7 @@ public class AlterPartitionEvent extends HiveMetaStoreAuthorizableEvent {
     List<HivePrivilegeObject> ret   = new ArrayList<>();
     PreAlterPartitionEvent    event = (PreAlterPartitionEvent) preEventContext;
 
-    ret.add(new HivePrivilegeObject(HivePrivilegeObjectType.TABLE_OR_VIEW, event.getDbName(), event.getTableName()));
+    ret.add(getHivePrivilegeObject(event.getTable()));
 
     Partition newPartition = event.getNewPartition();
     String    newUri       = (newPartition != null) ? getSdLocation(newPartition.getSd()) : "";
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
index 81e6e9e..fbcb396 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
@@ -5741,7 +5741,10 @@ public class HMSHandler extends FacebookBase implements IHMSHandler {
     Partition oldPart = null;
     Exception ex = null;
     try {
-      firePreEvent(new PreAlterPartitionEvent(db_name, tbl_name, part_vals, new_part, this));
+      Table table = null;
+      table = getMS().getTable(catName, db_name, tbl_name, null);
+
+      firePreEvent(new PreAlterPartitionEvent(db_name, tbl_name, table, part_vals, new_part, this));
       if (part_vals != null && !part_vals.isEmpty()) {
         MetaStoreServerUtils.validatePartitionNameCharacters(new_part.getValues(),
             partitionValidationPattern);
@@ -5751,12 +5754,8 @@ public class HMSHandler extends FacebookBase implements IHMSHandler {
           part_vals, new_part, envContext, this, validWriteIds);
 
       // Only fetch the table if we actually have a listener
-      Table table = null;
-      if (!listeners.isEmpty()) {
-        if (table == null) {
-          table = getMS().getTable(catName, db_name, tbl_name, null);
-        }
 
+      if (!listeners.isEmpty()) {
         MetaStoreListenerNotifier.notifyEvent(listeners,
             EventType.ALTER_PARTITION,
             new AlterPartitionEvent(oldPart, new_part, table, false,
@@ -5828,18 +5827,21 @@ public class HMSHandler extends FacebookBase implements IHMSHandler {
     Lock tableLock = getTableLockFor(db_name, tbl_name);
     tableLock.lock();
     try {
+
+      Table table = null;
+      table = getMS().getTable(catName, db_name, tbl_name,  null);
+
       for (Partition tmpPart : new_parts) {
         // Make sure the catalog name is set in the new partition
         if (!tmpPart.isSetCatName()) {
           tmpPart.setCatName(getDefaultCatalog(conf));
         }
-        firePreEvent(new PreAlterPartitionEvent(db_name, tbl_name, null, tmpPart, this));
+        firePreEvent(new PreAlterPartitionEvent(db_name, tbl_name, table, null, tmpPart, this));
       }
       oldParts = alterHandler.alterPartitions(getMS(), wh,
           catName, db_name, tbl_name, new_parts, environmentContext, writeIdList, writeId, this);
       Iterator<Partition> olditr = oldParts.iterator();
-      // Only fetch the table if we have a listener that needs it.
-      Table table = null;
+
       for (Partition tmpPart : new_parts) {
         Partition oldTmpPart;
         if (olditr.hasNext()) {
@@ -5849,10 +5851,6 @@ public class HMSHandler extends FacebookBase implements IHMSHandler {
           throw new InvalidOperationException("failed to alterpartitions");
         }
 
-        if (table == null) {
-          table = getMS().getTable(catName, db_name, tbl_name,  null);
-        }
-
         if (!listeners.isEmpty()) {
           MetaStoreListenerNotifier.notifyEvent(listeners,
               EventType.ALTER_PARTITION,
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreAlterPartitionEvent.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreAlterPartitionEvent.java
index a269563..3e07a18 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreAlterPartitionEvent.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreAlterPartitionEvent.java
@@ -24,6 +24,7 @@ import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.hive.metastore.IHMSHandler;
 import org.apache.hadoop.hive.metastore.api.Partition;
+import org.apache.hadoop.hive.metastore.api.Table;
 
 @InterfaceAudience.Public
 @InterfaceStability.Stable
@@ -31,14 +32,16 @@ public class PreAlterPartitionEvent extends PreEventContext {
 
   private final String dbName;
   private final String tableName;
+  private final Table table;
   private final List<String> oldPartVals;
   private final Partition newPart;
 
-  public PreAlterPartitionEvent(String dbName, String tableName, List<String> oldPartVals,
+  public PreAlterPartitionEvent(String dbName, String tableName, Table table, List<String> oldPartVals,
       Partition newPart, IHMSHandler handler) {
     super(PreEventType.ALTER_PARTITION, handler);
     this.dbName = dbName;
     this.tableName = tableName;
+    this.table = table;
     this.oldPartVals = oldPartVals;
     this.newPart = newPart;
   }
@@ -51,6 +54,8 @@ public class PreAlterPartitionEvent extends PreEventContext {
     return tableName;
   }
 
+  public Table getTable() { return table; }
+
   public List<String> getOldPartVals() {
     return oldPartVals;
   }