HBASE-23723 Ensure MOB compaction works in optimized mode after snapshot clone (...
[hbase.git] / hbase-server / src / test / java / org / apache / hadoop / hbase / TestMovedRegionsCleaner.java
blob8932646ef9b9ab85c71b50b3f1ec544e1254cea9
1 /**
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 package org.apache.hadoop.hbase;
20 import java.io.IOException;
21 import org.apache.hadoop.conf.Configuration;
22 import org.apache.hadoop.hbase.testclassification.MediumTests;
23 import org.apache.hadoop.hbase.testclassification.MiscTests;
24 import org.junit.After;
25 import org.junit.Before;
26 import org.junit.ClassRule;
27 import org.junit.Test;
28 import org.junit.experimental.categories.Category;
30 /**
31 * Test whether background cleanup of MovedRegion entries is happening
33 @Category({ MiscTests.class, MediumTests.class })
34 public class TestMovedRegionsCleaner {
36 @ClassRule
37 public static final HBaseClassTestRule CLASS_RULE =
38 HBaseClassTestRule.forClass(TestMovedRegionsCleaner.class);
40 private final HBaseTestingUtility UTIL = new HBaseTestingUtility();
42 public static int numCalls = 0;
44 private static class TestMockRegionServer extends MiniHBaseCluster.MiniHBaseClusterRegionServer {
46 public TestMockRegionServer(Configuration conf) throws IOException, InterruptedException {
47 super(conf);
50 @Override
51 protected int movedRegionCleanerPeriod() {
52 return 500;
55 @Override protected void cleanMovedRegions() {
56 // count the number of calls that are being made to this
58 numCalls++;
59 super.cleanMovedRegions();
63 @After public void after() throws Exception {
64 UTIL.shutdownMiniCluster();
67 @Before public void before() throws Exception {
68 UTIL.getConfiguration()
69 .setStrings(HConstants.REGION_SERVER_IMPL, TestMockRegionServer.class.getName());
70 UTIL.startMiniCluster(1);
73 /**
74 * Start the cluster, wait for some time and verify that the background
75 * MovedRegion cleaner indeed gets called
77 * @throws IOException
78 * @throws InterruptedException
80 @Test public void testMovedRegionsCleaner() throws IOException, InterruptedException {
81 // We need to sleep long enough to trigger at least one round of background calls
82 // to MovedRegionCleaner happen. Currently the period is set to 500ms.
83 // Setting the sleep here for 2s just to be safe
85 UTIL.waitFor(2000, new Waiter.Predicate<IOException>() {
86 @Override
87 public boolean evaluate() throws IOException {
89 // verify that there was at least one call to the cleanMovedRegions function
91 return numCalls > 0;
93 });