Search in sources :

Example 36 with ProcedureExecutor

use of org.apache.hadoop.hbase.procedure2.ProcedureExecutor in project hbase by apache.

the class TestCatalogJanitorInMemoryStates method testInMemoryParentCleanup.

/**
 * Test clearing a split parent from memory.
 */
@Test
public void testInMemoryParentCleanup() throws IOException, InterruptedException, ExecutionException {
    HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
    final AssignmentManager am = master.getAssignmentManager();
    final ServerManager sm = master.getServerManager();
    Admin admin = TEST_UTIL.getAdmin();
    admin.catalogJanitorSwitch(false);
    final TableName tableName = name.getTableName();
    Table t = TEST_UTIL.createTable(tableName, FAMILY);
    TEST_UTIL.loadTable(t, FAMILY, false);
    RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName);
    List<HRegionLocation> allRegionLocations = locator.getAllRegionLocations();
    // We need to create a valid split with daughter regions
    HRegionLocation parent = allRegionLocations.get(0);
    List<HRegionLocation> daughters = splitRegion(parent.getRegion());
    LOG.info("Parent region: " + parent);
    LOG.info("Daughter regions: " + daughters);
    assertNotNull("Should have found daughter regions for " + parent, daughters);
    assertTrue("Parent region should exist in RegionStates", am.getRegionStates().isRegionInRegionStates(parent.getRegion()));
    assertTrue("Parent region should exist in ServerManager", sm.isRegionInServerManagerStates(parent.getRegion()));
    // clean the parent
    Result r = MetaMockingUtil.getMetaTableRowResult(parent.getRegion(), null, daughters.get(0).getRegion(), daughters.get(1).getRegion());
    CatalogJanitor.cleanParent(master, parent.getRegion(), r);
    // wait for procedures to complete
    Waiter.waitFor(TEST_UTIL.getConfiguration(), 10 * 1000, new Waiter.Predicate<Exception>() {

        @Override
        public boolean evaluate() throws Exception {
            ProcedureExecutor<MasterProcedureEnv> pe = master.getMasterProcedureExecutor();
            for (Procedure<MasterProcedureEnv> proc : pe.getProcedures()) {
                if (proc.getClass().isAssignableFrom(GCRegionProcedure.class) && proc.isFinished()) {
                    return true;
                }
            }
            return false;
        }
    });
    assertFalse("Parent region should have been removed from RegionStates", am.getRegionStates().isRegionInRegionStates(parent.getRegion()));
    assertFalse("Parent region should have been removed from ServerManager", sm.isRegionInServerManagerStates(parent.getRegion()));
}
Also used : ServerManager(org.apache.hadoop.hbase.master.ServerManager) RegionLocator(org.apache.hadoop.hbase.client.RegionLocator) Table(org.apache.hadoop.hbase.client.Table) ProcedureExecutor(org.apache.hadoop.hbase.procedure2.ProcedureExecutor) AssignmentManager(org.apache.hadoop.hbase.master.assignment.AssignmentManager) Admin(org.apache.hadoop.hbase.client.Admin) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) Result(org.apache.hadoop.hbase.client.Result) TableName(org.apache.hadoop.hbase.TableName) HRegionLocation(org.apache.hadoop.hbase.HRegionLocation) HMaster(org.apache.hadoop.hbase.master.HMaster) GCRegionProcedure(org.apache.hadoop.hbase.master.assignment.GCRegionProcedure) Procedure(org.apache.hadoop.hbase.procedure2.Procedure) Waiter(org.apache.hadoop.hbase.Waiter) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)25 ProcedureExecutor (org.apache.hadoop.hbase.procedure2.ProcedureExecutor)24 TableName (org.apache.hadoop.hbase.TableName)22 MasterProcedureEnv (org.apache.hadoop.hbase.master.procedure.MasterProcedureEnv)22 HBaseClassTestRule (org.apache.hadoop.hbase.HBaseClassTestRule)17 MasterTests (org.apache.hadoop.hbase.testclassification.MasterTests)17 Bytes (org.apache.hadoop.hbase.util.Bytes)17 ClassRule (org.junit.ClassRule)17 Category (org.junit.experimental.categories.Category)17 RegionInfo (org.apache.hadoop.hbase.client.RegionInfo)16 IOException (java.io.IOException)15 HBaseTestingUtil (org.apache.hadoop.hbase.HBaseTestingUtil)15 Procedure (org.apache.hadoop.hbase.procedure2.Procedure)14 BeforeClass (org.junit.BeforeClass)14 MediumTests (org.apache.hadoop.hbase.testclassification.MediumTests)12 AfterClass (org.junit.AfterClass)12 HMaster (org.apache.hadoop.hbase.master.HMaster)11 Configuration (org.apache.hadoop.conf.Configuration)10 Logger (org.slf4j.Logger)10 LoggerFactory (org.slf4j.LoggerFactory)10