diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index f04553fdac..3b2d818d57 100644 --- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -2563,20 +2563,32 @@ void dropPartitionsInternal(String catName, String dbName, String tblName, private void dropPartitionsViaJdo(String catName, String dbName, String tblName, List partNames) throws MetaException { boolean success = false; + + if (partNames.isEmpty()) { + return; + } openTransaction(); + try { - // Delete all things. - dropPartitionGrantsNoTxn(catName, dbName, tblName, partNames); - dropPartitionAllColumnGrantsNoTxn(catName, dbName, tblName, partNames); - dropPartitionColumnStatisticsNoTxn(catName, dbName, tblName, partNames); + Batchable.runBatched(batchSize, partNames, new Batchable() { + @Override + public List run(List input) throws MetaException { + // Delete all things. + dropPartitionGrantsNoTxn(catName, dbName, tblName, input); + dropPartitionAllColumnGrantsNoTxn(catName, dbName, tblName, input); + dropPartitionColumnStatisticsNoTxn(catName, dbName, tblName, input); + + // CDs are reused; go try partition SDs, detach all CDs from SDs, then remove unused CDs. + for (MColumnDescriptor mcd : detachCdsFromSdsNoTxn(catName, dbName, tblName, input)) { + removeUnusedColumnDescriptor(mcd); + } + dropPartitionsNoTxn(catName, dbName, tblName, input); + return Collections.emptyList(); + } + }); - // CDs are reused; go try partition SDs, detach all CDs from SDs, then remove unused CDs. - for (MColumnDescriptor mcd : detachCdsFromSdsNoTxn(catName, dbName, tblName, partNames)) { - removeUnusedColumnDescriptor(mcd); - } - dropPartitionsNoTxn(catName, dbName, tblName, partNames); if (!(success = commitTransaction())) { - throw new MetaException("Failed to drop partitions"); // Should not happen? + throw new MetaException("Failed to drop partitions"); } } finally { if (!success) { @@ -3455,24 +3467,31 @@ private Integer getNumPartitionsViaOrmFilter(Table table, ExpressionTree tree, b * @param partNames Partition names to get the objects for. * @return Resulting partitions. */ - private List getPartitionsViaOrmFilter(String catName, - String dbName, String tblName, List partNames) throws MetaException { + private List getPartitionsViaOrmFilter(String catName, String dbName, String tblName, + List partNames) throws MetaException { + if (partNames.isEmpty()) { - return new ArrayList<>(); - } - ObjectPair> queryWithParams = - getPartQueryWithParams(catName, dbName, tblName, partNames); - Query query = queryWithParams.getFirst(); - query.setResultClass(MPartition.class); - query.setClass(MPartition.class); - query.setOrdering("partitionName ascending"); - @SuppressWarnings("unchecked") - List mparts = (List)query.executeWithMap(queryWithParams.getSecond()); - List partitions = convertToParts(catName, dbName, tblName, mparts); - if (query != null) { - query.closeAll(); + return Collections.emptyList(); } - return partitions; + return Batchable.runBatched(batchSize, partNames, new Batchable() { + @Override + public List run(List input) throws MetaException { + ObjectPair> queryWithParams = + getPartQueryWithParams(catName, dbName, tblName, input); + + Query query = queryWithParams.getFirst(); + query.setResultClass(MPartition.class); + query.setClass(MPartition.class); + query.setOrdering("partitionName ascending"); + + @SuppressWarnings("unchecked") + List mparts = (List) query.executeWithMap(queryWithParams.getSecond()); + List partitions = convertToParts(catName, dbName, tblName, mparts); + query.closeAll(); + + return partitions; + } + }); } private void dropPartitionsNoTxn(String catName, String dbName, String tblName, List partNames) {