HCAT-628 Committer deletes the original partition when a duplicate partition fails registration

git-svn-id: https://svn.apache.org/repos/asf/incubator/hcatalog/trunk@1459476 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/CHANGES.txt b/CHANGES.txt
index b1f96c1..1ef021f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -31,6 +31,9 @@
   OPTIMIZATIONS
 
   BUG FIXES
+
+  HCAT-628 Committer deletes the original partition when a duplicate partition fails registration (thiruvel via daijy)
+
   HCAT-554 Loading data using HCatLoader() from a table on non default namenode fails. (amalakar via avandana)
 
   HCAT-629 First request always fails for webhcat (kamrul via gates)
diff --git a/core/src/main/java/org/apache/hcatalog/mapreduce/FileOutputCommitterContainer.java b/core/src/main/java/org/apache/hcatalog/mapreduce/FileOutputCommitterContainer.java
index b913482..464d334 100644
--- a/core/src/main/java/org/apache/hcatalog/mapreduce/FileOutputCommitterContainer.java
+++ b/core/src/main/java/org/apache/hcatalog/mapreduce/FileOutputCommitterContainer.java
@@ -681,14 +681,14 @@
                 // no harProcessor, regular operation
                 updateTableSchema(client, table, jobInfo.getOutputSchema());
                 LOG.info("HAR not is not being used. The table {} has new partitions {}.", table.getTableName(), ptnInfos);
-                partitionsAdded = partitionsToAdd;
-                if (dynamicPartitioningUsed && (partitionsAdded.size()>0)){
+                if (dynamicPartitioningUsed && (partitionsToAdd.size()>0)){
                     Path src = new Path(ptnRootLocation);
                     moveTaskOutputs(fs, src, src, tblPath, true);
                     moveTaskOutputs(fs, src, src, tblPath, false);
                     fs.delete(src, true);
                 }
                 client.add_partitions(partitionsToAdd);
+                partitionsAdded = partitionsToAdd;
             }
         } catch (Exception e) {
             if (partitionsAdded.size() > 0) {
diff --git a/core/src/test/java/org/apache/hcatalog/mapreduce/TestHCatDynamicPartitioned.java b/core/src/test/java/org/apache/hcatalog/mapreduce/TestHCatDynamicPartitioned.java
index db00bec..491316c 100644
--- a/core/src/test/java/org/apache/hcatalog/mapreduce/TestHCatDynamicPartitioned.java
+++ b/core/src/test/java/org/apache/hcatalog/mapreduce/TestHCatDynamicPartitioned.java
@@ -160,6 +160,24 @@
                             || (ErrorType.ERROR_MOVE_FAILED == ((HCatException) exc).getErrorType())
             );
         }
+
+        query = "show partitions " + tableName;
+        retCode = driver.run(query).getResponseCode();
+        if (retCode != 0) {
+            throw new Exception("Error " + retCode + " running query " + query);
+        }
+        res = new ArrayList<String>();
+        driver.getResults(res);
+        assertEquals(NUM_PARTITIONS, res.size());
+
+        query = "select * from " + tableName;
+        retCode = driver.run(query).getResponseCode();
+        if (retCode != 0) {
+            throw new Exception("Error " + retCode + " running query " + query);
+        }
+        res = new ArrayList<String>();
+        driver.getResults(res);
+        assertEquals(NUM_RECORDS, res.size());
     }
 
     //TODO 1.0 miniCluster is slow this test times out, make it work