From cd79634ac4f4daa65b2b72749e7e4013282f9568 Mon Sep 17 00:00:00 2001 From: saketa Date: Mon, 11 Aug 2025 16:54:35 -0700 Subject: [PATCH 1/2] HDDS-13554. Cleaning up snapshot local YAML file on Snapshot purge. --- .../om/response/snapshot/OMSnapshotPurgeResponse.java | 9 +++++++-- .../snapshot/TestOMSnapshotPurgeRequestAndResponse.java | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotPurgeResponse.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotPurgeResponse.java index 2503b291c00e..ef3555f54350 100644 --- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotPurgeResponse.java +++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/snapshot/OMSnapshotPurgeResponse.java @@ -23,7 +23,9 @@ import com.google.common.annotations.VisibleForTesting; import jakarta.annotation.Nonnull; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; @@ -125,11 +127,14 @@ private void deleteCheckpointDirectory(OMMetadataManager omMetadataManager, boolean acquiredSnapshotLock = omLockDetails.isLockAcquired(); if (acquiredSnapshotLock) { Path snapshotDirPath = OmSnapshotManager.getSnapshotPath(omMetadataManager, snapshotInfo); + Path snapshotLocalDataPath = Paths.get( + OmSnapshotManager.getSnapshotLocalPropertyYamlPath(omMetadataManager, snapshotInfo)); try { FileUtils.deleteDirectory(snapshotDirPath.toFile()); + Files.deleteIfExists(snapshotLocalDataPath); } catch (IOException ex) { - LOG.error("Failed to delete snapshot directory {} for snapshot {}", - snapshotDirPath, snapshotInfo.getTableKey(), ex); + LOG.error("Failed to delete snapshot directory {} and/or local data file {} for snapshot {}", + snapshotDirPath, snapshotLocalDataPath, snapshotInfo.getTableKey(), ex); } finally { omMetadataManager.getLock().releaseWriteLock(SNAPSHOT_DB_LOCK, snapshotInfo.getSnapshotId().toString()); } diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java index a986d89260a9..890723e84ac5 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java @@ -46,6 +46,7 @@ import org.apache.hadoop.hdds.utils.db.CodecException; import org.apache.hadoop.hdds.utils.db.Table; import org.apache.hadoop.ozone.om.OmMetadataManagerImpl; +import org.apache.hadoop.ozone.om.OmSnapshotManager; import org.apache.hadoop.ozone.om.SnapshotChainManager; import org.apache.hadoop.ozone.om.helpers.SnapshotInfo; import org.apache.hadoop.ozone.om.request.OMRequestTestUtils; @@ -180,6 +181,7 @@ public void testValidateAndUpdateCache() throws Exception { // Check if all the checkpoints are cleared. for (Path checkpoint : checkpointPaths) { assertFalse(Files.exists(checkpoint)); + assertFalse(OmSnapshotManager.getSnapshotLocalPropertyYamlPath(checkpoint)); } assertEquals(initialSnapshotPurgeCount + 1, getOmSnapshotIntMetrics().getNumSnapshotPurges()); assertEquals(initialSnapshotPurgeFailCount, getOmSnapshotIntMetrics().getNumSnapshotPurgeFails()); From 1ddc19449aae043fbee04534c929a2c88d04253f Mon Sep 17 00:00:00 2001 From: saketa Date: Tue, 12 Aug 2025 13:37:19 -0700 Subject: [PATCH 2/2] HDDS-13554. Updated unit test. --- .../TestOMSnapshotPurgeRequestAndResponse.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java index 890723e84ac5..d2ceb5a44786 100644 --- a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java +++ b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/snapshot/TestOMSnapshotPurgeRequestAndResponse.java @@ -32,6 +32,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -158,6 +159,14 @@ public void testValidateAndUpdateCache() throws Exception { List snapshotDbKeysToPurge = createSnapshots(10); assertFalse(getOmMetadataManager().getSnapshotInfoTable().isEmpty()); + + // Check if all the checkpoints are created. + for (Path checkpoint : checkpointPaths) { + assertTrue(Files.exists(checkpoint)); + assertTrue(Files.exists(Paths.get( + OmSnapshotManager.getSnapshotLocalPropertyYamlPath(checkpoint)))); + } + OMRequest snapshotPurgeRequest = createPurgeKeysRequest( snapshotDbKeysToPurge); @@ -181,7 +190,8 @@ public void testValidateAndUpdateCache() throws Exception { // Check if all the checkpoints are cleared. for (Path checkpoint : checkpointPaths) { assertFalse(Files.exists(checkpoint)); - assertFalse(OmSnapshotManager.getSnapshotLocalPropertyYamlPath(checkpoint)); + assertFalse(Files.exists(Paths.get( + OmSnapshotManager.getSnapshotLocalPropertyYamlPath(checkpoint)))); } assertEquals(initialSnapshotPurgeCount + 1, getOmSnapshotIntMetrics().getNumSnapshotPurges()); assertEquals(initialSnapshotPurgeFailCount, getOmSnapshotIntMetrics().getNumSnapshotPurgeFails());