HIVE-22554: ACID: Wait timeout for blocking compaction should be configurable (Laszlo Pinter via Peter Vary)
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 4393a28..76c6e39 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 @@ public static enum ConfVars {
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 fd0ae3a..8e576fa 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<AlterTableCompactDesc> {
- 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) {