You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ek...@apache.org on 2018/05/03 16:22:49 UTC

hive git commit: HIVE-17457 - IOW Acid Insert Overwrite when the transaction fails (Eugene Koifman, reviewed by Sergey Shelukhin)

Repository: hive
Updated Branches:
  refs/heads/master 2c7f9c26e -> dfaf90f2b


HIVE-17457 - IOW Acid Insert Overwrite when the transaction fails (Eugene Koifman, reviewed by Sergey Shelukhin)


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

Branch: refs/heads/master
Commit: dfaf90f2b3a69477ea6b38144cf4ed55de9c4d95
Parents: 2c7f9c2
Author: Eugene Koifman <ek...@apache.org>
Authored: Thu May 3 09:22:41 2018 -0700
Committer: Eugene Koifman <ek...@apache.org>
Committed: Thu May 3 09:22:41 2018 -0700

----------------------------------------------------------------------
 .../hadoop/hive/ql/lockmgr/DbTxnManager.java     |  2 +-
 .../apache/hadoop/hive/ql/TestTxnCommands.java   | 19 +++++++++++++++++--
 2 files changed, 18 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/dfaf90f2/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java b/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
index 68b4c3b..94f6b00 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DbTxnManager.java
@@ -361,7 +361,7 @@ public final class DbTxnManager extends HiveTxnManagerImpl {
             return true;
           case INSERT_OVERWRITE:
             //see HIVE-18154
-            return false; // TODO: is this still relevant for insert-only tables?
+            return false;
           default:
             //not relevant for LOAD
             return false;

http://git-wip-us.apache.org/repos/asf/hive/blob/dfaf90f2/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
index 6a3be39..6faba42 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands.java
@@ -74,11 +74,26 @@ public class TestTxnCommands extends TxnCommandsBaseForTests {
     return TEST_DATA_DIR;
   }
 
-  @Test//todo: what is this for?
+  /**
+   * tests that a failing Insert Overwrite (which creates a new base_x) is properly marked as
+   * aborted.
+   */
+  @Test
   public void testInsertOverwrite() throws Exception {
     runStatementOnDriver("insert overwrite table " + Table.NONACIDORCTBL + " select a,b from " + Table.NONACIDORCTBL2);
     runStatementOnDriver("create table " + Table.NONACIDORCTBL2 + "3(a int, b int) clustered by (a) into " + BUCKET_COUNT + " buckets stored as orc TBLPROPERTIES ('transactional'='false')");
-
+    runStatementOnDriver("insert into " + Table.ACIDTBL + " values(1,2)");
+    List<String> rs = runStatementOnDriver("select a from " + Table.ACIDTBL + " where b = 2");
+    Assert.assertEquals(1, rs.size());
+    Assert.assertEquals("1", rs.get(0));
+    hiveConf.setBoolVar(HiveConf.ConfVars.HIVETESTMODEROLLBACKTXN, true);
+    runStatementOnDriver("insert into " + Table.ACIDTBL + " values(3,2)");
+    hiveConf.setBoolVar(HiveConf.ConfVars.HIVETESTMODEROLLBACKTXN, false);
+    runStatementOnDriver("insert into " + Table.ACIDTBL + " values(5,6)");
+    rs = runStatementOnDriver("select a from " + Table.ACIDTBL + " order by a");
+    Assert.assertEquals(2, rs.size());
+    Assert.assertEquals("1", rs.get(0));
+    Assert.assertEquals("5", rs.get(1));
   }
   @Ignore("not needed but useful for testing")
   @Test