You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cn...@apache.org on 2013/12/11 21:54:47 UTC

svn commit: r1550256 - in /hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src: main/java/org/apache/hadoop/fs/ main/java/org/apache/hadoop/fs/permission/ main/java/org/apache/hadoop/fs/viewfs/ test/java/org/apache/hadoop/fs/ test/...

Author: cnauroth
Date: Wed Dec 11 20:54:46 2013
New Revision: 1550256

URL: http://svn.apache.org/r1550256
Log:
HDFS-5650. Remove AclReadFlag and AclWriteFlag in FileSystem API. Contributed by Haohui Mai.

Removed:
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/Acl.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/AclReadFlag.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/AclWriteFlag.java
Modified:
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/AclStatus.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestHarFileSystem.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/permission/TestAcl.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestChRootedFileSystem.java
    hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegation.java

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java Wed Dec 11 20:54:46 2013
@@ -49,9 +49,7 @@ import org.apache.hadoop.conf.Configured
 import org.apache.hadoop.fs.Options.ChecksumOpt;
 import org.apache.hadoop.fs.Options.Rename;
 import org.apache.hadoop.fs.permission.AclEntry;
-import org.apache.hadoop.fs.permission.AclReadFlag;
 import org.apache.hadoop.fs.permission.AclStatus;
-import org.apache.hadoop.fs.permission.AclWriteFlag;
 import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.io.MultipleIOException;
 import org.apache.hadoop.io.Text;
@@ -2278,11 +2276,9 @@ public abstract class FileSystem extends
    *
    * @param path Path to modify
    * @param aclSpec List<AclEntry> describing modifications
-   * @param flags EnumSet<AclWriteFlag> containing flags (such as recursive)
    * @throws IOException if an ACL could not be modified
    */
