You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ch...@apache.org on 2017/04/12 03:27:26 UTC
hbase git commit: HBASE-17896 The FIXED_OVERHEAD of Segment is
incorrect
Repository: hbase
Updated Branches:
refs/heads/master d7ddc7919 -> 3aadc675b
HBASE-17896 The FIXED_OVERHEAD of Segment is incorrect
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/3aadc675
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/3aadc675
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/3aadc675
Branch: refs/heads/master
Commit: 3aadc675b0f02c3c13be625b40d72fbf6a844964
Parents: d7ddc79
Author: CHIA-PING TSAI <ch...@gmail.com>
Authored: Tue Apr 11 16:31:20 2017 +0800
Committer: Chia-Ping Tsai <ch...@gmail.com>
Committed: Wed Apr 12 11:26:43 2017 +0800
----------------------------------------------------------------------
.../java/org/apache/hadoop/hbase/util/ClassSize.java | 7 +++++++
.../apache/hadoop/hbase/regionserver/Segment.java | 7 ++++---
.../org/apache/hadoop/hbase/io/TestHeapSize.java | 15 +++++++++------
3 files changed, 20 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/3aadc675/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java
index 465bd9c..e1690c0 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/util/ClassSize.java
@@ -20,6 +20,7 @@
package org.apache.hadoop.hbase.util;
+import com.google.common.annotations.VisibleForTesting;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.concurrent.ConcurrentHashMap;
@@ -235,6 +236,12 @@ public class ClassSize {
}
private static final MemoryLayout memoryLayout = getMemoryLayout();
+ private static final boolean USE_UNSAFE_LAYOUT = (memoryLayout instanceof UnsafeLayout);
+
+ @VisibleForTesting
+ public static boolean useUnsafeLayout() {
+ return USE_UNSAFE_LAYOUT;
+ }
/**
* Method for reading the arc settings and setting overheads according
http://git-wip-us.apache.org/repos/asf/hbase/blob/3aadc675/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java
index 6f431c9..8f43fa8 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java
@@ -48,12 +48,13 @@ import com.google.common.annotations.VisibleForTesting;
@InterfaceAudience.Private
public abstract class Segment {
- final static long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT
- + 5 * ClassSize.REFERENCE // cellSet, comparator, memStoreLAB, size, timeRangeTracker
+ public final static long FIXED_OVERHEAD = ClassSize.align(ClassSize.OBJECT
+ + 6 * ClassSize.REFERENCE // cellSet, comparator, memStoreLAB, dataSize,
+ // heapSize, and timeRangeTracker
+ Bytes.SIZEOF_LONG // minSequenceId
+ Bytes.SIZEOF_BOOLEAN); // tagsPresent
public final static long DEEP_OVERHEAD = FIXED_OVERHEAD + ClassSize.ATOMIC_REFERENCE
- + ClassSize.CELL_SET + ClassSize.ATOMIC_LONG + ClassSize.TIMERANGE_TRACKER;
+ + ClassSize.CELL_SET + 2 * ClassSize.ATOMIC_LONG + ClassSize.TIMERANGE_TRACKER;
private AtomicReference<CellSet> cellSet= new AtomicReference<>();
private final CellComparator comparator;
http://git-wip-us.apache.org/repos/asf/hbase/blob/3aadc675/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java
index 6b943a7..bf74a9e 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java
@@ -344,7 +344,7 @@ public class TestHeapSize {
cl = Segment.class;
actual = Segment.DEEP_OVERHEAD;
expected = ClassSize.estimateBase(cl, false);
- expected += ClassSize.estimateBase(AtomicLong.class, false);
+ expected += 2 * ClassSize.estimateBase(AtomicLong.class, false);
expected += ClassSize.estimateBase(AtomicReference.class, false);
expected += ClassSize.estimateBase(CellSet.class, false);
expected += ClassSize.estimateBase(TimeRangeTracker.class, false);
@@ -361,7 +361,7 @@ public class TestHeapSize {
cl = MutableSegment.class;
actual = MutableSegment.DEEP_OVERHEAD;
expected = ClassSize.estimateBase(cl, false);
- expected += ClassSize.estimateBase(AtomicLong.class, false);
+ expected += 2 * ClassSize.estimateBase(AtomicLong.class, false);
expected += ClassSize.estimateBase(AtomicReference.class, false);
expected += ClassSize.estimateBase(CellSet.class, false);
expected += ClassSize.estimateBase(TimeRangeTracker.class, false);
@@ -380,7 +380,7 @@ public class TestHeapSize {
cl = ImmutableSegment.class;
actual = ImmutableSegment.DEEP_OVERHEAD_CSLM;
expected = ClassSize.estimateBase(cl, false);
- expected += ClassSize.estimateBase(AtomicLong.class, false);
+ expected += 2 * ClassSize.estimateBase(AtomicLong.class, false);
expected += ClassSize.estimateBase(AtomicReference.class, false);
expected += ClassSize.estimateBase(CellSet.class, false);
expected += ClassSize.estimateBase(TimeRangeTracker.class, false);
@@ -398,7 +398,7 @@ public class TestHeapSize {
}
actual = ImmutableSegment.DEEP_OVERHEAD_CAM;
expected = ClassSize.estimateBase(cl, false);
- expected += ClassSize.estimateBase(AtomicLong.class, false);
+ expected += 2 * ClassSize.estimateBase(AtomicLong.class, false);
expected += ClassSize.estimateBase(AtomicReference.class, false);
expected += ClassSize.estimateBase(CellSet.class, false);
expected += ClassSize.estimateBase(TimeRangeTracker.class, false);
@@ -504,8 +504,11 @@ public class TestHeapSize {
} else {
assertTrue(ClassSize.OBJECT == 12 || ClassSize.OBJECT == 16); // depending on CompressedOops
}
- assertEquals(ClassSize.OBJECT + 4, ClassSize.ARRAY);
+ if (ClassSize.useUnsafeLayout()) {
+ assertEquals(ClassSize.OBJECT + 4, ClassSize.ARRAY);
+ } else {
+ assertEquals(ClassSize.OBJECT + 8, ClassSize.ARRAY);
+ }
}
-
}