hadoop git commit: HDFS-7456. De-duplicate AclFeature instances with same AclEntries do reduce memory footprint of NameNode (Contributed by Vinayakumar B)

2014-12-22 Thread vinayakumarb
Repository: hadoop
Updated Branches:
  refs/heads/trunk 0d89859b5 - 50ae1a666


HDFS-7456. De-duplicate AclFeature instances with same AclEntries do reduce 
memory footprint of NameNode (Contributed by Vinayakumar B)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/50ae1a66
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/50ae1a66
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/50ae1a66

Branch: refs/heads/trunk
Commit: 50ae1a6664a92619aa683d2a864d0da9fb4af026
Parents: 0d89859
Author: Vinayakumar B vinayakum...@apache.org
Authored: Tue Dec 23 12:35:53 2014 +0530
Committer: Vinayakumar B vinayakum...@apache.org
Committed: Tue Dec 23 12:35:53 2014 +0530

--
 hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt |   3 +
 .../hadoop/hdfs/server/namenode/AclFeature.java |  37 +++-
 .../hadoop/hdfs/server/namenode/AclStorage.java |  30 ++-
 .../hdfs/server/namenode/INodeAttributes.java   |   9 +-
 .../hdfs/server/namenode/INodeDirectory.java|   9 +
 .../hadoop/hdfs/server/namenode/INodeFile.java  |   3 +
 .../namenode/INodeWithAdditionalFields.java |   5 +-
 .../snapshot/DirectoryWithSnapshotFeature.java  |   5 +
 .../snapshot/FileWithSnapshotFeature.java   |   6 +
 .../hadoop/hdfs/util/ReferenceCountMap.java | 118 +++
 .../hdfs/server/namenode/FSAclBaseTest.java | 207 ++-
 .../server/namenode/TestFileContextAcl.java |   6 +-
 .../hdfs/server/namenode/TestNameNodeAcl.java   |   6 +-
 .../namenode/snapshot/TestAclWithSnapshot.java  | 189 -
 .../apache/hadoop/hdfs/web/TestWebHDFSAcl.java  |   6 +-
 15 files changed, 614 insertions(+), 25 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hadoop/blob/50ae1a66/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
--
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt 
b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index 07a78c2..66b3a8d 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -630,6 +630,9 @@ Release 2.7.0 - UNRELEASED
 HDFS-7560. ACLs removed by removeDefaultAcl() will be back after NameNode
 restart/failover. (Vinayakumar B via cnauroth)
 
+HDFS-7456. De-duplicate AclFeature instances with same AclEntries do reduce
+memory footprint of NameNode (vinayakumarb)
+
 Release 2.6.1 - UNRELEASED
 
   INCOMPATIBLE CHANGES

http://git-wip-us.apache.org/repos/asf/hadoop/blob/50ae1a66/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
--
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
index e097b05..97d4759 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
@@ -18,8 +18,11 @@
 
 package org.apache.hadoop.hdfs.server.namenode;
 
+import java.util.Arrays;
+
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.fs.permission.AclEntry;
+import org.apache.hadoop.hdfs.util.ReferenceCountMap.ReferenceCounter;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
@@ -28,9 +31,10 @@ import com.google.common.collect.ImmutableList;
  * Feature that represents the ACLs of the inode.
  */
 @InterfaceAudience.Private
-public class AclFeature implements INode.Feature {
+public class AclFeature implements INode.Feature, ReferenceCounter {
   public static final ImmutableListAclEntry EMPTY_ENTRY_LIST =
 ImmutableList.of();
+  private int refCount = 0;
 
   private final int [] entries;
 
@@ -56,4 +60,35 @@ public class AclFeature implements INode.Feature {
 Invalid position for AclEntry);
 return entries[pos];
   }
+
+  @Override
+  public boolean equals(Object o) {
+if (o == null) {
+  return false;
+}
+if (getClass() != o.getClass()) {
+  return false;
+}
+return Arrays.equals(entries, ((AclFeature) o).entries);
+  }
+
+  @Override
+  public int hashCode() {
+return Arrays.hashCode(entries);
+  }
+
+  @Override
+  public int getRefCount() {
+return refCount;
+  }
+
+  @Override
+  public int incrementAndGetRefCount() {
+return ++refCount;
+  }
+
+  @Override
+  public int decrementAndGetRefCount() {
+return (refCount  0) ? --refCount : 0;
+  }
 }