-  public void modifyAclEntries(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
+  public void modifyAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException {
     throw new UnsupportedOperationException(getClass().getSimpleName()
         + " doesn't support modifyAclEntries");
   }
@@ -2293,11 +2289,9 @@ public abstract class FileSystem extends
    *
    * @param path Path to modify
    * @param aclSpec List<AclEntry> describing entries to remove
-   * @param flags EnumSet<AclWriteFlag> containing flags (such as recursive)
    * @throws IOException if an ACL could not be modified
    */
-  public void removeAclEntries(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
+  public void removeAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException {
     throw new UnsupportedOperationException(getClass().getSimpleName()
         + " doesn't support removeAclEntries");
   }
@@ -2306,10 +2300,9 @@ public abstract class FileSystem extends
    * Removes all default ACL entries from files and directories.
    *
    * @param path Path to modify
-   * @param flags EnumSet<AclWriteFlag> containing flags (such as recursive)
    * @throws IOException if an ACL could not be modified
    */
-  public void removeDefaultAcl(Path path, EnumSet<AclWriteFlag> flags)
+  public void removeDefaultAcl(Path path)
       throws IOException {
     throw new UnsupportedOperationException(getClass().getSimpleName()
         + " doesn't support removeDefaultAcl");
@@ -2321,10 +2314,9 @@ public abstract class FileSystem extends
    * bits.
    *
    * @param path Path to modify
-   * @param flags EnumSet<AclWriteFlag> containing flags (such as recursive)
    * @throws IOException if an ACL could not be removed
    */
-  public void removeAcl(Path path, EnumSet<AclWriteFlag> flags)
+  public void removeAcl(Path path)
       throws IOException {
     throw new UnsupportedOperationException(getClass().getSimpleName()
         + " doesn't support removeAcl");
@@ -2337,11 +2329,9 @@ public abstract class FileSystem extends
    * @param path Path to modify
    * @param aclSpec List<AclEntry> describing modifications, must include entries
    *   for user, group, and others for compatibility with permission bits.
-   * @param flags EnumSet<AclWriteFlag> containing flags (such as recursive)
    * @throws IOException if an ACL could not be modified
    */
-  public void setAcl(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
+  public void setAcl(Path path, Iterable<AclEntry> aclSpec) throws IOException {
     throw new UnsupportedOperationException(getClass().getSimpleName()
         + " doesn't support setAcl");
   }
@@ -2350,14 +2340,12 @@ public abstract class FileSystem extends
    * Gets the ACLs of files and directories.
    *
    * @param path Path to get
-   * @param flags EnumSet<AclReadFlag> containing flags (such as recursive)
    * @return RemoteIterator<AclStatus> which returns each AclStatus
    * @throws IOException if an ACL could not be read
    */
-  public RemoteIterator<AclStatus> listAclStatus(Path path,
-      EnumSet<AclReadFlag> flags) throws IOException {
+  public AclStatus getAclStatus(Path path) throws IOException {
     throw new UnsupportedOperationException(getClass().getSimpleName()
-        + " doesn't support listAclStatus");
+        + " doesn't support getAclStatus");
   }
 
   // making it volatile to be able to do a double checked locking

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FilterFileSystem.java Wed Dec 11 20:54:46 2013
@@ -22,14 +22,12 @@ import java.io.*;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.EnumSet;
-import java.util.List;
+
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.permission.AclEntry;
-import org.apache.hadoop.fs.permission.AclReadFlag;
 import org.apache.hadoop.fs.permission.AclStatus;
-import org.apache.hadoop.fs.permission.AclWriteFlag;
 import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.fs.ContentSummary;
 import org.apache.hadoop.fs.Options.ChecksumOpt;
@@ -514,38 +512,34 @@ public class FilterFileSystem extends Fi
   }
 
   @Override
-  public void modifyAclEntries(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
-    fs.modifyAclEntries(path, aclSpec, flags);
+  public void modifyAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException {
+    fs.modifyAclEntries(path, aclSpec);
   }
 
   @Override
-  public void removeAclEntries(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
-    fs.removeAclEntries(path, aclSpec, flags);
+  public void removeAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException {
+    fs.removeAclEntries(path, aclSpec);
   }
 
   @Override
-  public void removeDefaultAcl(Path path, EnumSet<AclWriteFlag> flags)
+  public void removeDefaultAcl(Path path)
       throws IOException {
-    fs.removeDefaultAcl(path, flags);
+    fs.removeDefaultAcl(path);
   }
 
   @Override
-  public void removeAcl(Path path, EnumSet<AclWriteFlag> flags)
+  public void removeAcl(Path path)
       throws IOException {
-    fs.removeAcl(path, flags);
+    fs.removeAcl(path);
   }
 
   @Override
-  public void setAcl(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
-    fs.setAcl(path, aclSpec, flags);
+  public void setAcl(Path path, Iterable<AclEntry> aclSpec) throws IOException {
+    fs.setAcl(path, aclSpec);
   }
 
   @Override
-  public RemoteIterator<AclStatus> listAclStatus(Path path,
-      EnumSet<AclReadFlag> flags) throws IOException {
-    return fs.listAclStatus(path, flags);
+  public AclStatus getAclStatus(Path path) throws IOException {
+    return fs.getAclStatus(path);
   }
 }

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/AclStatus.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/AclStatus.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/AclStatus.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/permission/AclStatus.java Wed Dec 11 20:54:46 2013
@@ -17,33 +17,26 @@
  */
 package org.apache.hadoop.fs.permission;
 
-import com.google.common.base.Objects;
+import java.util.Collections;
+import java.util.List;
 
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
-import org.apache.hadoop.fs.Path;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
 
 /**
- * An AclStatus represents an association of a specific file {@link Path} with
- * an {@link Acl}.  AclStatus instances are immutable.  Use a {@link Builder} to
- * create a new instance.
+ * An AclStatus contains the ACL information of a specific file. AclStatus
+ * instances are immutable. Use a {@link Builder} to create a new instance.
  */
 @InterfaceAudience.Public
 @InterfaceStability.Evolving
 public class AclStatus {
-  private final Path file;
   private final String owner;
   private final String group;
-  private final Acl acl;
-
-  /**
-   * Returns the file associated to this ACL.
-   *
-   * @return Path file associated to this ACL
-   */
-  public Path getFile() {
-    return file;
-  }
+  private final boolean stickyBit;
+  private final Iterable<AclEntry> entries;
 
   /**
    * Returns the file owner.
@@ -64,12 +57,21 @@ public class AclStatus {
   }
 
   /**
-   * Returns the ACL.
+   * Returns the sticky bit.
+   * 
+   * @return boolean sticky bit
+   */
+  public boolean isStickyBit() {
+    return stickyBit;
+  }
+
+  /**
+   * Returns the list of all ACL entries, ordered by their natural ordering.
    *
-   * @return Acl the ACL
+   * @return Iterable<AclEntry> unmodifiable ordered list of all ACL entries
    */
-  public Acl getAcl() {
-    return acl;
+  public Iterable<AclEntry> getEntries() {
+    return entries;
   }
 
   @Override
@@ -81,24 +83,26 @@ public class AclStatus {
       return false;
     }
     AclStatus other = (AclStatus)o;
-    return Objects.equal(file, other.file) &&
-      Objects.equal(owner, other.owner) &&
-      Objects.equal(group, other.group) &&
-      Objects.equal(acl, other.acl);
+    return Objects.equal(owner, other.owner)
+        && Objects.equal(group, other.group)
+        && stickyBit == other.stickyBit
+        && Objects.equal(entries, other.entries);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hashCode(file, owner, group, acl);
+    return Objects.hashCode(owner, group, stickyBit, entries);
   }
 
   @Override
   public String toString() {
     return new StringBuilder()
-      .append("file: ").append(file)
-      .append(", owner: ").append(owner)
+      .append("owner: ").append(owner)
       .append(", group: ").append(group)
-      .append(", acl: {").append(acl).append('}')
+      .append(", acl: {")
+      .append("entries: ").append(entries)
+      .append(", stickyBit: ").append(stickyBit)
+      .append('}')
       .toString();
   }
 
@@ -106,62 +110,76 @@ public class AclStatus {
    * Builder for creating new Acl instances.
    */
   public static class Builder {
-    private Path file;
     private String owner;
     private String group;
-    private Acl acl;
+    private boolean stickyBit;
+    private List<AclEntry> entries = Lists.newArrayList();
 
     /**
-     * Sets the file associated to this ACL.
+     * Sets the file owner.
      *
-     * @param file Path file associated to this ACL
+     * @param owner String file owner
      * @return Builder this builder, for call chaining
      */
-    public Builder setFile(Path file) {
-      this.file = file;
+    public Builder owner(String owner) {
+      this.owner = owner;
       return this;
     }
 
     /**
-     * Sets the file owner.
+     * Sets the file group.
      *
-     * @param owner String file owner
+     * @param group String file group
      * @return Builder this builder, for call chaining
      */
-    public Builder setOwner(String owner) {
-      this.owner = owner;
+    public Builder group(String group) {
+      this.group = group;
       return this;
     }
 
     /**
-     * Sets the file group.
+     * Adds an ACL entry.
      *
-     * @param group String file group
+     * @param e AclEntry entry to add
      * @return Builder this builder, for call chaining
      */
-    public Builder setGroup(String group) {
-      this.group = group;
+    public Builder addEntry(AclEntry e) {
+      this.entries.add(e);
+      return this;
+    }
+
+    /**
+     * Adds a list of ACL entries.
+     *
+     * @param entries AclEntry entries to add
+     * @return Builder this builder, for call chaining
+     */
+    public Builder addEntries(Iterable<AclEntry> entries) {
+      for (AclEntry e : entries)
+        this.entries.add(e);
       return this;
     }
 
     /**
-     * Sets the ACL.
+     * Sets sticky bit. If this method is not called, then the builder assumes
+     * false.
      *
-     * @param acl Acl the ACL
+     * @param stickyBit
+     *          boolean sticky bit
      * @return Builder this builder, for call chaining
      */
-    public Builder setAcl(Acl acl) {
-      this.acl = acl;
+    public Builder stickyBit(boolean stickyBit) {
+      this.stickyBit = stickyBit;
       return this;
     }
 
     /**
-     * Builds a new Acl populated with the set properties.
+     * Builds a new AclStatus populated with the set properties.
      *
-     * @return Acl new Acl
+     * @return AclStatus new AclStatus
      */
     public AclStatus build() {
-      return new AclStatus(file, owner, group, acl);
+      return new AclStatus(owner, group, stickyBit, entries);
     }
   }
 
@@ -171,12 +189,16 @@ public class AclStatus {
    * @param file Path file associated to this ACL
    * @param owner String file owner
    * @param group String file group
-   * @param acl Acl the ACL
+   * @param stickyBit the sticky bit
+   * @param entries the ACL entries
    */
-  private AclStatus(Path file, String owner, String group, Acl acl) {
-    this.file = file;
+  private AclStatus(String owner, String group, boolean stickyBit,
+      Iterable<AclEntry> entries) {
     this.owner = owner;
     this.group = group;
-    this.acl = acl;
+    this.stickyBit = stickyBit;
+    List<AclEntry> entriesCopy = Lists.newArrayList(entries);
+    Collections.sort(entriesCopy);
+    this.entries = entriesCopy;
   }
 }

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ChRootedFileSystem.java Wed Dec 11 20:54:46 2013
@@ -20,7 +20,6 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.URI;
 import java.util.EnumSet;
-import java.util.List;
 
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
@@ -37,11 +36,8 @@ import org.apache.hadoop.fs.FilterFileSy
 import org.apache.hadoop.fs.FsServerDefaults;
 import org.apache.hadoop.fs.FsStatus;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.fs.RemoteIterator;
 import org.apache.hadoop.fs.permission.AclEntry;
-import org.apache.hadoop.fs.permission.AclReadFlag;
 import org.apache.hadoop.fs.permission.AclStatus;
-import org.apache.hadoop.fs.permission.AclWriteFlag;
 import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.util.Progressable;
 
@@ -285,39 +281,35 @@ class ChRootedFileSystem extends FilterF
   }
   
   @Override
-  public void modifyAclEntries(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
-    super.modifyAclEntries(fullPath(path), aclSpec, flags);
+  public void modifyAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException {
+    super.modifyAclEntries(fullPath(path), aclSpec);
   }
 
   @Override
-  public void removeAclEntries(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
-    super.removeAclEntries(fullPath(path), aclSpec, flags);
+  public void removeAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException {
+    super.removeAclEntries(fullPath(path), aclSpec);
   }
 
   @Override
-  public void removeDefaultAcl(Path path, EnumSet<AclWriteFlag> flags)
+  public void removeDefaultAcl(Path path)
       throws IOException {
-    super.removeDefaultAcl(fullPath(path), flags);
+    super.removeDefaultAcl(fullPath(path));
   }
 
   @Override
-  public void removeAcl(Path path, EnumSet<AclWriteFlag> flags)
+  public void removeAcl(Path path)
       throws IOException {
-    super.removeAcl(fullPath(path), flags);
+    super.removeAcl(fullPath(path));
   }
 
   @Override
-  public void setAcl(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
-    super.setAcl(fullPath(path), aclSpec, flags);
+  public void setAcl(Path path, Iterable<AclEntry> aclSpec) throws IOException {
+    super.setAcl(fullPath(path), aclSpec);
   }
 
   @Override
-  public RemoteIterator<AclStatus> listAclStatus(Path path,
-      EnumSet<AclReadFlag> flags) throws IOException {
-    return super.listAclStatus(fullPath(path), flags);
+  public AclStatus getAclStatus(Path path) throws IOException {
+    return super.getAclStatus(fullPath(path));
   }
 
   @Override

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/viewfs/ViewFileSystem.java Wed Dec 11 20:54:46 2013
@@ -28,7 +28,6 @@ import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.StringTokenizer;
 import java.util.Map.Entry;
 
 import org.apache.hadoop.classification.InterfaceAudience;
@@ -45,14 +44,10 @@ import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.FsConstants;
 import org.apache.hadoop.fs.FsServerDefaults;
-import org.apache.hadoop.fs.InvalidPathException;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.fs.RemoteIterator;
 import org.apache.hadoop.fs.UnsupportedFileSystemException;
 import org.apache.hadoop.fs.permission.AclEntry;
-import org.apache.hadoop.fs.permission.AclReadFlag;
 import org.apache.hadoop.fs.permission.AclStatus;
-import org.apache.hadoop.fs.permission.AclWriteFlag;
 import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.fs.viewfs.InodeTree.INode;
 import org.apache.hadoop.fs.viewfs.InodeTree.INodeLink;
@@ -479,51 +474,47 @@ public class ViewFileSystem extends File
   }
 
   @Override
-  public void modifyAclEntries(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
+  public void modifyAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException {
     InodeTree.ResolveResult<FileSystem> res =
       fsState.resolve(getUriPath(path), true);
-    res.targetFileSystem.modifyAclEntries(res.remainingPath, aclSpec, flags);
+    res.targetFileSystem.modifyAclEntries(res.remainingPath, aclSpec);
   }
 
   @Override
-  public void removeAclEntries(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
+  public void removeAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException {
     InodeTree.ResolveResult<FileSystem> res =
       fsState.resolve(getUriPath(path), true);
-    res.targetFileSystem.removeAclEntries(res.remainingPath, aclSpec, flags);
+    res.targetFileSystem.removeAclEntries(res.remainingPath, aclSpec);
   }
 
   @Override
-  public void removeDefaultAcl(Path path, EnumSet<AclWriteFlag> flags)
+  public void removeDefaultAcl(Path path)
       throws IOException {
     InodeTree.ResolveResult<FileSystem> res =
       fsState.resolve(getUriPath(path), true);
-    res.targetFileSystem.removeDefaultAcl(res.remainingPath, flags);
+    res.targetFileSystem.removeDefaultAcl(res.remainingPath);
   }
 
   @Override
-  public void removeAcl(Path path, EnumSet<AclWriteFlag> flags)
+  public void removeAcl(Path path)
       throws IOException {
     InodeTree.ResolveResult<FileSystem> res =
       fsState.resolve(getUriPath(path), true);
-    res.targetFileSystem.removeAcl(res.remainingPath, flags);
+    res.targetFileSystem.removeAcl(res.remainingPath);
   }
 
   @Override
-  public void setAcl(Path path, List<AclEntry> aclSpec,
-      EnumSet<AclWriteFlag> flags) throws IOException {
+  public void setAcl(Path path, Iterable<AclEntry> aclSpec) throws IOException {
     InodeTree.ResolveResult<FileSystem> res =
       fsState.resolve(getUriPath(path), true);
-    res.targetFileSystem.setAcl(res.remainingPath, aclSpec, flags);
+    res.targetFileSystem.setAcl(res.remainingPath, aclSpec);
   }
 
   @Override
-  public RemoteIterator<AclStatus> listAclStatus(Path path,
-      EnumSet<AclReadFlag> flags) throws IOException {
+  public AclStatus getAclStatus(Path path) throws IOException {
     InodeTree.ResolveResult<FileSystem> res =
       fsState.resolve(getUriPath(path), true);
-    return res.targetFileSystem.listAclStatus(res.remainingPath, flags);
+    return res.targetFileSystem.getAclStatus(res.remainingPath);
   }
 
   @Override

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestHarFileSystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestHarFileSystem.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestHarFileSystem.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestHarFileSystem.java Wed Dec 11 20:54:46 2013
@@ -22,9 +22,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.permission.AclEntry;
-import org.apache.hadoop.fs.permission.AclReadFlag;
 import org.apache.hadoop.fs.permission.AclStatus;
-import org.apache.hadoop.fs.permission.AclWriteFlag;
 import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.security.Credentials;
 import org.apache.hadoop.security.token.Token;
@@ -37,7 +35,6 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.EnumSet;
 import java.util.Iterator;
-import java.util.List;
 
 import static org.apache.hadoop.fs.Options.ChecksumOpt;
 import static org.apache.hadoop.fs.Options.CreateOpts;
@@ -170,18 +167,12 @@ public class TestHarFileSystem {
         String snapshotNewName) throws IOException;
     public void deleteSnapshot(Path path, String snapshotName)
         throws IOException;
-    public void modifyAclEntries(Path path, List<AclEntry> aclSpec,
-        EnumSet<AclWriteFlag> flags) throws IOException;
-    public void removeAclEntries(Path path, List<AclEntry> aclSpec,
-        EnumSet<AclWriteFlag> flags) throws IOException;
-    public void removeDefaultAcl(Path path, EnumSet<AclWriteFlag> flags)
-        throws IOException;
-    public void removeAcl(Path path, EnumSet<AclWriteFlag> flags)
-        throws IOException;
-    public void setAcl(Path path, List<AclEntry> aclSpec,
-        EnumSet<AclWriteFlag> flags) throws IOException;
-    public RemoteIterator<AclStatus> listAclStatus(Path path,
-        EnumSet<AclReadFlag> flags) throws IOException;
+    public void modifyAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException;
+    public void removeAclEntries(Path path, Iterable<AclEntry> aclSpec) throws IOException;
+    public void removeDefaultAcl(Path path) throws IOException;
+    public void removeAcl(Path path) throws IOException;
+    public void setAcl(Path path, Iterable<AclEntry> aclSpec) throws IOException;
+    public AclStatus getAclStatus(Path path) throws IOException;
   }
 
   @Test

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/permission/TestAcl.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/permission/TestAcl.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/permission/TestAcl.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/permission/TestAcl.java Wed Dec 11 20:54:46 2013
@@ -21,20 +21,21 @@ import static org.junit.Assert.*;
 
 import java.util.List;
 
+import org.junit.BeforeClass;
 import org.junit.Test;
 
-import org.apache.hadoop.fs.Path;
+import com.google.common.collect.Lists;
 
 /**
  * Tests covering basic functionality of the ACL objects.
  */
 public class TestAcl {
-  private static final Acl ACL1, ACL2, ACL3, ACL4;
-  private static final AclEntry ENTRY1, ENTRY2, ENTRY3, ENTRY4, ENTRY5, ENTRY6,
+  private static AclEntry ENTRY1, ENTRY2, ENTRY3, ENTRY4, ENTRY5, ENTRY6,
     ENTRY7, ENTRY8, ENTRY9, ENTRY10, ENTRY11, ENTRY12, ENTRY13;
-  private static final AclStatus STATUS1, STATUS2, STATUS3;
+  private static AclStatus STATUS1, STATUS2, STATUS3, STATUS4;
 
-  static {
+  @BeforeClass
+  public static void setUp() {
     // named user
     AclEntry.Builder aclEntryBuilder = new AclEntry.Builder()
       .setType(AclEntryType.USER)
@@ -107,31 +108,21 @@ public class TestAcl {
       .setScope(AclEntryScope.DEFAULT)
       .build();
 
-    Acl.Builder aclBuilder = new Acl.Builder()
+    AclStatus.Builder aclStatusBuilder = new AclStatus.Builder()
+      .owner("owner1")
+      .group("group1")
       .addEntry(ENTRY1)
       .addEntry(ENTRY3)
       .addEntry(ENTRY4);
-    ACL1 = aclBuilder.build();
-    ACL2 = aclBuilder.build();
-    ACL3 = new Acl.Builder()
-      .setStickyBit(true)
-      .build();
-
-    AclStatus.Builder aclStatusBuilder = new AclStatus.Builder()
-      .setFile(new Path("file1"))
-      .setOwner("owner1")
-      .setGroup("group1")
-      .setAcl(ACL1);
     STATUS1 = aclStatusBuilder.build();
     STATUS2 = aclStatusBuilder.build();
     STATUS3 = new AclStatus.Builder()
-      .setFile(new Path("file2"))
-      .setOwner("owner2")
-      .setGroup("group2")
-      .setAcl(ACL3)
+      .owner("owner2")
+      .group("group2")
+      .stickyBit(true)
       .build();
 
-    ACL4 = new Acl.Builder()
+    STATUS4 = new AclStatus.Builder()
       .addEntry(ENTRY1)
       .addEntry(ENTRY3)
       .addEntry(ENTRY4)
@@ -148,39 +139,6 @@ public class TestAcl {
   }
 
   @Test
-  public void testAclEquals() {
-    assertNotSame(ACL1, ACL2);
-    assertNotSame(ACL1, ACL3);
-    assertNotSame(ACL2, ACL3);
-    assertEquals(ACL1, ACL1);
-    assertEquals(ACL2, ACL2);
-    assertEquals(ACL1, ACL2);
-    assertEquals(ACL2, ACL1);
-    assertFalse(ACL1.equals(ACL3));
-    assertFalse(ACL2.equals(ACL3));
-    assertFalse(ACL1.equals(null));
-    assertFalse(ACL1.equals(new Object()));
-  }
-
-  @Test
-  public void testAclHashCode() {
-    assertEquals(ACL1.hashCode(), ACL2.hashCode());
-    assertFalse(ACL1.hashCode() == ACL3.hashCode());
-  }
-
-  @Test
-  public void testAclEntriesImmutable() {
-    AclEntry entry = new AclEntry.Builder().build();
-    List<AclEntry> entries = ACL1.getEntries();
-    try {
-      entries.add(entry);
-      fail("expected adding ACL entry to fail");
-    } catch (UnsupportedOperationException e) {
-      // expected
-    }
-  }
-
-  @Test
   public void testEntryEquals() {
     assertNotSame(ENTRY1, ENTRY2);
     assertNotSame(ENTRY1, ENTRY3);
@@ -223,7 +181,7 @@ public class TestAcl {
       ENTRY10, // default mask
       ENTRY4   // default other
     };
-    List<AclEntry> actual = ACL4.getEntries();
+    List<AclEntry> actual = Lists.newArrayList(STATUS4.getEntries());
     assertNotNull(actual);
     assertEquals(expected.length, actual.size());
     for (int i = 0; i < expected.length; ++i) {
@@ -267,25 +225,19 @@ public class TestAcl {
 
   @Test
   public void testToString() {
-    assertEquals(
-      "entries: [user:user1:rwx, group:group2:rw-, default:other::---], stickyBit: false",
-      ACL1.toString());
-    assertEquals(
-      "entries: [user:user1:rwx, group:group2:rw-, default:other::---], stickyBit: false",
-      ACL2.toString());
-    assertEquals("entries: [], stickyBit: true", ACL3.toString());
     assertEquals("user:user1:rwx", ENTRY1.toString());
     assertEquals("user:user1:rwx", ENTRY2.toString());
     assertEquals("group:group2:rw-", ENTRY3.toString());
     assertEquals("default:other::---", ENTRY4.toString());
+
     assertEquals(
-      "file: file1, owner: owner1, group: group1, acl: {entries: [user:user1:rwx, group:group2:rw-, default:other::---], stickyBit: false}",
+      "owner: owner1, group: group1, acl: {entries: [user:user1:rwx, group:group2:rw-, default:other::---], stickyBit: false}",
       STATUS1.toString());
     assertEquals(
-      "file: file1, owner: owner1, group: group1, acl: {entries: [user:user1:rwx, group:group2:rw-, default:other::---], stickyBit: false}",
+      "owner: owner1, group: group1, acl: {entries: [user:user1:rwx, group:group2:rw-, default:other::---], stickyBit: false}",
       STATUS2.toString());
     assertEquals(
-      "file: file2, owner: owner2, group: group2, acl: {entries: [], stickyBit: true}",
+      "owner: owner2, group: group2, acl: {entries: [], stickyBit: true}",
       STATUS3.toString());
   }
 }

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestChRootedFileSystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestChRootedFileSystem.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestChRootedFileSystem.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestChRootedFileSystem.java Wed Dec 11 20:54:46 2013
@@ -21,7 +21,6 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.net.URI;
 import java.util.Collections;
-import java.util.EnumSet;
 import java.util.List;
 
 import org.apache.hadoop.conf.Configuration;
@@ -33,8 +32,6 @@ import org.apache.hadoop.fs.FilterFileSy
 import org.apache.hadoop.fs.FsConstants;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.permission.AclEntry;
-import org.apache.hadoop.fs.permission.AclReadFlag;
-import org.apache.hadoop.fs.permission.AclWriteFlag;
 import org.apache.hadoop.fs.viewfs.ChRootedFileSystem;
 import org.junit.After;
 import org.junit.Assert;
@@ -378,26 +375,24 @@ public class TestChRootedFileSystem {
     Path chrootPath = new Path("/c");
     Path rawPath = new Path("/a/b/c");
     List<AclEntry> entries = Collections.emptyList();
-    EnumSet<AclWriteFlag> writeFlags = EnumSet.noneOf(AclWriteFlag.class);
-    EnumSet<AclReadFlag> readFlags = EnumSet.noneOf(AclReadFlag.class);
 
-    chrootFs.modifyAclEntries(chrootPath, entries, writeFlags);
-    verify(mockFs).modifyAclEntries(rawPath, entries, writeFlags);
+    chrootFs.modifyAclEntries(chrootPath, entries);
+    verify(mockFs).modifyAclEntries(rawPath, entries);
 
-    chrootFs.removeAclEntries(chrootPath, entries, writeFlags);
-    verify(mockFs).removeAclEntries(rawPath, entries, writeFlags);
+    chrootFs.removeAclEntries(chrootPath, entries);
+    verify(mockFs).removeAclEntries(rawPath, entries);
 
-    chrootFs.removeDefaultAcl(chrootPath, writeFlags);
-    verify(mockFs).removeDefaultAcl(rawPath, writeFlags);
+    chrootFs.removeDefaultAcl(chrootPath);
+    verify(mockFs).removeDefaultAcl(rawPath);
 
-    chrootFs.removeAcl(chrootPath, writeFlags);
-    verify(mockFs).removeAcl(rawPath, writeFlags);
+    chrootFs.removeAcl(chrootPath);
+    verify(mockFs).removeAcl(rawPath);
 
-    chrootFs.setAcl(chrootPath, entries, writeFlags);
-    verify(mockFs).setAcl(rawPath, entries, writeFlags);
+    chrootFs.setAcl(chrootPath, entries);
+    verify(mockFs).setAcl(rawPath, entries);
 
-    chrootFs.listAclStatus(chrootPath, readFlags);
-    verify(mockFs).listAclStatus(rawPath, readFlags);
+    chrootFs.getAclStatus(chrootPath);
+    verify(mockFs).getAclStatus(rawPath);
   }
 
   static class MockFileSystem extends FilterFileSystem {

Modified: hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegation.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegation.java?rev=1550256&r1=1550255&r2=1550256&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegation.java (original)
+++ hadoop/common/branches/HDFS-4685/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/viewfs/TestViewFileSystemDelegation.java Wed Dec 11 20:54:46 2013
@@ -21,7 +21,6 @@ package org.apache.hadoop.fs.viewfs;
 import java.io.IOException;
 import java.net.URI;
 import java.util.Collections;
-import java.util.EnumSet;
 import java.util.List;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
@@ -30,8 +29,6 @@ import org.apache.hadoop.fs.FsConstants;
 import org.apache.hadoop.fs.LocalFileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.permission.AclEntry;
-import org.apache.hadoop.fs.permission.AclReadFlag;
-import org.apache.hadoop.fs.permission.AclWriteFlag;
 import org.apache.hadoop.fs.viewfs.TestChRootedFileSystem.MockFileSystem;
 import org.junit.*;
 import static org.junit.Assert.*;
@@ -103,38 +100,36 @@ public class TestViewFileSystemDelegatio
     Path viewFsPath2 = new Path("/mounts/mockfs2/d/e/f");
     Path mockFsPath2 = new Path("/d/e/f");
     List<AclEntry> entries = Collections.emptyList();
-    EnumSet<AclWriteFlag> writeFlags = EnumSet.noneOf(AclWriteFlag.class);
-    EnumSet<AclReadFlag> readFlags = EnumSet.noneOf(AclReadFlag.class);
 
-    viewFs.modifyAclEntries(viewFsPath1, entries, writeFlags);
-    verify(mockFs1).modifyAclEntries(mockFsPath1, entries, writeFlags);
-    viewFs.modifyAclEntries(viewFsPath2, entries, writeFlags);
-    verify(mockFs2).modifyAclEntries(mockFsPath2, entries, writeFlags);
-
-    viewFs.removeAclEntries(viewFsPath1, entries, writeFlags);
-    verify(mockFs1).removeAclEntries(mockFsPath1, entries, writeFlags);
-    viewFs.removeAclEntries(viewFsPath2, entries, writeFlags);
-    verify(mockFs2).removeAclEntries(mockFsPath2, entries, writeFlags);
-
-    viewFs.removeDefaultAcl(viewFsPath1, writeFlags);
-    verify(mockFs1).removeDefaultAcl(mockFsPath1, writeFlags);
-    viewFs.removeDefaultAcl(viewFsPath2, writeFlags);
-    verify(mockFs2).removeDefaultAcl(mockFsPath2, writeFlags);
-
-    viewFs.removeAcl(viewFsPath1, writeFlags);
-    verify(mockFs1).removeAcl(mockFsPath1, writeFlags);
-    viewFs.removeAcl(viewFsPath2, writeFlags);
-    verify(mockFs2).removeAcl(mockFsPath2, writeFlags);
-
-    viewFs.setAcl(viewFsPath1, entries, writeFlags);
-    verify(mockFs1).setAcl(mockFsPath1, entries, writeFlags);
-    viewFs.setAcl(viewFsPath2, entries, writeFlags);
-    verify(mockFs2).setAcl(mockFsPath2, entries, writeFlags);
-
-    viewFs.listAclStatus(viewFsPath1, readFlags);
-    verify(mockFs1).listAclStatus(mockFsPath1, readFlags);
-    viewFs.listAclStatus(viewFsPath2, readFlags);
-    verify(mockFs2).listAclStatus(mockFsPath2, readFlags);
+    viewFs.modifyAclEntries(viewFsPath1, entries);
+    verify(mockFs1).modifyAclEntries(mockFsPath1, entries);
+    viewFs.modifyAclEntries(viewFsPath2, entries);
+    verify(mockFs2).modifyAclEntries(mockFsPath2, entries);
+
+    viewFs.removeAclEntries(viewFsPath1, entries);
+    verify(mockFs1).removeAclEntries(mockFsPath1, entries);
+    viewFs.removeAclEntries(viewFsPath2, entries);
+    verify(mockFs2).removeAclEntries(mockFsPath2, entries);
+
+    viewFs.removeDefaultAcl(viewFsPath1);
+    verify(mockFs1).removeDefaultAcl(mockFsPath1);
+    viewFs.removeDefaultAcl(viewFsPath2);
+    verify(mockFs2).removeDefaultAcl(mockFsPath2);
+
+    viewFs.removeAcl(viewFsPath1);
+    verify(mockFs1).removeAcl(mockFsPath1);
+    viewFs.removeAcl(viewFsPath2);
+    verify(mockFs2).removeAcl(mockFsPath2);
+
+    viewFs.setAcl(viewFsPath1, entries);
+    verify(mockFs1).setAcl(mockFsPath1, entries);
+    viewFs.setAcl(viewFsPath2, entries);
+    verify(mockFs2).setAcl(mockFsPath2, entries);
+
+    viewFs.getAclStatus(viewFsPath1);
+    verify(mockFs1).getAclStatus(mockFsPath1);
+    viewFs.getAclStatus(viewFsPath2);
+    verify(mockFs2).getAclStatus(mockFsPath2);
   }
 
   void checkVerifyChecksum(boolean flag) {