@Test
  public void testAbortCompaction() throws Exception {

    d.destroy();
    hiveConf.setVar(HiveConf.ConfVars.DYNAMIC_PARTITIONING_MODE, "nonstrict");
    d = new Driver(hiveConf);
    //generate some compaction history
    runStatementOnDriver("drop database if exists mydb1 cascade");
    runStatementOnDriver("create database mydb1");

    runStatementOnDriver("create table mydb1.tbl0 " + "(a int, b int) partitioned by (p string) clustered by (a) into " +
            BUCKET_COUNT + " buckets stored as orc TBLPROPERTIES ('transactional'='true')");
    runStatementOnDriver("insert into mydb1.tbl0" + " PARTITION(p) " +
            " values(1,2,'p1'),(3,4,'p1'),(1,2,'p2'),(3,4,'p2'),(1,2,'p3'),(3,4,'p3')");
    runStatementOnDriver("alter table mydb1.tbl0" + " PARTITION(p='p1') compact 'MAJOR'");
    runStatementOnDriver("alter table mydb1.tbl0" + " PARTITION(p='p2') compact 'MAJOR'");
    TestTxnCommands2.runWorker(hiveConf);
    TestTxnCommands2.runCleaner(hiveConf);
    runStatementOnDriver("alter table mydb1.tbl0" + " PARTITION(p='p3') compact 'MAJOR'");
    runStatementOnDriver("insert into mydb1.tbl0" + " PARTITION(p) " +
            " values(4,5,'p1'),(6,7,'p1'),(4,5,'p2'),(6,7,'p2'),(4,5,'p3'),(6,7,'p3')");
    TestTxnCommands2.runWorker(hiveConf);
    TestTxnCommands2.runCleaner(hiveConf);
    runStatementOnDriver("insert into mydb1.tbl0" + " PARTITION(p) " +
            " values(11,12,'p1'),(13,14,'p1'),(11,12,'p2'),(13,14,'p2'),(11,12,'p3'),(13,14,'p3')");
    runStatementOnDriver("alter table mydb1.tbl0" + " PARTITION (p='p1')  compact 'MINOR'");
    TestTxnCommands2.runWorker(hiveConf);

    runStatementOnDriver("create table mydb1.tbl1 " + "(a int, b int) partitioned by (ds string) clustered by (a) into " +
            BUCKET_COUNT + " buckets stored as orc TBLPROPERTIES ('transactional'='true')");
    runStatementOnDriver("insert into mydb1.tbl1" + " PARTITION(ds) " +
            " values(1,2,'today'),(3,4,'today'),(1,2,'tomorrow'),(3,4,'tomorrow'),(1,2,'yesterday'),(3,4,'yesterday')");
    runStatementOnDriver("alter table mydb1.tbl1" + " PARTITION(ds='today') compact 'MAJOR'");
    TestTxnCommands2.runWorker(hiveConf);

    runStatementOnDriver("drop table if exists myT1");
    runStatementOnDriver("create table myT1 (a int, b int) stored as orc TBLPROPERTIES ('transactional'='true')");
    runStatementOnDriver("insert into myT1 values(0,2)");//makes delta_1_1 in T1
    runStatementOnDriver("insert into myT1 values(1,4)");//makes delta_2_2 in T2

    //create failed compaction attempt so that compactor txn is aborted
    HiveConf.setBoolVar(hiveConf, HiveConf.ConfVars.HIVE_TEST_MODE_FAIL_COMPACTION, true);
    runStatementOnDriver("alter table myT1 compact 'minor'");
    TestTxnCommands2.runWorker(hiveConf);
    // Verify  compaction order
    List<ShowCompactResponseElement> compacts =
            txnHandler.showCompact(new ShowCompactRequest()).getCompacts();
    Assert.assertEquals(6, compacts.size());
    Assert.assertEquals(TxnStore.INITIATED_RESPONSE, compacts.get(0).getState());
    Assert.assertEquals(TxnStore.REFUSED_RESPONSE, compacts.get(1).getState());
    Assert.assertEquals(TxnStore.CLEANING_RESPONSE, compacts.get(2).getState());
    Assert.assertEquals(TxnStore.CLEANING_RESPONSE, compacts.get(3).getState());
    Assert.assertEquals(TxnStore.SUCCEEDED_RESPONSE, compacts.get(4).getState());
    Assert.assertEquals(TxnStore.REFUSED_RESPONSE, compacts.get(5).getState());
    Map<Long, AbortCompactionResponseElement> expectedResponseMap = new HashMap<Long, AbortCompactionResponseElement>() {{
      put(Long.parseLong("6"),getAbortCompactionResponseElement(Long.parseLong("6"), "Success",
              "Successfully aborted compaction"));
      put(Long.parseLong("1") ,getAbortCompactionResponseElement(Long.parseLong("1"), "Error",
              "Error while aborting compaction as compaction is in state-refused"));
      put(Long.parseLong("2"),getAbortCompactionResponseElement(Long.parseLong("2"), "Error",
              "Error while aborting compaction as compaction is in state-succeeded"));
      put(Long.parseLong("3"),getAbortCompactionResponseElement(Long.parseLong("3"), "Error",
              "Error while aborting compaction as compaction is in state-ready for cleaning"));
      put(Long.parseLong("4"),getAbortCompactionResponseElement(Long.parseLong("4"), "Error",
              "Error while aborting compaction as compaction is in state-ready for cleaning"));
      put(Long.parseLong("5"),getAbortCompactionResponseElement(Long.parseLong("5"), "Error",
              "Error while aborting compaction as compaction is in state-refused"));
      put(Long.parseLong("12"),getAbortCompactionResponseElement(Long.parseLong("12"), "Error",
              "No Such Compaction Id Available"));
    }};

    List<Long> compactionsToAbort = Arrays.asList(Long.parseLong("12"), compacts.get(0).getId(),
            compacts.get(1).getId(), compacts.get(2).getId(), compacts.get(3).getId(), compacts.get(4).getId(),
            compacts.get(5).getId());

    AbortCompactionRequest rqst = new AbortCompactionRequest();
    rqst.setCompactionIds(compactionsToAbort);
    AbortCompactResponse resp = txnHandler.abortCompactions(rqst);
    Assert.assertEquals(7, resp.getAbortedcompactsSize());
    Map<Long, AbortCompactionResponseElement> testResp = resp.getAbortedcompacts();

    Assert.assertEquals(expectedResponseMap, testResp);

    //assert aborted compaction state
    compacts = txnHandler.showCompact(new ShowCompactRequest()).getCompacts();
    Assert.assertEquals(6, compacts.size());
    Assert.assertEquals(TxnStore.ABORTED_RESPONSE, compacts.get(0).getState());
    Assert.assertEquals(TxnStore.REFUSED_RESPONSE, compacts.get(1).getState());
    Assert.assertEquals(TxnStore.CLEANING_RESPONSE, compacts.get(2).getState());
    Assert.assertEquals(TxnStore.CLEANING_RESPONSE, compacts.get(3).getState());
    Assert.assertEquals(TxnStore.SUCCEEDED_RESPONSE, compacts.get(4).getState());
    Assert.assertEquals(TxnStore.REFUSED_RESPONSE, compacts.get(5).getState());

  }
This tests that delete_delta_x_y dirs will be not produced during minor compaction if no input delete events.
See HIVE-20941.
@throws Exception
ql/src/test/org/apache/hadoop/hive/ql/TestTxnCommands2.java