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

zihanli58 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/gobblin.git


The following commit(s) were added to refs/heads/master by this push:
     new f4a9966da [GOBBLIN-1892] replace setAcl with modifyEntries while 
preserving acls during distcp (#3755)
f4a9966da is described below

commit f4a9966da33b69a6e95d308fc7beb105452b0bdb
Author: meethngala <[email protected]>
AuthorDate: Tue Sep 5 14:52:46 2023 -0700

    [GOBBLIN-1892] replace setAcl with modifyEntries while preserving acls 
during distcp (#3755)
    
    * add AclEntryType.OTHER if absent while preserving acls during distcp
    
    * replace method setAcl with modifyAclEntries while preserving acls
    
    ---------
    
    Co-authored-by: Meeth Gala <[email protected]>
---
 .../management/copy/writer/FileAwareInputStreamDataWriter.java | 10 +++++++---
 .../copy/writer/FileAwareInputStreamDataWriterTest.java        |  2 +-
 .../apache/gobblin/util/filesystem/FileSystemDecorator.java    |  3 +++
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git 
a/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/copy/writer/FileAwareInputStreamDataWriter.java
 
b/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/copy/writer/FileAwareInputStreamDataWriter.java
index 2712cc67e..a13384227 100644
--- 
a/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/copy/writer/FileAwareInputStreamDataWriter.java
+++ 
b/gobblin-data-management/src/main/java/org/apache/gobblin/data/management/copy/writer/FileAwareInputStreamDataWriter.java
@@ -361,8 +361,10 @@ public class FileAwareInputStreamDataWriter extends 
InstrumentedDataWriter<FileA
       if (targetOwnerAndPermission.getFsPermission() != null) {
         fs.setPermission(path, targetOwnerAndPermission.getFsPermission());
       }
-      if (!ownerAndPermission.getAclEntries().isEmpty()) {
-        fs.setAcl(path, ownerAndPermission.getAclEntries());
+      if (!targetOwnerAndPermission.getAclEntries().isEmpty()) {
+        // use modify acls instead of setAcl since latter requires all three 
acl entry types: user, group and others
+        // while overwriting the acls for a given path. If anyone is absent it 
fails acl transformation validation.
+        fs.modifyAclEntries(path, targetOwnerAndPermission.getAclEntries());
       }
     } catch (IOException ioe) {
       log.warn("Failed to set permission for directory " + path, ioe);
@@ -519,7 +521,9 @@ public class FileAwareInputStreamDataWriter extends 
InstrumentedDataWriter<FileA
         log.warn("Failed to set owner and/or group for path " + path + " to " 
+ owner + ":" + group, ioe);
       }
       if (!aclEntries.isEmpty()) {
-        fs.setAcl(path, aclEntries);
+        // use modify acls instead of setAcl since latter requires all three 
acl entry types: user, group and others
+        // while overwriting the acls for a given path. If anyone is absent it 
fails acl transformation validation.
+        fs.modifyAclEntries(path, aclEntries);
       }
     } else {
       fs.mkdirs(path);
diff --git 
a/gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/writer/FileAwareInputStreamDataWriterTest.java
 
b/gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/writer/FileAwareInputStreamDataWriterTest.java
index 8807de3f8..35b91b766 100644
--- 
a/gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/writer/FileAwareInputStreamDataWriterTest.java
+++ 
b/gobblin-data-management/src/test/java/org/apache/gobblin/data/management/copy/writer/FileAwareInputStreamDataWriterTest.java
@@ -647,7 +647,7 @@ public class FileAwareInputStreamDataWriterTest {
   protected class TestLocalFileSystem extends LocalFileSystem {
     private final ConcurrentHashMap<Path, List<AclEntry>> pathToAclEntries = 
new ConcurrentHashMap<>();
     @Override
-    public void setAcl(Path path, List<AclEntry> aclEntries) {
+    public void modifyAclEntries(Path path, List<AclEntry> aclEntries) {
       pathToAclEntries.put(path, aclEntries);
     }
     public ImmutableMap<Path, List<AclEntry>> getPathToAclEntries() {
diff --git 
a/gobblin-utility/src/main/java/org/apache/gobblin/util/filesystem/FileSystemDecorator.java
 
b/gobblin-utility/src/main/java/org/apache/gobblin/util/filesystem/FileSystemDecorator.java
index 6ae706baa..02e03c767 100644
--- 
a/gobblin-utility/src/main/java/org/apache/gobblin/util/filesystem/FileSystemDecorator.java
+++ 
b/gobblin-utility/src/main/java/org/apache/gobblin/util/filesystem/FileSystemDecorator.java
@@ -110,6 +110,9 @@ class FileSystemDecorator extends FileSystem implements 
Decorator {
   public void setAcl(Path path, List<AclEntry> aclSpec) throws IOException {
     this.underlyingFs.setAcl(path, aclSpec);
   }
+  public void modifyAclEntries(Path path, List<AclEntry> aclSpec) throws 
IOException {
+    this.underlyingFs.modifyAclEntries(path, aclSpec);
+  }
 
   public FsStatus getStatus() throws java.io.IOException {
     return this.underlyingFs.getStatus();

Reply via email to