hadoop git commit: HDFS-7456. De-duplicate AclFeature instances with same AclEntries do reduce memory footprint of NameNode (Contributed by Vinayakumar B)

2014-12-22 Thread vinayakumarb
Repository: hadoop
Updated Branches:
  refs/heads/branch-2 8b398a66c - cd8e78d50


HDFS-7456. De-duplicate AclFeature instances with same AclEntries do reduce 
memory footprint of NameNode (Contributed by Vinayakumar B)

(cherry picked from commit 50ae1a6664a92619aa683d2a864d0da9fb4af026)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/cd8e78d5
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/cd8e78d5
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/cd8e78d5

Branch: refs/heads/branch-2
Commit: cd8e78d50fedd368ae1fef1324cf122af8d6f562
Parents: 8b398a6
Author: Vinayakumar B vinayakum...@apache.org
Authored: Tue Dec 23 12:35:53 2014 +0530
Committer: Vinayakumar B vinayakum...@apache.org
Committed: Tue Dec 23 12:37:16 2014 +0530

--
 hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt |   3 +
 .../hadoop/hdfs/server/namenode/AclFeature.java |  37 +++-
 .../hadoop/hdfs/server/namenode/AclStorage.java |  30 ++-
 .../hdfs/server/namenode/INodeAttributes.java   |   9 +-
 .../hdfs/server/namenode/INodeDirectory.java|   9 +
 .../hadoop/hdfs/server/namenode/INodeFile.java  |   3 +
 .../namenode/INodeWithAdditionalFields.java |   5 +-
 .../snapshot/DirectoryWithSnapshotFeature.java  |   5 +
 .../snapshot/FileWithSnapshotFeature.java   |   6 +
 .../hadoop/hdfs/util/ReferenceCountMap.java | 118 +++
 .../hdfs/server/namenode/FSAclBaseTest.java | 207 ++-
 .../server/namenode/TestFileContextAcl.java |   6 +-
 .../hdfs/server/namenode/TestNameNodeAcl.java   |   6 +-
 .../namenode/snapshot/TestAclWithSnapshot.java  | 189 -
 .../apache/hadoop/hdfs/web/TestWebHDFSAcl.java  |   6 +-
 15 files changed, 614 insertions(+), 25 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/hadoop/blob/cd8e78d5/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
--
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt 
b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index d2d67e4..360d38b 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -373,6 +373,9 @@ Release 2.7.0 - UNRELEASED
 HDFS-7560. ACLs removed by removeDefaultAcl() will be back after NameNode
 restart/failover. (Vinayakumar B via cnauroth)
 
+HDFS-7456. De-duplicate AclFeature instances with same AclEntries do reduce
+memory footprint of NameNode (vinayakumarb)
+
 Release 2.6.1 - UNRELEASED
 
   INCOMPATIBLE CHANGES

http://git-wip-us.apache.org/repos/asf/hadoop/blob/cd8e78d5/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
--
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
index e097b05..97d4759 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/AclFeature.java
@@ -18,8 +18,11 @@
 
 package org.apache.hadoop.hdfs.server.namenode;
 
+import java.util.Arrays;
+
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.fs.permission.AclEntry;
+import org.apache.hadoop.hdfs.util.ReferenceCountMap.ReferenceCounter;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
@@ -28,9 +31,10 @@ import com.google.common.collect.ImmutableList;
  * Feature that represents the ACLs of the inode.
  */
 @InterfaceAudience.Private
-public class AclFeature implements INode.Feature {
+public class AclFeature implements INode.Feature, ReferenceCounter {
   public static final ImmutableListAclEntry EMPTY_ENTRY_LIST =
 ImmutableList.of();
+  private int refCount = 0;
 
   private final int [] entries;
 
@@ -56,4 +60,35 @@ public class AclFeature implements INode.Feature {
 Invalid position for AclEntry);
 return entries[pos];
   }
+
+  @Override
+  public boolean equals(Object o) {
+if (o == null) {
+  return false;
+}
+if (getClass() != o.getClass()) {
+  return false;
+}
+return Arrays.equals(entries, ((AclFeature) o).entries);
+  }
+
+  @Override
+  public int hashCode() {
+return Arrays.hashCode(entries);
+  }
+
+  @Override
+  public int getRefCount() {
+return refCount;
+  }
+
+  @Override
+  public int incrementAndGetRefCount() {
+return ++refCount;
+  }
+
+  @Override
+  public int decrementAndGetRefCount() {
+return (refCount  0) ? --refCount : 0;
+  }
 }