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