Skip to content

Commit d02e3bb

Browse files
HIVE-29522: Prevent cleaner from creating COMPLETED_COMPACTIONS entries for soft-deleted ACID tables (#6399)
1 parent 1307adf commit d02e3bb

3 files changed

Lines changed: 17 additions & 0 deletions

File tree

ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/handler/CompactionCleaner.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ private void cleanUsingLocation(CompactionInfo ci, String path, boolean requires
198198
deleted = fsRemover.clean(getCleaningRequestBasedOnLocation(ci, path));
199199
}
200200
if (!deleted.isEmpty()) {
201+
ci.setSoftDelete(true);
201202
txnHandler.markCleaned(ci);
202203
} else {
203204
txnHandler.clearCleanerStart(ci);

standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/entities/CompactionInfo.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ public class CompactionInfo implements Comparable<CompactionInfo> {
8787
private String fullPartitionName = null;
8888
private String fullTableName = null;
8989
private StringableMap propertiesMap;
90+
private boolean softDelete;
9091

9192
public CompactionInfo(String dbname, String tableName, String partName, CompactionType type) {
9293
this.dbname = dbname;
@@ -190,6 +191,7 @@ public String toString() {
190191
.append("numberOfBuckets", numberOfBuckets)
191192
.append("orderByClause", orderByClause)
192193
.append("minOpenWriteTxnId", minOpenWriteTxnId)
194+
.append("softDelete", softDelete)
193195
.build();
194196
}
195197

@@ -368,4 +370,12 @@ public void setWriteIds(boolean hasUncompactedAborts, Set<Long> writeIds) {
368370
public boolean isAbortedTxnCleanup() {
369371
return type == CompactionType.ABORT_TXN_CLEANUP;
370372
}
373+
374+
public void setSoftDelete(boolean softDelete) {
375+
this.softDelete = softDelete;
376+
}
377+
378+
public boolean isSoftDelete() {
379+
return softDelete;
380+
}
371381
}

standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/txn/jdbc/functions/MarkCleanedFunction.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ public MarkCleanedFunction(CompactionInfo info) {
5050
public Void execute(MultiDataSourceJdbcResource jdbcResource) throws MetaException {
5151
NamedParameterJdbcTemplate jdbcTemplate = jdbcResource.getJdbcTemplate();
5252
MapSqlParameterSource param;
53+
if (info.isSoftDelete()) {
54+
// Remove compaction queue record and return
55+
removeCompactionAndAbortRetryEntries(info, jdbcTemplate);
56+
return null;
57+
}
58+
5359
if (!info.isAbortedTxnCleanup()) {
5460
param = new MapSqlParameterSource()
5561
.addValue("id", info.id)

0 commit comments

Comments
 (0)