Index: ql/src/java/org/apache/hadoop/hive/ql/security/authorization/AuthorizationPreEventListener.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/security/authorization/AuthorizationPreEventListener.java (date 1424396389000) +++ ql/src/java/org/apache/hadoop/hive/ql/security/authorization/AuthorizationPreEventListener.java (revision ) @@ -18,6 +18,7 @@ package org.apache.hadoop.hive.ql.security.authorization; +import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; @@ -33,6 +34,7 @@ import org.apache.hadoop.hive.metastore.api.InvalidOperationException; import org.apache.hadoop.hive.metastore.api.MetaException; import org.apache.hadoop.hive.metastore.api.NoSuchObjectException; +import org.apache.hadoop.hive.metastore.api.Partition; import org.apache.hadoop.hive.metastore.events.PreAddPartitionEvent; import org.apache.hadoop.hive.metastore.events.PreAlterPartitionEvent; import org.apache.hadoop.hive.metastore.events.PreAlterTableEvent; @@ -314,10 +316,8 @@ HiveOperation.ALTERTABLE_ADDPARTS.getOutputRequiredPrivileges()); } } - } catch (AuthorizationException e) { + } catch (AuthorizationException|NoSuchObjectException e) { throw invalidOperationException(e); - } catch (NoSuchObjectException e) { - throw invalidOperationException(e); } catch (HiveException e) { throw metaException(e); } @@ -326,18 +326,19 @@ private void authorizeDropPartition(PreDropPartitionEvent context) throws InvalidOperationException, MetaException { try { - org.apache.hadoop.hive.metastore.api.Partition mapiPart = context.getPartition(); - org.apache.hadoop.hive.ql.metadata.Partition wrappedPartition = new PartitionWrapper( - mapiPart, context); + Iterator partitionIterator = context.getPartitionIterator(); + TableWrapper table = new TableWrapper(context.getTable()); + while (partitionIterator.hasNext()) { + org.apache.hadoop.hive.metastore.api.Partition mapiPart = partitionIterator.next(); + org.apache.hadoop.hive.ql.metadata.Partition wrappedPartition = new PartitionWrapper(table, mapiPart); - for (HiveMetastoreAuthorizationProvider authorizer : tAuthorizers.get()) { - authorizer.authorize(wrappedPartition, - HiveOperation.ALTERTABLE_DROPPARTS.getInputRequiredPrivileges(), - HiveOperation.ALTERTABLE_DROPPARTS.getOutputRequiredPrivileges()); - } + for (HiveMetastoreAuthorizationProvider authorizer : tAuthorizers.get()) { + authorizer.authorize(wrappedPartition, + HiveOperation.ALTERTABLE_DROPPARTS.getInputRequiredPrivileges(), + HiveOperation.ALTERTABLE_DROPPARTS.getOutputRequiredPrivileges()); + } + } } catch (AuthorizationException e) { throw invalidOperationException(e); - } catch (NoSuchObjectException e) { - throw invalidOperationException(e); } catch (HiveException e) { throw metaException(e); } @@ -354,9 +355,7 @@ null, new Privilege[]{Privilege.ALTER_METADATA}); } - } catch (AuthorizationException e) { - throw invalidOperationException(e); - } catch (NoSuchObjectException e) { + } catch (AuthorizationException|NoSuchObjectException e) { throw invalidOperationException(e); } catch (HiveException e) { throw metaException(e); Index: hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/messaging/MessageFactory.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/messaging/MessageFactory.java (date 1424396389000) +++ hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/messaging/MessageFactory.java (revision ) @@ -154,10 +154,10 @@ /** * Factory method for DropPartitionMessage. * @param table The Table from which the partition is dropped. - * @param partition The Partition being dropped. + * @param partitions The set of Partitions being dropped. * @return DropPartitionMessage instance. */ - public abstract DropPartitionMessage buildDropPartitionMessage(Table table, Partition partition); + public abstract DropPartitionMessage buildDropPartitionMessage(Table table, Iterator partitions); /** * Factory method for building insert message Index: hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/messaging/json/JSONMessageFactory.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/messaging/json/JSONMessageFactory.java (date 1424396389000) +++ hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/messaging/json/JSONMessageFactory.java (revision ) @@ -111,9 +111,9 @@ } @Override - public DropPartitionMessage buildDropPartitionMessage(Table table, Partition partition) { - return new JSONDropPartitionMessage(HCAT_SERVER_URL, HCAT_SERVICE_PRINCIPAL, partition.getDbName(), - partition.getTableName(), Arrays.asList(getPartitionKeyValues(table, partition)), now()); + public DropPartitionMessage buildDropPartitionMessage(Table table, Iterator partitions) { + return new JSONDropPartitionMessage(HCAT_SERVER_URL, HCAT_SERVICE_PRINCIPAL, table.getDbName(), + table.getTableName(), getPartitionKeyValues(table, partitions), now()); } @Override Index: metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java (date 1424396389000) +++ metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java (revision ) @@ -2679,13 +2679,13 @@ } } + firePreEvent(new PreDropPartitionEvent(tbl, parts, deleteData, this)); for (Partition part : parts) { if (!ignoreProtection && !MetaStoreUtils.canDropPartition(tbl, part)) { throw new MetaException("Table " + tbl.getTableName() + " Partition " + part + " is protected from being dropped"); } - firePreEvent(new PreDropPartitionEvent(tbl, part, deleteData, this)); if (colNames != null) { partNames.add(FileUtils.makePartName(colNames, part.getValues())); } @@ -2730,14 +2730,12 @@ } } if (parts != null) { - for (Partition part : parts) { for (MetaStoreEventListener listener : listeners) { DropPartitionEvent dropPartitionEvent = - new DropPartitionEvent(tbl, part, success, deleteData, this); + new DropPartitionEvent(tbl, parts, success, deleteData, this); dropPartitionEvent.setEnvironmentContext(envContext); listener.onDropPartition(dropPartitionEvent); - } - } + } } } } Index: metastore/src/java/org/apache/hadoop/hive/metastore/events/DropPartitionEvent.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- metastore/src/java/org/apache/hadoop/hive/metastore/events/DropPartitionEvent.java (date 1424396389000) +++ metastore/src/java/org/apache/hadoop/hive/metastore/events/DropPartitionEvent.java (revision ) @@ -22,28 +22,34 @@ import org.apache.hadoop.hive.metastore.api.Partition; import org.apache.hadoop.hive.metastore.api.Table; +import java.util.Collections; +import java.util.Iterator; + public class DropPartitionEvent extends ListenerEvent { private final Table table; - private final Partition partition; + private final Iterable partitions; private final boolean deleteData; public DropPartitionEvent (Table table, Partition partition, boolean status, boolean deleteData, HMSHandler handler) { + this(table, Collections.singletonList(partition), status, deleteData, handler); + } + + public DropPartitionEvent(Table table, Iterable partitions, + boolean status, boolean deleteData, HMSHandler handler) { super (status, handler); this.table = table; - this.partition = partition; + this.partitions = partitions; // In HiveMetaStore, the deleteData flag indicates whether DFS data should be // removed on a drop. - this.deleteData = deleteData; - } + this.deleteData = deleteData; } /** * @return the partition */ - public Partition getPartition() { - - return partition; + public Iterator getPartitionIterator() { + return partitions.iterator(); } /** Index: hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/NotificationListener.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/NotificationListener.java (date 1424396389000) +++ hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/NotificationListener.java (revision ) @@ -19,10 +19,6 @@ package org.apache.hive.hcatalog.listener; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.DeliveryMode; @@ -44,9 +40,7 @@ import org.apache.hadoop.hive.metastore.api.InvalidOperationException; import org.apache.hadoop.hive.metastore.api.MetaException; import org.apache.hadoop.hive.metastore.api.NoSuchObjectException; -import org.apache.hadoop.hive.metastore.api.Order; import org.apache.hadoop.hive.metastore.api.Partition; -import org.apache.hadoop.hive.metastore.api.StorageDescriptor; import org.apache.hadoop.hive.metastore.api.Table; import org.apache.hadoop.hive.metastore.events.AddPartitionEvent; import org.apache.hadoop.hive.metastore.events.AlterPartitionEvent; @@ -56,11 +50,8 @@ import org.apache.hadoop.hive.metastore.events.DropDatabaseEvent; import org.apache.hadoop.hive.metastore.events.DropPartitionEvent; import org.apache.hadoop.hive.metastore.events.DropTableEvent; -import org.apache.hadoop.hive.metastore.events.InsertEvent; -import org.apache.hadoop.hive.metastore.events.ListenerEvent; import org.apache.hadoop.hive.metastore.events.LoadPartitionDoneEvent; import org.apache.hive.hcatalog.common.HCatConstants; -import org.apache.hive.hcatalog.messaging.AlterTableMessage; import org.apache.hive.hcatalog.messaging.HCatEventMessage; import org.apache.hive.hcatalog.messaging.MessageFactory; import org.slf4j.Logger; @@ -169,21 +160,14 @@ @Override public void onDropPartition(DropPartitionEvent partitionEvent) throws MetaException { if (partitionEvent.getStatus()) { - Partition partition = partitionEvent.getPartition(); - StorageDescriptor sd = partition.getSd(); - sd.setBucketCols(new ArrayList()); - sd.setSortCols(new ArrayList()); - sd.setParameters(new HashMap()); - sd.getSerdeInfo().setParameters(new HashMap()); - sd.getSkewedInfo().setSkewedColNames(new ArrayList()); String topicName = getTopicName(partitionEvent.getTable()); if (topicName != null && !topicName.equals("")) { - send(messageFactory.buildDropPartitionMessage(partitionEvent.getTable(), partition), topicName); + send(messageFactory.buildDropPartitionMessage(partitionEvent.getTable(), partitionEvent.getPartitionIterator()), topicName); } else { LOG.info("Topic name not found in metastore. Suppressing HCatalog notification for " - + partition.getDbName() + + partitionEvent.getTable().getDbName() + "." - + partition.getTableName() + + partitionEvent.getTable().getTableName() + " To enable notifications for this table, please do alter table set properties (" + HCatConstants.HCAT_MSGBUS_TOPIC_NAME + "=.) or whatever you want topic name to be."); Index: hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java (date 1424396389000) +++ hcatalog/server-extensions/src/main/java/org/apache/hive/hcatalog/listener/DbNotificationListener.java (revision ) @@ -175,7 +175,7 @@ Table t = partitionEvent.getTable(); NotificationEvent event = new NotificationEvent(0, now(), HCatConstants.HCAT_DROP_PARTITION_EVENT, - msgFactory.buildDropPartitionMessage(t, partitionEvent.getPartition()).toString()); + msgFactory.buildDropPartitionMessage(t, partitionEvent.getPartitionIterator()).toString()); event.setDbName(t.getDbName()); event.setTableName(t.getTableName()); enqueue(event); Index: metastore/src/java/org/apache/hadoop/hive/metastore/events/PreDropPartitionEvent.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- metastore/src/java/org/apache/hadoop/hive/metastore/events/PreDropPartitionEvent.java (date 1424396389000) +++ metastore/src/java/org/apache/hadoop/hive/metastore/events/PreDropPartitionEvent.java (revision ) @@ -22,35 +22,33 @@ import org.apache.hadoop.hive.metastore.api.Partition; import org.apache.hadoop.hive.metastore.api.Table; +import java.util.Collections; +import java.util.Iterator; + public class PreDropPartitionEvent extends PreEventContext { - private final Partition partition; + private final Iterable partitions; private final Table table; private final boolean deleteData; - public PreDropPartitionEvent (Partition partition, boolean deleteData, HMSHandler handler) { - super (PreEventType.DROP_PARTITION, handler); - this.partition = partition; - this.table = null; - // In HiveMetaStore, the deleteData flag indicates whether DFS data should be - // removed on a drop. - this.deleteData = false; - } - public PreDropPartitionEvent (Table table, Partition partition, boolean deleteData, HMSHandler handler) { + this(table, Collections.singletonList(partition), deleteData, handler); + } + + public PreDropPartitionEvent (Table table, Iterable partitions, + boolean deleteData, HMSHandler handler) { super (PreEventType.DROP_PARTITION, handler); - this.partition = partition; + this.partitions = partitions; this.table = table; - this.deleteData = false; + this.deleteData = false; // FIXME: Assign from argument? } /** * @return the partition */ - public Partition getPartition() { - - return partition; + public Iterator getPartitionIterator() { + return partitions.iterator(); } /**