diff --git a/hive-metastore/src/main/java/org/apache/iceberg/hive/HiveTableOperations.java b/hive-metastore/src/main/java/org/apache/iceberg/hive/HiveTableOperations.java index 647c6260a4e7..8b415dc4554b 100644 --- a/hive-metastore/src/main/java/org/apache/iceberg/hive/HiveTableOperations.java +++ b/hive-metastore/src/main/java/org/apache/iceberg/hive/HiveTableOperations.java @@ -288,8 +288,7 @@ protected void doCommit(TableMetadata base, TableMetadata metadata) { throw new RuntimeException("Interrupted during commit", e); } finally { - cleanupMetadataAndUnlock(commitStatus, newMetadataLocation, lockId); - tableLevelMutex.unlock(); + cleanupMetadataAndUnlock(commitStatus, newMetadataLocation, lockId, tableLevelMutex); } } @@ -471,7 +470,8 @@ long acquireLock() throws UnknownHostException, TException, InterruptedException return lockId; } - private void cleanupMetadataAndUnlock(CommitStatus commitStatus, String metadataLocation, Optional lockId) { + private void cleanupMetadataAndUnlock(CommitStatus commitStatus, String metadataLocation, Optional lockId, + ReentrantLock tableLevelMutex) { try { if (commitStatus == CommitStatus.FAILURE) { // If we are sure the commit failed, clean up the uncommitted metadata file @@ -482,6 +482,7 @@ private void cleanupMetadataAndUnlock(CommitStatus commitStatus, String metadata throw e; } finally { unlock(lockId); + tableLevelMutex.unlock(); } }