This is an automated email from the ASF dual-hosted git repository.
dkuzmenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new d02e3bb2805 HIVE-29522: Prevent cleaner from creating
COMPLETED_COMPACTIONS entries for soft-deleted ACID tables (#6399)
d02e3bb2805 is described below
commit d02e3bb2805c09689bd46222cff63ba99929f69f
Author: Venu Reddy <[email protected]>
AuthorDate: Fri Apr 17 20:23:35 2026 +0530
HIVE-29522: Prevent cleaner from creating COMPLETED_COMPACTIONS entries for
soft-deleted ACID tables (#6399)
---
.../hive/ql/txn/compactor/handler/CompactionCleaner.java | 1 +
.../hadoop/hive/metastore/txn/entities/CompactionInfo.java | 10 ++++++++++
.../hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java | 6 ++++++
3 files changed, 17 insertions(+)
diff --git
a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/handler/CompactionCleaner.java
b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/handler/CompactionCleaner.java
index fd49bbb90f1..5e13f45bcf2 100644
---
a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/handler/CompactionCleaner.java
+++
b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/handler/CompactionCleaner.java
@@ -198,6 +198,7 @@ private void cleanUsingLocation(CompactionInfo ci, String
path, boolean requires
deleted = fsRemover.clean(getCleaningRequestBasedOnLocation(ci, path));
}
if (!deleted.isEmpty()) {
+ ci.setSoftDelete(true);
txnHandler.markCleaned(ci);
} else {
txnHandler.clearCleanerStart(ci);
diff --git
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/entities/CompactionInfo.java
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/entities/CompactionInfo.java
index e1c1f492bab..5c392477c6a 100644
---
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/entities/CompactionInfo.java
+++
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/entities/CompactionInfo.java
@@ -87,6 +87,7 @@ public class CompactionInfo implements
Comparable<CompactionInfo> {
private String fullPartitionName = null;
private String fullTableName = null;
private StringableMap propertiesMap;
+ private boolean softDelete;
public CompactionInfo(String dbname, String tableName, String partName,
CompactionType type) {
this.dbname = dbname;
@@ -190,6 +191,7 @@ public String toString() {
.append("numberOfBuckets", numberOfBuckets)
.append("orderByClause", orderByClause)
.append("minOpenWriteTxnId", minOpenWriteTxnId)
+ .append("softDelete", softDelete)
.build();
}
@@ -368,4 +370,12 @@ public void setWriteIds(boolean hasUncompactedAborts,
Set<Long> writeIds) {
public boolean isAbortedTxnCleanup() {
return type == CompactionType.ABORT_TXN_CLEANUP;
}
+
+ public void setSoftDelete(boolean softDelete) {
+ this.softDelete = softDelete;
+ }
+
+ public boolean isSoftDelete() {
+ return softDelete;
+ }
}
diff --git
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java
index 2bd96f53a1d..27b67d1feae 100644
---
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java
+++
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java
@@ -50,6 +50,12 @@ public MarkCleanedFunction(CompactionInfo info) {
public Void execute(MultiDataSourceJdbcResource jdbcResource) throws
MetaException {
NamedParameterJdbcTemplate jdbcTemplate = jdbcResource.getJdbcTemplate();
MapSqlParameterSource param;
+ if (info.isSoftDelete()) {
+ // Remove compaction queue record and return
+ removeCompactionAndAbortRetryEntries(info, jdbcTemplate);
+ return null;
+ }
+
if (!info.isAbortedTxnCleanup()) {
param = new MapSqlParameterSource()
.addValue("id", info.id)