Skip to content

Commit dad9a7d

Browse files
authored
HBASE-27437 TestHeapSize is flaky (#4841)
Signed-off-by: GeorryHuang <huangzhuoyue@apache.org>
1 parent c881eb1 commit dad9a7d

1 file changed

Lines changed: 29 additions & 13 deletions

File tree

hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
*/
1818
package org.apache.hadoop.hbase.io;
1919

20+
import static org.hamcrest.MatcherAssert.assertThat;
21+
import static org.hamcrest.Matchers.lessThan;
2022
import static org.junit.Assert.assertEquals;
2123
import static org.junit.Assert.assertTrue;
2224

@@ -25,13 +27,16 @@
2527
import java.lang.management.RuntimeMXBean;
2628
import java.nio.ByteBuffer;
2729
import java.util.ArrayList;
30+
import java.util.Arrays;
2831
import java.util.LinkedList;
32+
import java.util.List;
2933
import java.util.Map;
3034
import java.util.TreeMap;
3135
import java.util.concurrent.ConcurrentHashMap;
3236
import java.util.concurrent.ConcurrentSkipListMap;
3337
import java.util.concurrent.CopyOnWriteArrayList;
3438
import java.util.concurrent.CopyOnWriteArraySet;
39+
import java.util.concurrent.TimeUnit;
3540
import java.util.concurrent.atomic.AtomicBoolean;
3641
import java.util.concurrent.atomic.AtomicInteger;
3742
import java.util.concurrent.atomic.AtomicLong;
@@ -69,7 +74,6 @@
6974
import org.apache.hadoop.hbase.testclassification.IOTests;
7075
import org.apache.hadoop.hbase.testclassification.SmallTests;
7176
import org.apache.hadoop.hbase.util.ClassSize;
72-
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
7377
import org.junit.BeforeClass;
7478
import org.junit.ClassRule;
7579
import org.junit.Test;
@@ -602,18 +606,30 @@ public void testObjectSize() throws IOException {
602606
}
603607
}
604608

605-
@Test
606-
public void testAutoCalcFixedOverHead() {
607-
Class[] classList = new Class[] { HFileContext.class, HRegion.class, BlockCacheKey.class,
608-
HFileBlock.class, HStore.class, LruBlockCache.class, StoreContext.class };
609-
for (Class cl : classList) {
610-
// do estimate in advance to ensure class is loaded
611-
ClassSize.estimateBase(cl, false);
612-
613-
long startTime = EnvironmentEdgeManager.currentTime();
614-
ClassSize.estimateBase(cl, false);
615-
long endTime = EnvironmentEdgeManager.currentTime();
616-
assertTrue(endTime - startTime < 5);
609+
private long calcFixedOverhead(List<Class<?>> classList) {
610+
long overhead = 0;
611+
for (Class<?> clazz : classList) {
612+
overhead += ClassSize.estimateBase(clazz, false);
617613
}
614+
return overhead;
615+
}
616+
617+
@Test
618+
public void testAutoCalcFixedOverhead() throws InterruptedException {
619+
List<Class<?>> classList = Arrays.asList(HFileContext.class, HRegion.class, BlockCacheKey.class,
620+
HFileBlock.class, HStore.class, LruBlockCache.class, StoreContext.class);
621+
for (int i = 0; i < 10; i++) {
622+
// warm up
623+
calcFixedOverhead(classList);
624+
}
625+
long startNs = System.nanoTime();
626+
long overhead = 0;
627+
for (int i = 0; i < 100; i++) {
628+
overhead += calcFixedOverhead(classList);
629+
}
630+
long costNs = System.nanoTime() - startNs;
631+
LOG.info("overhead = {}, cost {} ns", overhead, costNs);
632+
// the single computation cost should be less than 5ms
633+
assertThat(costNs, lessThan(TimeUnit.MILLISECONDS.toNanos(5) * classList.size() * 100));
618634
}
619635
}

0 commit comments

Comments
 (0)