This is an automated email from the ASF dual-hosted git repository.

aswinshakil 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 461407c991 HDDS-8684. [Snapshot] Skip non-active snapshots while 
walking snapshot chain for deletion processing. (#4837)
461407c991 is described below

commit 461407c991f1cfb83112aafd40a6cf3bb91a5976
Author: Aswin Shakil Balasubramanian <[email protected]>
AuthorDate: Wed Jun 7 11:44:27 2023 -0700

    HDDS-8684. [Snapshot] Skip non-active snapshots while walking snapshot 
chain for deletion processing. (#4837)
---
 .../ozone/om/service/SnapshotDeletingService.java  | 23 ++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
index bca9218ffd..fb81d083dc 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/SnapshotDeletingService.java
@@ -187,7 +187,7 @@ public class SnapshotDeletingService extends 
AbstractKeyDeletingService {
           }
 
           //TODO: [SNAPSHOT] Add lock to deletedTable and Active DB.
-          SnapshotInfo previousSnapshot = getPreviousSnapshot(snapInfo);
+          SnapshotInfo previousSnapshot = getPreviousActiveSnapshot(snapInfo);
           Table<String, OmKeyInfo> previousKeyTable = null;
           Table<String, OmDirectoryInfo> previousDirTable = null;
           OmSnapshot omPreviousSnapshot = null;
@@ -537,14 +537,21 @@ public class SnapshotDeletingService extends 
AbstractKeyDeletingService {
       return prevKeyInfo.getObjectID() != deletedKeyInfo.getObjectID();
     }
 
-    private SnapshotInfo getPreviousSnapshot(SnapshotInfo snapInfo)
+    private SnapshotInfo getPreviousActiveSnapshot(SnapshotInfo snapInfo)
         throws IOException {
-      if (chainManager.hasPreviousPathSnapshot(snapInfo.getSnapshotPath(),
-          snapInfo.getSnapshotID())) {
-        String previousPathSnapshot = chainManager.previousPathSnapshot(
-            snapInfo.getSnapshotPath(), snapInfo.getSnapshotID());
-        String tableKey = chainManager.getTableKey(previousPathSnapshot);
-        return omSnapshotManager.getSnapshotInfo(tableKey);
+      SnapshotInfo currSnapInfo = snapInfo;
+      while (chainManager.hasPreviousPathSnapshot(
+          currSnapInfo.getSnapshotPath(), currSnapInfo.getSnapshotID())) {
+
+        String prevPathSnapshot = chainManager.previousPathSnapshot(
+            currSnapInfo.getSnapshotPath(), currSnapInfo.getSnapshotID());
+        String tableKey = chainManager.getTableKey(prevPathSnapshot);
+        SnapshotInfo prevSnapInfo = 
omSnapshotManager.getSnapshotInfo(tableKey);
+        if (prevSnapInfo.getSnapshotStatus().equals(
+            SnapshotInfo.SnapshotStatus.SNAPSHOT_ACTIVE)) {
+          return prevSnapInfo;
+        }
+        currSnapInfo = prevSnapInfo;
       }
       return null;
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to