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

sshenoy 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 5eead92666 HDDS-7592. Recursive delete of directory multiple time 
impacts some directory not removed (#4068)
5eead92666 is described below

commit 5eead92666b374c4bb912f332488acb23f9a81df
Author: Sumit Agrawal <[email protected]>
AuthorDate: Thu Dec 15 11:41:37 2022 +0530

    HDDS-7592. Recursive delete of directory multiple time impacts some 
directory not removed (#4068)
---
 .../java/org/apache/hadoop/ozone/om/OMMetadataManager.java     | 10 ++++++++++
 .../java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java |  5 +++++
 .../om/response/key/OMDirectoriesPurgeResponseWithFSO.java     |  4 +++-
 .../ozone/om/response/key/OMKeyDeleteResponseWithFSO.java      |  4 +++-
 .../ozone/om/response/key/OMKeysDeleteResponseWithFSO.java     |  4 +++-
 .../hadoop/ozone/om/service/DirectoryDeletingService.java      |  4 +++-
 .../ozone/om/response/key/TestOMKeysDeleteResponseWithFSO.java |  7 ++++++-
 7 files changed, 33 insertions(+), 5 deletions(-)

diff --git 
a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java
 
b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java
index 469170475d..53080aa4a9 100644
--- 
a/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java
+++ 
b/hadoop-ozone/interface-storage/src/main/java/org/apache/hadoop/ozone/om/OMMetadataManager.java
@@ -448,6 +448,16 @@ public interface OMMetadataManager extends 
DBStoreHAManager {
   String getOzonePathKey(long volumeId, long bucketId,
                          long parentObjectId, String pathComponentName);
 
+  /**
+   * Given ozone path key, component id, return the corresponding 
+   * DB path key for delete table.
+   *
+   * @param objectId - object Id
+   * @param pathKey   - path key of component
+   * @return DB Delete directory key as String.
+   */
+  String getOzoneDeletePathKey(long objectId, String pathKey);
+
   /**
    * Returns DB key name of an open file in OM metadata store. Should be
    * #open# prefix followed by actual leaf node name.
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
index c499d1e386..247e657170 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OmMetadataManagerImpl.java
@@ -1452,6 +1452,11 @@ public class OmMetadataManagerImpl implements 
OMMetadataManager {
     return builder.toString();
   }
 
+  @Override
+  public String getOzoneDeletePathKey(long objectId, String pathKey) {
+    return pathKey + OM_KEY_PREFIX + objectId;
+  }
+
   @Override
   public String getOpenFileName(long volumeId, long bucketId,
                                 long parentID, String fileName,
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMDirectoriesPurgeResponseWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMDirectoriesPurgeResponseWithFSO.java
index eed768fbb0..b89d56dc04 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMDirectoriesPurgeResponseWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMDirectoriesPurgeResponseWithFSO.java
@@ -85,8 +85,10 @@ public class OMDirectoriesPurgeResponseWithFSO extends 
OmKeyResponse {
         OmKeyInfo keyInfo = OmKeyInfo.getFromProtobuf(key);
         String ozoneDbKey = omMetadataManager.getOzonePathKey(volumeId,
                 bucketId, keyInfo.getParentObjectID(), keyInfo.getFileName());
+        String ozoneDeleteKey = omMetadataManager.getOzoneDeletePathKey(
+            key.getObjectID(), ozoneDbKey);
         omMetadataManager.getDeletedDirTable().putWithBatch(batchOperation,
-                ozoneDbKey, keyInfo);
+            ozoneDeleteKey, keyInfo);
 
         omMetadataManager.getDirectoryTable().deleteWithBatch(batchOperation,
                 ozoneDbKey);
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyDeleteResponseWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyDeleteResponseWithFSO.java
index 22f1702836..e18bcaae1f 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyDeleteResponseWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeyDeleteResponseWithFSO.java
@@ -84,8 +84,10 @@ public class OMKeyDeleteResponseWithFSO extends 
OMKeyDeleteResponse {
       // Sets full absolute key name to OmKeyInfo, which is
       // required for moving the sub-files to KeyDeletionService.
       omKeyInfo.setKeyName(keyName);
+      String ozoneDeleteKey = omMetadataManager.getOzoneDeletePathKey(
+          omKeyInfo.getObjectID(), ozoneDbKey);
       omMetadataManager.getDeletedDirTable().putWithBatch(
-          batchOperation, ozoneDbKey, omKeyInfo);
+          batchOperation, ozoneDeleteKey, omKeyInfo);
     } else {
       Table<String, OmKeyInfo> keyTable =
           omMetadataManager.getKeyTable(getBucketLayout());
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeysDeleteResponseWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeysDeleteResponseWithFSO.java
index d0d98e1f54..612fa36618 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeysDeleteResponseWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/response/key/OMKeysDeleteResponseWithFSO.java
@@ -70,8 +70,10 @@ public class OMKeysDeleteResponseWithFSO extends 
OMKeysDeleteResponse {
           omKeyInfo.getParentObjectID(), omKeyInfo.getFileName());
       omMetadataManager.getDirectoryTable().deleteWithBatch(batchOperation,
           ozoneDbKey);
+      String ozoneDeleteKey = omMetadataManager.getOzoneDeletePathKey(
+          omKeyInfo.getObjectID(), ozoneDbKey);
       omMetadataManager.getDeletedDirTable().putWithBatch(
-          batchOperation, ozoneDbKey, omKeyInfo);
+          batchOperation, ozoneDeleteKey, omKeyInfo);
     }
 
     // remove keys from FileTable and add to DeletedTable
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/DirectoryDeletingService.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/DirectoryDeletingService.java
index 89f7a5bb06..3a633f2551 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/DirectoryDeletingService.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/service/DirectoryDeletingService.java
@@ -252,7 +252,9 @@ public class DirectoryDeletingService extends 
BackgroundService {
     for (OmKeyInfo dirInfo : subDirs) {
       String ozoneDbKey = omMetadataManager.getOzonePathKey(volumeId,
           bucketId, dirInfo.getParentObjectID(), dirInfo.getFileName());
-      subDirList.add(Pair.of(ozoneDbKey, dirInfo));
+      String ozoneDeleteKey = omMetadataManager.getOzoneDeletePathKey(
+          dirInfo.getObjectID(), ozoneDbKey);
+      subDirList.add(Pair.of(ozoneDeleteKey, dirInfo));
       LOG.debug("Moved sub dir name: {}", dirInfo.getKeyName());
     }
 
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/key/TestOMKeysDeleteResponseWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/key/TestOMKeysDeleteResponseWithFSO.java
index 9d17220631..6127c50533 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/key/TestOMKeysDeleteResponseWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/response/key/TestOMKeysDeleteResponseWithFSO.java
@@ -53,6 +53,7 @@ public class TestOMKeysDeleteResponseWithFSO
 
   private List<OmKeyInfo> dirDeleteList = new ArrayList<>();
   private List<String> dirDBKeys = new ArrayList<>();
+  private List<String> dirDelDBKeys = new ArrayList<>();
   private long volId;
 
   @Override
@@ -82,6 +83,8 @@ public class TestOMKeysDeleteResponseWithFSO
         bucketName, dirInfo, dir);
     dirDeleteList.add(dirKeyInfo);
     dirDBKeys.add(dirOzoneDBKey);
+    dirDelDBKeys.add(omMetadataManager.getOzoneDeletePathKey(
+        dirKeyInfo.getObjectID(), dirOzoneDBKey));
 
     // create set of keys directly under the bucket
     String ozoneDBKey = "";
@@ -150,10 +153,12 @@ public class TestOMKeysDeleteResponseWithFSO
       RepeatedOmKeyInfo repeatedOmKeyInfo =
           omMetadataManager.getDeletedTable().get(dirDBKey);
       Assert.assertNull(repeatedOmKeyInfo);
+    }
 
+    for (String dirDelDBKey : dirDelDBKeys) {
       // dir added to the deleted dir table, for deep cleanups
       OmKeyInfo omDirInfo =
-          omMetadataManager.getDeletedDirTable().get(dirDBKey);
+          omMetadataManager.getDeletedDirTable().get(dirDelDBKey);
       Assert.assertNotNull(omDirInfo);
     }
 


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

Reply via email to