001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.mob; 019 020import java.io.IOException; 021import org.apache.hadoop.hbase.HBaseClassTestRule; 022import org.apache.hadoop.hbase.client.ColumnFamilyDescriptor; 023import org.apache.hadoop.hbase.client.TableDescriptor; 024import org.apache.hadoop.hbase.testclassification.LargeTests; 025import org.junit.Before; 026import org.junit.ClassRule; 027import org.junit.experimental.categories.Category; 028import org.junit.runner.RunWith; 029import org.junit.runners.Parameterized; 030import org.slf4j.Logger; 031import org.slf4j.LoggerFactory; 032 033/** 034 * Mob file compaction chore in a regular batch mode test. 1. Enables batch mode for regular MOB 035 * compaction, Sets batch size to 7 regions. 2. Disables periodic MOB compactions, sets minimum age 036 * to archive to 10 sec 3. Creates MOB table with 20 regions 4. Loads MOB data (randomized keys, 037 * 1000 rows), flushes data. 5. Repeats 4. two more times 6. Verifies that we have 20 *3 = 60 mob 038 * files (equals to number of regions x 3) 7. Runs major MOB compaction. 8. Verifies that number of 039 * MOB files in a mob directory is 20 x4 = 80 9. Waits for a period of time larger than minimum age 040 * to archive 10. Runs Mob cleaner chore 11 Verifies that number of MOB files in a mob directory is 041 * 20. 12 Runs scanner and checks all 3 * 1000 rows. 042 */ 043@RunWith(Parameterized.class) 044@Category(LargeTests.class) 045public class TestMobCompactionRegularRegionBatchMode extends TestMobCompactionWithDefaults { 046 private static final Logger LOG = 047 LoggerFactory.getLogger(TestMobCompactionRegularRegionBatchMode.class); 048 @ClassRule 049 public static final HBaseClassTestRule CLASS_RULE = 050 HBaseClassTestRule.forClass(TestMobCompactionRegularRegionBatchMode.class); 051 052 private static final int batchSize = 7; 053 private MobFileCompactionChore compactionChore; 054 055 public TestMobCompactionRegularRegionBatchMode(Boolean useFileBasedSFT) { 056 super(useFileBasedSFT); 057 } 058 059 @Before 060 public void setUp() throws Exception { 061 super.setUp(); 062 compactionChore = new MobFileCompactionChore(conf, batchSize); 063 } 064 065 protected void additonalConfigSetup() { 066 conf.setInt(MobConstants.MOB_MAJOR_COMPACTION_REGION_BATCH_SIZE, batchSize); 067 } 068 069 @Override 070 protected void mobCompactImpl(TableDescriptor tableDescriptor, 071 ColumnFamilyDescriptor familyDescriptor) throws IOException, InterruptedException { 072 LOG.debug("compacting {} in batch mode.", tableDescriptor.getTableName()); 073 compactionChore.performMajorCompactionInBatches(admin, tableDescriptor, familyDescriptor); 074 } 075 076 @Override 077 protected String description() { 078 return "regular batch mode"; 079 } 080 081}