diff --git a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java index 3300207a280..e16926e76dc 100644 --- a/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java +++ b/services/secondary-storage/server/src/main/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResource.java @@ -1997,6 +1997,16 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S } } + protected String getSnapshotFilepathForDelete(String path, String snapshotName) { + if (!path.endsWith(snapshotName)) { + return path + "/*" + snapshotName + "*"; + } + if (s_logger.isDebugEnabled()) { + s_logger.debug(String.format("Snapshot file %s is present in the same name directory %s. Deleting the directory", snapshotName, path)); + } + return path; + } + protected Answer deleteSnapshot(final DeleteCommand cmd) { DataTO obj = cmd.getData(); DataStoreTO dstore = obj.getDataStore(); @@ -2033,7 +2043,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S return new Answer(cmd, true, details); } // delete snapshot in the directory if exists - String lPath = absoluteSnapshotPath + "/*" + snapshotName + "*"; + String lPath = getSnapshotFilepathForDelete(absoluteSnapshotPath, snapshotName); String result = deleteLocalFile(lPath); if (result != null) { details = "failed to delete snapshot " + lPath + " , err=" + result; diff --git a/services/secondary-storage/server/src/test/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java b/services/secondary-storage/server/src/test/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java index 5ca17b0638d..96afcce747b 100644 --- a/services/secondary-storage/server/src/test/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java +++ b/services/secondary-storage/server/src/test/java/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java @@ -91,4 +91,21 @@ public class NfsSecondaryStorageResourceTest { testLogAppender.assertMessagesLogged(); } + + private void performGetSnapshotFilepathForDeleteTest(String expected, String path, String name) { + Assert.assertEquals("Incorrect resultant snapshot delete path", expected, resource.getSnapshotFilepathForDelete(path, name)); + } + + @Test + public void testGetSnapshotFilepathForDelete() { + performGetSnapshotFilepathForDeleteTest("/snapshots/2/10/somename", + "/snapshots/2/10/somename", + "somename"); + performGetSnapshotFilepathForDeleteTest("/snapshots/2/10/diffName/*diffname*", + "/snapshots/2/10/diffName", + "diffname"); + performGetSnapshotFilepathForDeleteTest("/snapshots/2/10/*somename*", + "/snapshots/2/10", + "somename"); + } }