Repository: hive
Updated Branches:
  refs/heads/master 7cb31c030 -> 6001f51f4


HIVE-18697: The HiveMetastore.exchange_partitions method throws 
FileNotFoundException if the given partition doesn't exist in the source table 
(Marta Kuczora, via Peter Vary)


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

Branch: refs/heads/master
Commit: 6001f51f48bf3f2fa3b01d3ade55d02b8fc4857a
Parents: 7cb31c0
Author: Peter Vary <pv...@cloudera.com>
Authored: Tue Mar 6 16:55:53 2018 +0100
Committer: Peter Vary <pv...@cloudera.com>
Committed: Tue Mar 6 16:55:53 2018 +0100

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


http://git-wip-us.apache.org/repos/asf/hive/blob/6001f51f/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 1c422ca..2be018b 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
@@ -3410,6 +3410,10 @@ public class HiveMetaStore extends ThriftHiveMetastore {
       }
       List<Partition> partitionsToExchange = get_partitions_ps(sourceDbName, 
sourceTableName,
           partVals, (short)-1);
+      if (partitionsToExchange == null || partitionsToExchange.isEmpty()) {
+        throw new MetaException("No partition is found with the values " + 
partitionSpecs
+            + " for the table " + sourceTableName);
+      }
       boolean sameColumns = MetaStoreUtils.compareFieldColumns(
           sourceTable.getSd().getCols(), destinationTable.getSd().getCols());
       boolean samePartitions = MetaStoreUtils.compareFieldColumns(

http://git-wip-us.apache.org/repos/asf/hive/blob/6001f51f/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 3bd1f8d..5b21491 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
@@ -691,8 +691,6 @@ public class TestExchangePartitions extends 
MetaStoreClientTest {
   @Test(expected = MetaException.class)
   public void testExchangePartitionsNoPartExists() throws Exception {
 
-    // TODO: FileNotFoundException will occur. This use case could be handled 
in a better way like
-    // checking if the partitionsToExchange is empty and throw an exception if 
it is.
     Map<String, String> partitionSpecs =
         getPartitionSpec(Lists.newArrayList("2017", "march", "25"));
     client.exchange_partitions(partitionSpecs, sourceTable.getDbName(),
@@ -1284,8 +1282,6 @@ public class TestExchangePartitions extends 
MetaStoreClientTest {
   @Test(expected = MetaException.class)
   public void testExchangePartitionNoPartExists() throws Exception {
 
-    // TODO: FileNotFoundException will occur. This use case could be handled 
in a better way like
-    // checking if the partitionsToExchange is empty and throw an exception if 
it is.
     Map<String, String> partitionSpecs =
         getPartitionSpec(Lists.newArrayList("2017", "march", "25"));
     client.exchange_partition(partitionSpecs, sourceTable.getDbName(),

Reply via email to