hadoop git commit: HDFS-7456. De-duplicate AclFeature instances with same AclEntries do reduce memory footprint of NameNode (Contributed by Vinayakumar B)
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)
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; + } }