From 3e0602a811607894958ef18e30315455b000d6fa Mon Sep 17 00:00:00 2001 From: zhangduo Date: Mon, 4 Feb 2019 13:26:37 +0800 Subject: [PATCH] HBASE-21840 TestHRegionWithInMemoryFlush fails with NPE --- .../regionserver/RegionServicesForStores.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServicesForStores.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServicesForStores.java index ae9977e1ee..595ae7a42f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServicesForStores.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServicesForStores.java @@ -18,14 +18,16 @@ */ package org.apache.hadoop.hbase.regionserver; +import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; - +import java.util.concurrent.TimeUnit; import org.apache.hadoop.hbase.client.RegionInfo; import org.apache.hadoop.hbase.executor.ExecutorType; import org.apache.hadoop.hbase.wal.WAL; import org.apache.yetus.audience.InterfaceAudience; import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting; +import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder; /** * Services a Store needs from a Region. @@ -64,12 +66,24 @@ public class RegionServicesForStores { return region.getWAL(); } + private static ThreadPoolExecutor INMEMORY_COMPACTION_POOL_FOR_TEST; + + private static synchronized ThreadPoolExecutor getInMemoryCompactionPoolForTest() { + if (INMEMORY_COMPACTION_POOL_FOR_TEST == null) { + INMEMORY_COMPACTION_POOL_FOR_TEST = new ThreadPoolExecutor(10, 10, 60, TimeUnit.SECONDS, + new LinkedBlockingQueue<>(), new ThreadFactoryBuilder().setDaemon(true) + .setNameFormat("InMemoryCompactionsForTest-%d").build()); + } + return INMEMORY_COMPACTION_POOL_FOR_TEST; + } + ThreadPoolExecutor getInMemoryCompactionPool() { if (rsServices != null) { return rsServices.getExecutorService().getExecutorLazily(ExecutorType.RS_IN_MEMORY_COMPACTION, inMemoryPoolSize); } else { - return null; + // this could only happen in tests + return getInMemoryCompactionPoolForTest(); } } -- 2.17.1