HBASE-21388 No need to instantiate MemStoreLAB for master which not carry table

This commit is contained in:
Guanghao Zhang 2018-10-29 11:50:53 +08:00
parent 0d17e4b399
commit 2d0810a006
5 changed files with 98 additions and 12 deletions

View File

@ -909,8 +909,11 @@ public class HMaster extends HRegionServer implements MasterServices {
this.masterActiveTime = System.currentTimeMillis();
// TODO: Do this using Dependency Injection, using PicoContainer, Guice or Spring.
// Initialize the chunkCreator
initializeMemStoreChunkCreator();
// Only initialize the MemStoreLAB when master carry table
if (LoadBalancer.isTablesOnMaster(conf)) {
initializeMemStoreChunkCreator();
}
this.fileSystemManager = new MasterFileSystem(conf);
this.walManager = new MasterWalManager(this);

View File

@ -135,7 +135,8 @@ public class ChunkCreator {
return instance;
}
static ChunkCreator getInstance() {
@VisibleForTesting
public static ChunkCreator getInstance() {
return instance;
}

View File

@ -595,8 +595,7 @@ public class HRegionServer extends HasThread implements
regionServerAccounting = new RegionServerAccounting(conf);
boolean isMasterNotCarryTable =
this instanceof HMaster && !LoadBalancer.isTablesOnMaster(conf) && !LoadBalancer
.isSystemTablesOnlyOnMaster(conf);
this instanceof HMaster && !LoadBalancer.isTablesOnMaster(conf);
cacheConfig = new CacheConfig(conf, !isMasterNotCarryTable);
mobCacheConfig = new MobCacheConfig(conf, !isMasterNotCarryTable);
uncaughtExceptionHandler = new UncaughtExceptionHandler() {

View File

@ -20,7 +20,6 @@ package org.apache.hadoop.hbase.master;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@ -233,11 +232,5 @@ public class TestMaster {
// Assert lock gets put in place again.
assertTrue(fs.exists(hbckLockPath));
}
@Test
public void testMasterBlockCache() {
// Master not carry table in default, so no need to instantiate block cache, too.
assertNull(TEST_UTIL.getMiniHBaseCluster().getMaster().getCacheConfig().getBlockCache());
}
}

View File

@ -0,0 +1,90 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hbase.master;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseClassTestRule;
import org.apache.hadoop.hbase.HBaseTestingUtility;
import org.apache.hadoop.hbase.regionserver.ChunkCreator;
import org.apache.hadoop.hbase.testclassification.MasterTests;
import org.apache.hadoop.hbase.testclassification.MediumTests;
import org.apache.hadoop.hbase.util.FSUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Category({MasterTests.class, MediumTests.class})
public class TestMasterNotCarryTable {
@ClassRule
public static final HBaseClassTestRule CLASS_RULE =
HBaseClassTestRule.forClass(TestMasterNotCarryTable.class);
private static final Logger LOG = LoggerFactory.getLogger(TestMasterNotCarryTable.class);
private static final HBaseTestingUtility UTIL = new HBaseTestingUtility();
private static HMaster master;
@BeforeClass
public static void setUp() throws Exception {
Configuration c = UTIL.getConfiguration();
// We use local filesystem. Set it so it writes into the testdir.
FSUtils.setRootDir(c, UTIL.getDataTestDir());
UTIL.startMiniZKCluster();
master = new HMaster(UTIL.getConfiguration());
master.start();
// As no regionservers, only wait master to create AssignmentManager.
while (master.getAssignmentManager() != null) {
LOG.debug("Wait master to create AssignmentManager");
Thread.sleep(1000);
}
}
@AfterClass
public static void tearDown() throws Exception {
master.stop("Shutdown");
UTIL.shutdownMiniZKCluster();
}
@Test
public void testMasterNotCarryTable() {
// The default config is false
assertFalse(LoadBalancer.isTablesOnMaster(UTIL.getConfiguration()));
assertFalse(LoadBalancer.isSystemTablesOnlyOnMaster(UTIL.getConfiguration()));
}
@Test
public void testMasterBlockCache() {
// no need to instantiate block cache.
assertNull(master.getCacheConfig().getBlockCache());
}
@Test
public void testMasterMemStoreLAB() {
// no need to instantiate MemStoreLAB.
assertNull(ChunkCreator.getInstance());
}
}