From 3cb0431383c0f915df7e34eafb54e4f622ae7f2b Mon Sep 17 00:00:00 2001 From: Viraj Jasani Date: Tue, 14 Jan 2020 23:01:49 -0800 Subject: [PATCH] HBASE-23569 : Validate that all default chores of HMaster are scheduled Signed-off-by: Andrew Purtell --- .../master/TestMasterChoreScheduled.java | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java new file mode 100644 index 00000000000..e9b893f895f --- /dev/null +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java @@ -0,0 +1,115 @@ +/** + * 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 java.lang.reflect.Field; + +import org.apache.hadoop.hbase.HBaseTestingUtility; +import org.apache.hadoop.hbase.ScheduledChore; +import org.apache.hadoop.hbase.master.balancer.BalancerChore; +import org.apache.hadoop.hbase.master.balancer.ClusterStatusChore; +import org.apache.hadoop.hbase.master.cleaner.HFileCleaner; +import org.apache.hadoop.hbase.master.cleaner.LogCleaner; +import org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore; +import org.apache.hadoop.hbase.testclassification.MasterTests; +import org.apache.hadoop.hbase.testclassification.MediumTests; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +/** + * Tests to validate if HMaster default chores are scheduled + */ +@Category({MasterTests.class, MediumTests.class}) +public class TestMasterChoreScheduled { + + private static HMaster hMaster; + + private static final HBaseTestingUtility UTIL = new HBaseTestingUtility(); + + @BeforeClass + public static void setUp() throws Exception { + UTIL.startMiniCluster(1, 1); + hMaster = UTIL.getMiniHBaseCluster().getMaster(); + } + + @AfterClass + public static void tearDown() throws Exception { + UTIL.shutdownMiniCluster(); + } + + @Test + public void testDefaultScheduledChores() throws Exception { + // test if logCleaner chore is scheduled by default in HMaster init + TestChoreField logCleanerTestChoreField = new TestChoreField<>(); + LogCleaner logCleaner = logCleanerTestChoreField.getChoreObj("logCleaner"); + logCleanerTestChoreField.testIfChoreScheduled(logCleaner); + + // test if hfileCleaner chore is scheduled by default in HMaster init + TestChoreField hFileCleanerTestChoreField = new TestChoreField<>(); + HFileCleaner hFileCleaner = hFileCleanerTestChoreField.getChoreObj("hfileCleaner"); + hFileCleanerTestChoreField.testIfChoreScheduled(hFileCleaner); + + // test if clusterStatusChore chore is scheduled by default in HMaster init + TestChoreField clusterStatusChoreTestChoreField = new TestChoreField<>(); + ClusterStatusChore clusterStatusChore = clusterStatusChoreTestChoreField + .getChoreObj("clusterStatusChore"); + clusterStatusChoreTestChoreField.testIfChoreScheduled(clusterStatusChore); + + // test if balancerChore chore is scheduled by default in HMaster init + TestChoreField balancerChoreTestChoreField = new TestChoreField<>(); + BalancerChore balancerChore = balancerChoreTestChoreField.getChoreObj("balancerChore"); + balancerChoreTestChoreField.testIfChoreScheduled(balancerChore); + + // test if normalizerChore chore is scheduled by default in HMaster init + TestChoreField regionNormalizerChoreTestChoreField = + new TestChoreField<>(); + RegionNormalizerChore regionNormalizerChore = regionNormalizerChoreTestChoreField + .getChoreObj("normalizerChore"); + regionNormalizerChoreTestChoreField.testIfChoreScheduled(regionNormalizerChore); + + // test if catalogJanitorChore chore is scheduled by default in HMaster init + TestChoreField catalogJanitorTestChoreField = new TestChoreField<>(); + CatalogJanitor catalogJanitor = catalogJanitorTestChoreField + .getChoreObj("catalogJanitorChore"); + catalogJanitorTestChoreField.testIfChoreScheduled(catalogJanitor); + + } + + + private static class TestChoreField { + + private E getChoreObj(String fieldName) throws NoSuchFieldException, + IllegalAccessException { + Field masterField = HMaster.class.getDeclaredField(fieldName); + masterField.setAccessible(true); + E choreFieldVal = (E) masterField.get(hMaster); + return choreFieldVal; + } + + private void testIfChoreScheduled(E choreObj) { + Assert.assertNotNull(choreObj); + Assert.assertTrue(hMaster.getChoreService().isChoreScheduled(choreObj)); + } + + } + +}