HDFS-15907. Reduce Memory Overhead of AclFeature by avoiding AtomicInteger. Contributed by Stephen O'Donnell.

This commit is contained in:
Ayush Saxena 2021-03-24 02:10:02 +05:30
parent 174f3a96b1
commit 569e407f64

View File

@ -19,7 +19,6 @@
package org.apache.hadoop.hdfs.server.namenode;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.fs.permission.AclEntry;
@ -35,7 +34,7 @@
public class AclFeature implements INode.Feature, ReferenceCounter {
public static final ImmutableList<AclEntry> EMPTY_ENTRY_LIST =
ImmutableList.of();
private AtomicInteger value = new AtomicInteger();
private int refCount = 0;
private final int [] entries;
@ -84,17 +83,17 @@ public int hashCode() {
}
@Override
public int getRefCount() {
return value.get();
public synchronized int getRefCount() {
return refCount;
}
@Override
public int incrementAndGetRefCount() {
return value.incrementAndGet();
public synchronized int incrementAndGetRefCount() {
return ++refCount;
}
@Override
public int decrementAndGetRefCount() {
return value.updateAndGet(i -> i > 0 ? i - 1 : i);
public synchronized int decrementAndGetRefCount() {
return (refCount > 0) ? --refCount : 0;
}
}