You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by we...@apache.org on 2023/04/19 20:41:39 UTC

[ozone] branch ozone-1.3 updated: HDDS-8292. Inconsistent key name handling for FSO bucket files. (#4531)

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

weichiu pushed a commit to branch ozone-1.3
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/ozone-1.3 by this push:
     new bf476dc984 HDDS-8292. Inconsistent key name handling for FSO bucket files. (#4531)
bf476dc984 is described below

commit bf476dc9844a01b6c037369e45544055a744f700
Author: ashishkumar50 <11...@users.noreply.github.com>
AuthorDate: Sat Apr 15 04:19:03 2023 +0530

    HDDS-8292. Inconsistent key name handling for FSO bucket files. (#4531)
    
    (cherry picked from commit d34322f66285fc3016e601f4f995c62452656821)
---
 .../hadoop/ozone/om/helpers/OmDirectoryInfo.java   | 25 ++++++++++++++++-
 .../apache/hadoop/ozone/om/helpers/OmKeyInfo.java  | 32 +++++++++++++++++++++-
 .../hadoop/ozone/om/OzoneListStatusHelper.java     |  6 ++++
 3 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmDirectoryInfo.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmDirectoryInfo.java
index 75f90f8513..5cc5160273 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmDirectoryInfo.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmDirectoryInfo.java
@@ -24,6 +24,7 @@ import org.apache.hadoop.ozone.protocol.proto.OzoneManagerProtocolProtos;
 import java.util.BitSet;
 import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -33,7 +34,7 @@ import java.util.Objects;
  * in the user given path and a pointer to its parent directory element in the
  * path. Also, it stores directory node related metdata details.
  */
-public class OmDirectoryInfo extends WithParentObjectId {
+public class OmDirectoryInfo extends WithParentObjectId implements Cloneable {
   private String name; // directory name
 
   private long creationTime;
@@ -266,4 +267,26 @@ public class OmDirectoryInfo extends WithParentObjectId {
 
     return builder.build();
   }
+
+  /**
+   * Return a new copy of the object.
+   */
+  @Override
+  public Object clone() throws CloneNotSupportedException {
+    OmDirectoryInfo omDirectoryInfo = (OmDirectoryInfo) super.clone();
+
+    omDirectoryInfo.metadata = new HashMap<>();
+    omDirectoryInfo.acls = new ArrayList<>();
+
+    acls.stream().filter(acl -> acl != null).forEach(acl ->
+            omDirectoryInfo.acls.add(new OzoneAcl(acl.getType(),
+                    acl.getName(), (BitSet) acl.getAclBitSet().clone(),
+                    acl.getAclScope())));
+
+    if (metadata != null) {
+      metadata.forEach((k, v) -> omDirectoryInfo.metadata.put(k, v));
+    }
+
+    return omDirectoryInfo;
+  }
 }
diff --git a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyInfo.java b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyInfo.java
index f8f589af2e..e8c0acf1aa 100644
--- a/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyInfo.java
+++ b/hadoop-ozone/common/src/main/java/org/apache/hadoop/ozone/om/helpers/OmKeyInfo.java
@@ -48,7 +48,7 @@ import org.slf4j.LoggerFactory;
  * This is returned from OM to client, and client use class to talk to
  * datanode. Also, this is the metadata written to om.db on server side.
  */
-public final class OmKeyInfo extends WithParentObjectId {
+public final class OmKeyInfo extends WithParentObjectId implements Cloneable {
   private static final Logger LOG = LoggerFactory.getLogger(OmKeyInfo.class);
   private final String volumeName;
   private final String bucketName;
@@ -758,6 +758,36 @@ public final class OmKeyInfo extends WithParentObjectId {
     return builder.build();
   }
 
+  /**
+   * Return a new copy of the object.
+   */
+  @Override
+  public Object clone() throws CloneNotSupportedException {
+    OmKeyInfo omKeyInfo = (OmKeyInfo) super.clone();
+
+    omKeyInfo.metadata = new HashMap<>();
+    omKeyInfo.keyLocationVersions = new ArrayList<>();
+    omKeyInfo.acls = new ArrayList<>();
+
+    keyLocationVersions.stream().filter(keyLocationVersion ->
+            keyLocationVersion != null).forEach(keyLocationVersion ->
+            omKeyInfo.keyLocationVersions.add(
+                    new OmKeyLocationInfoGroup(keyLocationVersion.getVersion(),
+                            keyLocationVersion.getLocationList(),
+                            keyLocationVersion.isMultipartKey())));
+
+    acls.stream().filter(acl -> acl != null).forEach(acl ->
+            omKeyInfo.acls.add(new OzoneAcl(acl.getType(),
+                    acl.getName(), (BitSet) acl.getAclBitSet().clone(),
+                    acl.getAclScope())));
+
+    if (metadata != null) {
+      metadata.forEach((k, v) -> omKeyInfo.metadata.put(k, v));
+    }
+
+    return omKeyInfo;
+  }
+
   /**
    * Method to clear the fileEncryptionInfo.
    * This method is called when a KeyDelete operation is performed.
diff --git a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneListStatusHelper.java b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneListStatusHelper.java
index 7558ab85bd..51d79fb757 100644
--- a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneListStatusHelper.java
+++ b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/OzoneListStatusHelper.java
@@ -18,6 +18,7 @@ package org.apache.hadoop.ozone.om;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hdds.utils.db.Table;
 import org.apache.hadoop.hdds.utils.db.TableIterator;
@@ -444,6 +445,11 @@ public class OzoneListStatusHelper {
           continue;
         }
 
+        // Copy cache value to local copy and work on it
+        Value copyOmInfo = ObjectUtils.clone(cacheOmInfo);
+        if (copyOmInfo != null) {
+          cacheOmInfo = copyOmInfo;
+        }
         if (StringUtils.isBlank(startKey)) {
           // startKey is null or empty, then the seekKeyInDB="1024/"
           if (cacheKey.startsWith(prefixKey)) {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org