diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index 4393a2825e..76c6e39a48 100644 --- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -2761,6 +2761,9 @@ private static void populateLlapDaemonVarsSet(Set llapDaemonVarsSetLocal HIVE_COMPACTOR_ABORTEDTXN_THRESHOLD("hive.compactor.abortedtxn.threshold", 1000, "Number of aborted transactions involving a given table or partition that will trigger\n" + "a major compaction."), + + HIVE_COMPACTOR_WAIT_TIMEOUT("hive.compactor.wait.timeout", 300000L, "Time out in " + + "milliseconds for blocking compaction. It's value has to be higher than 2000 milliseconds. "), /** * @deprecated Use MetastoreConf.COMPACTOR_INITIATOR_FAILED_THRESHOLD */ diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/AlterTableCompactOperation.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/AlterTableCompactOperation.java index fd0ae3a3df..8e576fa446 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/AlterTableCompactOperation.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/AlterTableCompactOperation.java @@ -18,6 +18,7 @@ package org.apache.hadoop.hive.ql.ddl.table.storage; +import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.ddl.DDLOperationContext; import org.apache.hadoop.hive.ql.io.AcidUtils; @@ -38,7 +39,6 @@ * Operation process of compacting a table. */ public class AlterTableCompactOperation extends DDLOperation { - private static final int FIVE_MINUTES_IN_MILLIES = 5*60*1000; public AlterTableCompactOperation(DDLOperationContext context, AlterTableCompactDesc desc) { super(context, desc); @@ -96,10 +96,11 @@ private CompactionResponse compact(Table table, String partitionName) throws Hiv private void waitForCompactionToFinish(CompactionResponse resp) throws HiveException { StringBuilder progressDots = new StringBuilder(); long waitTimeMs = 1000; + long waitTimeOut = HiveConf.getLongVar(context.getConf(), HiveConf.ConfVars.HIVE_COMPACTOR_WAIT_TIMEOUT); wait: while (true) { //double wait time until 5min waitTimeMs = waitTimeMs*2; - waitTimeMs = Math.max(waitTimeMs, FIVE_MINUTES_IN_MILLIES); + waitTimeMs = Math.max(waitTimeMs, waitTimeOut); try { Thread.sleep(waitTimeMs); } catch (InterruptedException ex) {