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

xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit 2d6356bb2b33580e8311445ca4291f5c8cdae3e7
Author: Yinghao Lin <yinghao....@kyligence.io>
AuthorDate: Fri Apr 14 13:35:56 2023 +0800

    KYLIN-5607 Fix multi-threaded acl access
---
 .../src/main/java/org/apache/kylin/rest/security/AclManager.java    | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/rest/security/AclManager.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/rest/security/AclManager.java
index 408cb16821..f5a29de063 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/rest/security/AclManager.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/rest/security/AclManager.java
@@ -164,9 +164,11 @@ public class AclManager {
             if (record.isEntriesInheriting() && 
record.getParentDomainObjectInfo() != null)
                 parentAcl = readAclById(record.getParentDomainObjectInfo());
 
-            record.init(parentAcl, aclPermissionFactory, 
permissionGrantingStrategy);
+            // Caution: Using a copied object before doing init, otherwise the 
original one will be polluted
+            AclRecord recordCopy = crud.copyForWrite(record);
+            recordCopy.init(parentAcl, aclPermissionFactory, 
permissionGrantingStrategy);
 
-            aclMaps.put(oid, new MutableAclRecord(record));
+            aclMaps.put(oid, new MutableAclRecord(recordCopy));
         }
         return aclMaps;
     }

Reply via email to