You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by pv...@apache.org on 2018/03/20 09:27:29 UTC

hive git commit: HIVE-18699: Check for duplicate partitions in HiveMetastore.exchange_partitions (Marta Kuczora, reviewed by Adam Szita, Peter Vary)

Repository: hive
Updated Branches:
  refs/heads/master 0870ab9ca -> dec3625b9


HIVE-18699: Check for duplicate partitions in HiveMetastore.exchange_partitions (Marta Kuczora, reviewed by Adam Szita, Peter Vary)


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

Branch: refs/heads/master
Commit: dec3625b94d164c66087e115942a875a83590149
Parents: 0870ab9
Author: Peter Vary <pv...@cloudera.com>
Authored: Tue Mar 20 10:26:00 2018 +0100
Committer: Peter Vary <pv...@cloudera.com>
Committed: Tue Mar 20 10:26:00 2018 +0100

----------------------------------------------------------------------
 .../apache/hadoop/hive/metastore/HiveMetaStore.java   | 14 ++++++++++++++
 .../hive/metastore/client/TestExchangePartitions.java |  6 ------
 2 files changed, 14 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/dec3625b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 6838dd7..3a0e760 100644
--- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@ -3445,6 +3445,20 @@ public class HiveMetaStore extends ThriftHiveMetastore {
       List<Map<String, String>> transactionalListenerResponsesForDropPartition =
           Lists.newArrayListWithCapacity(partitionsToExchange.size());
 
+      // Check if any of the partitions already exists in destTable.
+      List<String> destPartitionNames =
+          ms.listPartitionNames(destDbName, destTableName, (short) -1);
+      if (destPartitionNames != null && !destPartitionNames.isEmpty()) {
+        for (Partition partition : partitionsToExchange) {
+          String partToExchangeName =
+              Warehouse.makePartName(destinationTable.getPartitionKeys(), partition.getValues());
+          if (destPartitionNames.contains(partToExchangeName)) {
+            throw new MetaException("The partition " + partToExchangeName
+                + " already exists in the table " + destTableName);
+          }
+        }
+      }
+
       try {
         for (Partition partition: partitionsToExchange) {
           Partition destPartition = new Partition(partition);

http://git-wip-us.apache.org/repos/asf/hive/blob/dec3625b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java
----------------------------------------------------------------------
diff --git a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java
index c9b9e9b..5a7c71c 100644
--- a/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java
+++ b/standalone-metastore/src/test/java/org/apache/hadoop/hive/metastore/client/TestExchangePartitions.java
@@ -409,9 +409,6 @@ public class TestExchangePartitions extends MetaStoreClientTest {
     Map<String, String> partitionSpecs = getPartitionSpec(partitions[1]);
     client.exchange_partitions(partitionSpecs, DB_NAME, sourceTable.getTableName(), DB_NAME,
         destTable.getTableName());
-    // TODO: In this case we get an exception, because the insert statement fails due to duplicated
-    // primary key. Maybe this use case could be handled better by checking if the partition already
-    // exists.
   }
 
   @Test
@@ -936,9 +933,6 @@ public class TestExchangePartitions extends MetaStoreClientTest {
     Map<String, String> partitionSpecs = getPartitionSpec(partitions[1]);
     client.exchange_partition(partitionSpecs, DB_NAME, sourceTable.getTableName(), DB_NAME,
         destTable.getTableName());
-    // TODO: In this case we get an exception, because the insert statement fails due to duplicated
-    // primary key. Maybe this use case could be handled better by checking if the partition already
-    // exists.
   }
 
   @Test