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

adoroszlai 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 d03ef0d29f3 HDDS-14122. Make OmKeyInfo ACL list immutable (#9486)
d03ef0d29f3 is described below

commit d03ef0d29f34c3f4ad358b1be3e582d1b79767ae
Author: Eric C. Ho <[email protected]>
AuthorDate: Sat Dec 13 13:52:06 2025 +0800

    HDDS-14122. Make OmKeyInfo ACL list immutable (#9486)
---
 .../apache/hadoop/ozone/om/helpers/OmKeyInfo.java  | 34 ++++++++++------------
 .../hadoop/ozone/om/helpers/TestOmKeyInfo.java     |  8 +++--
 .../ozone/om/request/key/acl/OMKeyAclRequest.java  | 16 +++++-----
 .../om/request/key/acl/OMKeyAclRequestWithFSO.java | 18 +++++++-----
 .../om/request/key/acl/OMKeyAddAclRequest.java     |  4 +--
 .../request/key/acl/OMKeyAddAclRequestWithFSO.java |  4 +--
 .../om/request/key/acl/OMKeyRemoveAclRequest.java  |  4 +--
 .../key/acl/OMKeyRemoveAclRequestWithFSO.java      |  4 +--
 .../om/request/key/acl/OMKeySetAclRequest.java     |  4 +--
 .../request/key/acl/OMKeySetAclRequestWithFSO.java |  4 +--
 .../ozone/om/service/DirectoryDeletingService.java |  8 +++--
 .../om/request/key/TestOMKeyCommitRequest.java     |  8 ++---
 .../ozone/security/acl/OzoneNativeAclTestUtil.java | 14 +++++----
 13 files changed, 69 insertions(+), 61 deletions(-)

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 a600894f63b..acae1fd4fd6 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
@@ -24,7 +24,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
-import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.function.Consumer;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
@@ -94,7 +93,7 @@ public final class OmKeyInfo extends WithParentObjectId
   /**
    * ACL Information.
    */
-  private final CopyOnWriteArrayList<OzoneAcl> acls;
+  private final ImmutableList<OzoneAcl> acls;
 
   /**
    * Used for S3 tags.
@@ -120,7 +119,7 @@ private OmKeyInfo(Builder b) {
     this.modificationTime = b.modificationTime;
     this.replicationConfig = b.replicationConfig;
     this.encInfo = b.encInfo;
-    this.acls = new CopyOnWriteArrayList<>(b.acls);
+    this.acls = b.acls.build();
     this.fileChecksum = b.fileChecksum;
     this.fileName = b.fileName;
     this.isFile = b.isFile;
@@ -442,19 +441,7 @@ public FileEncryptionInfo getFileEncryptionInfo() {
   }
 
   public List<OzoneAcl> getAcls() {
-    return ImmutableList.copyOf(acls);
-  }
-
-  public boolean addAcl(OzoneAcl acl) {
-    return OzoneAclUtil.addAcl(acls, acl);
-  }
-
-  public boolean removeAcl(OzoneAcl acl) {
-    return OzoneAclUtil.removeAcl(acls, acl);
-  }
-
-  public boolean setAcls(List<OzoneAcl> newAcls) {
-    return OzoneAclUtil.setAcl(acls, newAcls);
+    return acls;
   }
 
   public void setReplicationConfig(ReplicationConfig repConfig) {
@@ -499,7 +486,7 @@ public static class Builder extends 
WithParentObjectId.Builder<OmKeyInfo> {
     private long modificationTime;
     private ReplicationConfig replicationConfig;
     private FileEncryptionInfo encInfo;
-    private final List<OzoneAcl> acls = new ArrayList<>();
+    private final AclListBuilder acls;
     // not persisted to DB. FileName will be the last element in path keyName.
     private String fileName;
     private FileChecksum fileChecksum;
@@ -509,10 +496,16 @@ public static class Builder extends 
WithParentObjectId.Builder<OmKeyInfo> {
     private Long expectedDataGeneration = null;
 
     public Builder() {
+      this(AclListBuilder.empty());
+    }
+
+    private Builder(AclListBuilder acls) {
+      this.acls = acls;
     }
 
     public Builder(OmKeyInfo obj) {
       super(obj);
+      this.acls = AclListBuilder.of(obj.acls);
       this.volumeName = obj.volumeName;
       this.bucketName = obj.bucketName;
       this.keyName = obj.keyName;
@@ -529,7 +522,6 @@ public Builder(OmKeyInfo obj) {
       if (obj.getTags() != null) {
         this.tags.putAll(obj.getTags());
       }
-      this.acls.addAll(obj.getAcls());
       obj.keyLocationVersions.forEach(keyLocationVersion ->
           this.omKeyLocationInfoGroups.add(
               new OmKeyLocationInfoGroup(keyLocationVersion.getVersion(),
@@ -621,11 +613,15 @@ public Builder setFileEncryptionInfo(FileEncryptionInfo 
feInfo) {
 
     public Builder setAcls(List<OzoneAcl> listOfAcls) {
       if (listOfAcls != null) {
-        this.acls.addAll(listOfAcls);
+        this.acls.set(listOfAcls);
       }
       return this;
     }
 
+    public AclListBuilder acls() {
+      return acls;
+    }
+
     public Builder addAcl(OzoneAcl ozoneAcl) {
       if (ozoneAcl != null) {
         this.acls.add(ozoneAcl);
diff --git 
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/helpers/TestOmKeyInfo.java
 
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/helpers/TestOmKeyInfo.java
index 9e293d0f5b2..37670634bf9 100644
--- 
a/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/helpers/TestOmKeyInfo.java
+++ 
b/hadoop-ozone/common/src/test/java/org/apache/hadoop/ozone/om/helpers/TestOmKeyInfo.java
@@ -189,9 +189,11 @@ private void createdAndTest(boolean isMPU) {
       }
     }
 
-    key.setAcls(Arrays.asList(OzoneAcl.of(
-        IAccessAuthorizer.ACLIdentityType.USER, "user1",
-        ACCESS, IAccessAuthorizer.ACLType.WRITE)));
+    key = key.toBuilder()
+        .setAcls(Arrays.asList(OzoneAcl.of(
+            IAccessAuthorizer.ACLIdentityType.USER, "user1",
+            ACCESS, IAccessAuthorizer.ACLType.WRITE)))
+        .build();
 
     // Change acls and check.
     assertNotEquals(key, cloneKey);
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequest.java
index 07e7d02b75b..35e06de92ee 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequest.java
@@ -106,10 +106,8 @@ public OMClientResponse 
validateAndUpdateCache(OzoneManager ozoneManager, Execut
         throw new OMException(OMException.ResultCodes.KEY_NOT_FOUND);
       }
 
-      operationResult = apply(omKeyInfo, trxnLogIndex);
-      omKeyInfo = omKeyInfo.toBuilder()
-          .setUpdateID(trxnLogIndex)
-          .build();
+      OmKeyInfo.Builder builder = omKeyInfo.toBuilder();
+      operationResult = apply(builder, trxnLogIndex);
 
       // Update the modification time when updating ACLs of Key.
       long modificationTime = omKeyInfo.getModificationTime();
@@ -125,7 +123,11 @@ public OMClientResponse 
validateAndUpdateCache(OzoneManager ozoneManager, Execut
         modificationTime = getOmRequest().getRemoveAclRequest()
             .getModificationTime();
       }
-      omKeyInfo.setModificationTime(modificationTime);
+
+      omKeyInfo = builder
+          .setModificationTime(modificationTime)
+          .setUpdateID(trxnLogIndex)
+          .build();
 
       // update cache.
       omMetadataManager.getKeyTable(getBucketLayout())
@@ -244,10 +246,10 @@ abstract void onComplete(Result result, boolean 
operationResult,
   /**
    * Apply the acl operation, if successfully completed returns true,
    * else false.
-   * @param omKeyInfo
+   * @param builder
    * @param trxnLogIndex
    */
-  abstract boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex);
+  abstract boolean apply(OmKeyInfo.Builder builder, long trxnLogIndex);
 
   public void setBucketLayout(BucketLayout bucketLayout) {
     this.bucketLayout = bucketLayout;
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequestWithFSO.java
index 7a9fc30d342..f9c8602e0a4 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAclRequestWithFSO.java
@@ -97,19 +97,17 @@ public OMClientResponse validateAndUpdateCache(OzoneManager 
ozoneManager, Execut
         throw new OMException("Key not found. Key:" + key, KEY_NOT_FOUND);
       }
       omKeyInfo = keyStatus.getKeyInfo();
-      // Reverting back the full path to key name
-      // Eg: a/b/c/d/e/file1 -> file1
-      omKeyInfo.setKeyName(OzoneFSUtils.getFileName(key));
       final long volumeId = omMetadataManager.getVolumeId(volume);
       final long bucketId = omMetadataManager.getBucketId(volume, bucket);
       final String dbKey = omMetadataManager.getOzonePathKey(volumeId, 
bucketId,
               omKeyInfo.getParentObjectID(), omKeyInfo.getFileName());
       boolean isDirectory = keyStatus.isDirectory();
-      operationResult = apply(omKeyInfo, trxnLogIndex);
-      omKeyInfo = omKeyInfo.toBuilder()
-          .setUpdateID(trxnLogIndex)
-          .build();
 
+      // Reverting back the full path to key name
+      // Eg: a/b/c/d/e/file1 -> file1
+      OmKeyInfo.Builder builder = omKeyInfo.toBuilder()
+          .setKeyName(OzoneFSUtils.getFileName(key));
+      operationResult = apply(builder, trxnLogIndex);
 
       // Update the modification time when updating ACLs of Key.
       long modificationTime = omKeyInfo.getModificationTime();
@@ -124,7 +122,11 @@ public OMClientResponse 
validateAndUpdateCache(OzoneManager ozoneManager, Execut
         modificationTime =
             getOmRequest().getRemoveAclRequest().getModificationTime();
       }
-      omKeyInfo.setModificationTime(modificationTime);
+
+      omKeyInfo = builder
+          .setModificationTime(modificationTime)
+          .setUpdateID(trxnLogIndex)
+          .build();
 
       // update cache.
       if (isDirectory) {
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequest.java
index efd637bc64d..367e3c87db6 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequest.java
@@ -140,9 +140,9 @@ void onComplete(Result result, boolean operationResult,
   }
 
   @Override
-  boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) {
+  boolean apply(OmKeyInfo.Builder builder, long trxnLogIndex) {
     // No need to check not null here, this will be never called with null.
-    return omKeyInfo.addAcl(ozoneAcls.get(0));
+    return builder.acls().add(ozoneAcls.get(0));
   }
 
   @Override
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequestWithFSO.java
index bc33b0a9de1..049f9a8384e 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyAddAclRequestWithFSO.java
@@ -126,9 +126,9 @@ public OMKeyAddAclRequestWithFSO(
             getOmRequest().getUserInfo()));
   }
 
-  @Override boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) {
+  @Override boolean apply(OmKeyInfo.Builder builder, long trxnLogIndex) {
     // No need to check not null here, this will be never called with null.
-    return omKeyInfo.addAcl(ozoneAcls.get(0));
+    return builder.acls().add(ozoneAcls.get(0));
   }
 
   @Override
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequest.java
index 6a64b2c3b51..0de996fd28a 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequest.java
@@ -141,9 +141,9 @@ void onComplete(Result result, boolean operationResult,
   }
 
   @Override
-  boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) {
+  boolean apply(OmKeyInfo.Builder builder, long trxnLogIndex) {
     // No need to check not null here, this will be never called with null.
-    return omKeyInfo.removeAcl(ozoneAcls.get(0));
+    return builder.acls().remove(ozoneAcls.get(0));
   }
 
   @Override
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequestWithFSO.java
index f216cf7d86f..02dd83874d6 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeyRemoveAclRequestWithFSO.java
@@ -136,9 +136,9 @@ void onComplete(Result result, boolean operationResult,
   }
 
   @Override
-  boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) {
+  boolean apply(OmKeyInfo.Builder builder, long trxnLogIndex) {
     // No need to check not null here, this will be never called with null.
-    return omKeyInfo.removeAcl(ozoneAcls.get(0));
+    return builder.acls().remove(ozoneAcls.get(0));
   }
 
   @Override
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequest.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequest.java
index 42523557729..b0bd2f8fe52 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequest.java
@@ -137,9 +137,9 @@ void onComplete(Result result, boolean operationResult,
   }
 
   @Override
-  boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) {
+  boolean apply(OmKeyInfo.Builder builder, long trxnLogIndex) {
     // No need to check not null here, this will be never called with null.
-    return omKeyInfo.setAcls(ozoneAcls);
+    return builder.acls().set(ozoneAcls);
   }
 
   @Override
diff --git 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequestWithFSO.java
 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequestWithFSO.java
index 6cdefe8e4fe..8d0d4db80ba 100644
--- 
a/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequestWithFSO.java
+++ 
b/hadoop-ozone/ozone-manager/src/main/java/org/apache/hadoop/ozone/om/request/key/acl/OMKeySetAclRequestWithFSO.java
@@ -129,9 +129,9 @@ void onComplete(Result result, boolean operationResult,
   }
 
   @Override
-  boolean apply(OmKeyInfo omKeyInfo, long trxnLogIndex) {
+  boolean apply(OmKeyInfo.Builder builder, long trxnLogIndex) {
     // No need to check not null here, this will be never called with null.
-    return omKeyInfo.setAcls(ozoneAcls);
+    return builder.acls().set(ozoneAcls);
   }
 
   @Override
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 a79eeda74f2..e99b3626960 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
@@ -397,7 +397,9 @@ private Optional<PurgePathRequest> prepareDeleteDirRequest(
         keyManager.getPendingDeletionSubDirs(volumeBucketId.getVolumeId(), 
volumeBucketId.getBucketId(),
             pendingDeletedDirInfo, keyInfo -> true, remainingNum);
     List<OmKeyInfo> subDirs = subDirDeleteResult.getKeysToDelete();
-    subDirs.forEach(omKeyInfo -> omKeyInfo.setAcls(Collections.emptyList()));
+    subDirs = subDirs.stream()
+        .map(omKeyInfo -> 
omKeyInfo.toBuilder().setAcls(Collections.emptyList()).build())
+        .collect(Collectors.toList());
     remainNum.addAndGet(-subDirs.size());
 
     OMMetadataManager omMetadataManager = keyManager.getMetadataManager();
@@ -417,7 +419,9 @@ private Optional<PurgePathRequest> prepareDeleteDirRequest(
         keyManager.getPendingDeletionSubFiles(volumeBucketId.getVolumeId(), 
volumeBucketId.getBucketId(),
             pendingDeletedDirInfo, keyInfo -> purgeDir || 
reclaimableFileFilter.apply(keyInfo), remainingNum);
     List<OmKeyInfo> subFiles = subFileDeleteResult.getKeysToDelete();
-    subFiles.forEach(omKeyInfo -> omKeyInfo.setAcls(Collections.emptyList()));
+    subFiles = subFiles.stream()
+        .map(omKeyInfo -> 
omKeyInfo.toBuilder().setAcls(Collections.emptyList()).build())
+        .collect(Collectors.toList());
     remainNum.addAndGet(-subFiles.size());
 
     if (LOG.isDebugEnabled()) {
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java
index e8bd2b07941..8ccac5cd335 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/om/request/key/TestOMKeyCommitRequest.java
@@ -237,13 +237,13 @@ public void testAtomicRewrite() throws Exception {
             .map(OmKeyLocationInfo::getFromProtobuf)
             .collect(Collectors.toList());
 
+    List<OzoneAcl> acls = 
Collections.singletonList(OzoneAcl.parseAcl("user:foo:rw"));
     OmKeyInfo.Builder omKeyInfoBuilder = OMRequestTestUtils.createOmKeyInfo(
         volumeName, bucketName, keyName, replicationConfig, new 
OmKeyLocationInfoGroup(version, new ArrayList<>()));
-    omKeyInfoBuilder.setExpectedDataGeneration(1L);
-    OmKeyInfo omKeyInfo = omKeyInfoBuilder.build();
+    OmKeyInfo omKeyInfo = omKeyInfoBuilder.setExpectedDataGeneration(1L)
+        .addAcl(acls.get(0))
+        .build();
     omKeyInfo.appendNewBlocks(allocatedLocationList, false);
-    List<OzoneAcl> acls = 
Collections.singletonList(OzoneAcl.parseAcl("user:foo:rw"));
-    omKeyInfo.addAcl(acls.get(0));
 
     String openKey = addKeyToOpenKeyTable(allocatedLocationList, omKeyInfo);
     OmKeyInfo openKeyInfo = openKeyTable.get(openKey);
diff --git 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/acl/OzoneNativeAclTestUtil.java
 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/acl/OzoneNativeAclTestUtil.java
index 040871f58a8..afa4712f4eb 100644
--- 
a/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/acl/OzoneNativeAclTestUtil.java
+++ 
b/hadoop-ozone/ozone-manager/src/test/java/org/apache/hadoop/ozone/security/acl/OzoneNativeAclTestUtil.java
@@ -76,9 +76,10 @@ public static void addKeyAcl(
   ) throws IOException {
     final String objKey = metadataManager.getOzoneKey(volume, bucket, key);
     final Table<String, OmKeyInfo> keyTable = 
metadataManager.getKeyTable(bucketLayout);
-    final OmKeyInfo omKeyInfo = keyTable.get(objKey);
-
-    omKeyInfo.addAcl(ozoneAcl);
+    final OmKeyInfo omKeyInfo = keyTable.get(objKey)
+        .toBuilder()
+        .addAcl(ozoneAcl)
+        .build();
 
     keyTable.addCacheEntry(
         new CacheKey<>(objKey),
@@ -127,9 +128,10 @@ public static void setKeyAcl(
       List<OzoneAcl> ozoneAcls) throws IOException {
     final String objKey = metadataManager.getOzoneKey(volume, bucket, key);
     final Table<String, OmKeyInfo> keyTable = 
metadataManager.getKeyTable(bucketLayout);
-    final OmKeyInfo omKeyInfo = keyTable.get(objKey);
-
-    omKeyInfo.setAcls(ozoneAcls);
+    final OmKeyInfo omKeyInfo = keyTable.get(objKey)
+        .toBuilder()
+        .setAcls(ozoneAcls)
+        .build();
 
     keyTable.addCacheEntry(
         new CacheKey<>(objKey),


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

Reply via email to