Skip to content

Commit

Permalink
HBASE-27437 TestHeapSize is flaky (apache#4841)
Browse files Browse the repository at this point in the history
Signed-off-by: GeorryHuang <huangzhuoyue@apache.org>
(cherry picked from commit dad9a7d)

Conflicts:
	hbase-server/src/test/java/org/apache/hadoop/hbase/io/TestHeapSize.java
  • Loading branch information
Apache9 committed Oct 28, 2022
1 parent 73169be commit a6a5f03
Showing 1 changed file with 29 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
*/
package org.apache.hadoop.hbase.io;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.lessThan;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

Expand All @@ -25,13 +27,16 @@
import java.lang.management.RuntimeMXBean;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
Expand Down Expand Up @@ -601,18 +606,30 @@ public void testObjectSize() throws IOException {
}
}

@Test
public void testAutoCalcFixedOverHead() {
Class[] classList = new Class[] { HFileContext.class, HRegion.class, BlockCacheKey.class,
HFileBlock.class, HStore.class, LruBlockCache.class, StoreContext.class };
for (Class cl : classList) {
// do estimate in advance to ensure class is loaded
ClassSize.estimateBase(cl, false);

long startTime = System.currentTimeMillis();
ClassSize.estimateBase(cl, false);
long endTime = System.currentTimeMillis();
assertTrue(endTime - startTime < 5);
private long calcFixedOverhead(List<Class<?>> classList) {
long overhead = 0;
for (Class<?> clazz : classList) {
overhead += ClassSize.estimateBase(clazz, false);
}
return overhead;
}

@Test
public void testAutoCalcFixedOverhead() throws InterruptedException {
List<Class<?>> classList = Arrays.asList(HFileContext.class, HRegion.class, BlockCacheKey.class,
HFileBlock.class, HStore.class, LruBlockCache.class, StoreContext.class);
for (int i = 0; i < 10; i++) {
// warm up
calcFixedOverhead(classList);
}
long startNs = System.nanoTime();
long overhead = 0;
for (int i = 0; i < 100; i++) {
overhead += calcFixedOverhead(classList);
}
long costNs = System.nanoTime() - startNs;
LOG.info("overhead = {}, cost {} ns", overhead, costNs);
// the single computation cost should be less than 5ms
assertThat(costNs, lessThan(TimeUnit.MILLISECONDS.toNanos(5) * classList.size() * 100));
}
}

0 comments on commit a6a5f03

Please sign in to comment.