This is an automated email from the ASF dual-hosted git repository.
prashantpogde pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new 534160f96c HDDS-8408. [Snapshot] Implement 'ozone fs' command for
deleting snapshots (#4948)
534160f96c is described below
commit 534160f96c5dae071192ddb809261ec7905ddbcd
Author: Aswin Shakil Balasubramanian <[email protected]>
AuthorDate: Wed Jun 21 19:40:30 2023 -0700
HDDS-8408. [Snapshot] Implement 'ozone fs' command for deleting snapshots
(#4948)
---
.../hadoop/fs/ozone/TestOzoneFsSnapshot.java | 28 ++++++++++++++++++++++
.../fs/ozone/BasicOzoneClientAdapterImpl.java | 9 +++++++
.../hadoop/fs/ozone/BasicOzoneFileSystem.java | 6 +++++
.../ozone/BasicRootedOzoneClientAdapterImpl.java | 9 +++++++
.../fs/ozone/BasicRootedOzoneFileSystem.java | 6 +++++
.../apache/hadoop/fs/ozone/OzoneClientAdapter.java | 2 ++
6 files changed, 60 insertions(+)
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFsSnapshot.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFsSnapshot.java
index 20a728719e..4c286e8575 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFsSnapshot.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFsSnapshot.java
@@ -285,6 +285,34 @@ public class TestOzoneFsSnapshot {
Assertions.assertTrue(listSnapKeyOut.contains(snapshotKeyPath));
}
+ @Test
+ public void testSnapshotDeleteSuccess() throws Exception {
+ String snapshotName = createSnapshot();
+ // Delete the created snapshot
+ int res = ToolRunner.run(shell,
+ new String[]{"-deleteSnapshot", BUCKET_PATH, snapshotName});
+ // Asserts that delete request succeeded
+ Assertions.assertEquals(0, res);
+
+ // Wait for the snapshot to be marked deleted.
+ SnapshotInfo snapshotInfo = ozoneManager.getMetadataManager()
+ .getSnapshotInfoTable()
+ .get(SnapshotInfo.getTableKey(VOLUME, BUCKET, snapshotName));
+
+ GenericTestUtils.waitFor(() -> snapshotInfo.getSnapshotStatus().equals(
+ SnapshotInfo.SnapshotStatus.SNAPSHOT_DELETED),
+ 200, 10000);
+ }
+
+ @Test
+ public void testSnapshotDeleteFailure() throws Exception {
+ // Delete snapshot that doesn't exist
+ String deleteSnapshotOut = execShellCommandAndGetOutput(1,
+ new String[]{"-deleteSnapshot", BUCKET_PATH, "testsnap"});
+ Assertions.assertTrue(deleteSnapshotOut
+ .contains("Snapshot does not exist"));
+ }
+
/**
* Execute a shell command with provided arguments
* and return a string of the output.
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneClientAdapterImpl.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneClientAdapterImpl.java
index 286e016b8e..cf4d059e9f 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneClientAdapterImpl.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneClientAdapterImpl.java
@@ -654,6 +654,15 @@ public class BasicOzoneClientAdapterImpl implements
OzoneClientAdapter {
snapshotName);
}
+ @Override
+ public void deleteSnapshot(String pathStr, String snapshotName)
+ throws IOException {
+ OFSPath ofsPath = new OFSPath(pathStr, config);
+ objectStore.deleteSnapshot(ofsPath.getVolumeName(),
+ ofsPath.getBucketName(),
+ snapshotName);
+ }
+
@Override
public SnapshotDiffReport getSnapshotDiffReport(Path snapshotDir,
String fromSnapshot, String toSnapshot)
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
index 573ffcd461..9b654062da 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicOzoneFileSystem.java
@@ -938,6 +938,12 @@ public class BasicOzoneFileSystem extends FileSystem {
OM_SNAPSHOT_INDICATOR + OZONE_URI_DELIMITER + snapshot);
}
+ @Override
+ public void deleteSnapshot(Path path, String snapshotName)
+ throws IOException {
+ adapter.deleteSnapshot(pathToKey(path), snapshotName);
+ }
+
@Override
public void setTimes(Path f, long mtime, long atime) throws IOException {
incrementCounter(Statistic.INVOCATION_SET_TIMES, 1);
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
index 923899404d..0e4d0736cd 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneClientAdapterImpl.java
@@ -1304,6 +1304,15 @@ public class BasicRootedOzoneClientAdapterImpl
snapshotName);
}
+ @Override
+ public void deleteSnapshot(String pathStr, String snapshotName)
+ throws IOException {
+ OFSPath ofsPath = new OFSPath(pathStr, config);
+ proxy.deleteSnapshot(ofsPath.getVolumeName(),
+ ofsPath.getBucketName(),
+ snapshotName);
+ }
+
@Override
public SnapshotDiffReport getSnapshotDiffReport(Path snapshotDir,
String fromSnapshot, String toSnapshot)
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
index 4934bb341c..2639a8f05d 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/BasicRootedOzoneFileSystem.java
@@ -513,6 +513,12 @@ public class BasicRootedOzoneFileSystem extends FileSystem
{
OM_SNAPSHOT_INDICATOR + OZONE_URI_DELIMITER + snapshot);
}
+ @Override
+ public void deleteSnapshot(Path path, String snapshotName)
+ throws IOException {
+ adapter.deleteSnapshot(pathToKey(path), snapshotName);
+ }
+
private class DeleteIterator extends OzoneListingIterator {
private final boolean recursive;
private final OzoneBucket bucket;
diff --git
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java
index afc8fd39e2..80cc50b9b9 100644
---
a/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java
+++
b/hadoop-ozone/ozonefs-common/src/main/java/org/apache/hadoop/fs/ozone/OzoneClientAdapter.java
@@ -88,6 +88,8 @@ public interface OzoneClientAdapter {
String createSnapshot(String pathStr, String snapshotName) throws
IOException;
+ void deleteSnapshot(String pathStr, String snapshotName) throws IOException;
+
SnapshotDiffReport getSnapshotDiffReport(Path snapshotDir,
String fromSnapshot, String toSnapshot)
throws IOException, InterruptedException;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]