Search in sources :

Example 6 with RegionStates

use of org.apache.hadoop.hbase.master.RegionStates in project hbase by apache.

the class ProcedureSyncWait method waitRegionInTransition.

protected static void waitRegionInTransition(final MasterProcedureEnv env, final List<HRegionInfo> regions) throws IOException, CoordinatedStateException {
    final AssignmentManager am = env.getMasterServices().getAssignmentManager();
    final RegionStates states = am.getRegionStates();
    for (final HRegionInfo region : regions) {
        ProcedureSyncWait.waitFor(env, "regions " + region.getRegionNameAsString() + " in transition", new ProcedureSyncWait.Predicate<Boolean>() {

            @Override
            public Boolean evaluate() throws IOException {
                if (states.isRegionInState(region, State.FAILED_OPEN)) {
                    am.regionOffline(region);
                }
                return !states.isRegionInTransition(region);
            }
        });
    }
}
Also used : HRegionInfo(org.apache.hadoop.hbase.HRegionInfo) RegionStates(org.apache.hadoop.hbase.master.RegionStates) AssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager) InterruptedIOException(java.io.InterruptedIOException) TimeoutIOException(org.apache.hadoop.hbase.exceptions.TimeoutIOException) IOException(java.io.IOException)

Example 7 with RegionStates

use of org.apache.hadoop.hbase.master.RegionStates in project hbase by apache.

the class RegionLocationFinder method scheduleFullRefresh.

/**
   * Refresh all the region locations.
   *
   * @return true if user created regions got refreshed.
   */
private boolean scheduleFullRefresh() {
    // Protect from anything being null while starting up.
    if (services == null) {
        return false;
    }
    AssignmentManager am = services.getAssignmentManager();
    if (am == null) {
        return false;
    }
    RegionStates regionStates = am.getRegionStates();
    if (regionStates == null) {
        return false;
    }
    Set<HRegionInfo> regions = regionStates.getRegionAssignments().keySet();
    boolean includesUserTables = false;
    for (final HRegionInfo hri : regions) {
        cache.refresh(hri);
        includesUserTables = includesUserTables || !hri.isSystemTable();
    }
    return includesUserTables;
}
Also used : HRegionInfo(org.apache.hadoop.hbase.HRegionInfo) RegionStates(org.apache.hadoop.hbase.master.RegionStates) AssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)

Example 8 with RegionStates

use of org.apache.hadoop.hbase.master.RegionStates in project hbase by apache.

the class TestScannersFromClientSide method testScanOnReopenedRegion.

/**
   * Test from client side for scan while the region is reopened
   * on the same region server.
   *
   * @throws Exception
   */
@Test
public void testScanOnReopenedRegion() throws Exception {
    final TableName tableName = TableName.valueOf(name.getMethodName());
    byte[][] QUALIFIERS = HTestConst.makeNAscii(QUALIFIER, 2);
    Table ht = TEST_UTIL.createTable(tableName, FAMILY);
    Put put;
    Scan scan;
    Result result;
    ResultScanner scanner;
    boolean toLog = false;
    List<Cell> kvListExp;
    // table: row, family, c0:0, c1:1
    put = new Put(ROW);
    for (int i = 0; i < QUALIFIERS.length; i++) {
        KeyValue kv = new KeyValue(ROW, FAMILY, QUALIFIERS[i], i, VALUE);
        put.add(kv);
    }
    ht.put(put);
    scan = new Scan().withStartRow(ROW);
    scanner = ht.getScanner(scan);
    HRegionLocation loc;
    try (RegionLocator locator = TEST_UTIL.getConnection().getRegionLocator(tableName)) {
        loc = locator.getRegionLocation(ROW);
    }
    HRegionInfo hri = loc.getRegionInfo();
    MiniHBaseCluster cluster = TEST_UTIL.getMiniHBaseCluster();
    byte[] regionName = hri.getRegionName();
    int i = cluster.getServerWith(regionName);
    HRegionServer rs = cluster.getRegionServer(i);
    ProtobufUtil.closeRegion(null, rs.getRSRpcServices(), rs.getServerName(), regionName);
    long startTime = EnvironmentEdgeManager.currentTime();
    long timeOut = 300000;
    while (true) {
        if (rs.getOnlineRegion(regionName) == null) {
            break;
        }
        assertTrue("Timed out in closing the testing region", EnvironmentEdgeManager.currentTime() < startTime + timeOut);
        Thread.sleep(500);
    }
    // Now open the region again.
    HMaster master = cluster.getMaster();
    RegionStates states = master.getAssignmentManager().getRegionStates();
    states.regionOffline(hri);
    states.updateRegionState(hri, State.OPENING);
    ProtobufUtil.openRegion(null, rs.getRSRpcServices(), rs.getServerName(), hri);
    startTime = EnvironmentEdgeManager.currentTime();
    while (true) {
        if (rs.getOnlineRegion(regionName) != null) {
            break;
        }
        assertTrue("Timed out in open the testing region", EnvironmentEdgeManager.currentTime() < startTime + timeOut);
        Thread.sleep(500);
    }
    // c0:0, c1:1
    kvListExp = new ArrayList<>();
    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[0], 0, VALUE));
    kvListExp.add(new KeyValue(ROW, FAMILY, QUALIFIERS[1], 1, VALUE));
    result = scanner.next();
    verifyResult(result, kvListExp, toLog, "Testing scan on re-opened region");
}
Also used : KeyValue(org.apache.hadoop.hbase.KeyValue) MiniHBaseCluster(org.apache.hadoop.hbase.MiniHBaseCluster) HRegionServer(org.apache.hadoop.hbase.regionserver.HRegionServer) HRegionInfo(org.apache.hadoop.hbase.HRegionInfo) TableName(org.apache.hadoop.hbase.TableName) HRegionLocation(org.apache.hadoop.hbase.HRegionLocation) RegionStates(org.apache.hadoop.hbase.master.RegionStates) HMaster(org.apache.hadoop.hbase.master.HMaster) Cell(org.apache.hadoop.hbase.Cell) Test(org.junit.Test)

Example 9 with RegionStates

use of org.apache.hadoop.hbase.master.RegionStates in project hbase by apache.

the class TestSplitTransactionOnCluster method testExistingZnodeBlocksSplitAndWeRollback.

@Test(timeout = 300000)
public void testExistingZnodeBlocksSplitAndWeRollback() throws IOException, InterruptedException {
    final TableName tableName = TableName.valueOf(name.getMethodName());
    // Create table then get the single region for our new table.
    Table t = createTableAndWait(tableName, HConstants.CATALOG_FAMILY);
    List<HRegion> regions = cluster.getRegions(tableName);
    HRegionInfo hri = getAndCheckSingleTableRegion(regions);
    int tableRegionIndex = ensureTableRegionNotOnSameServerAsMeta(admin, hri);
    RegionStates regionStates = cluster.getMaster().getAssignmentManager().getRegionStates();
    // Turn off balancer so it doesn't cut in and mess up our placements.
    this.admin.setBalancerRunning(false, true);
    // Turn off the meta scanner so it don't remove parent on us.
    cluster.getMaster().setCatalogJanitorEnabled(false);
    try {
        // Add a bit of load up into the table so splittable.
        TESTING_UTIL.loadTable(t, HConstants.CATALOG_FAMILY, false);
        // Get region pre-split.
        HRegionServer server = cluster.getRegionServer(tableRegionIndex);
        printOutRegions(server, "Initial regions: ");
        int regionCount = ProtobufUtil.getOnlineRegions(server.getRSRpcServices()).size();
        regionStates.updateRegionState(hri, RegionState.State.CLOSING);
        // Now try splitting.... should fail.  And each should successfully
        // rollback.
        this.admin.splitRegion(hri.getRegionName());
        this.admin.splitRegion(hri.getRegionName());
        this.admin.splitRegion(hri.getRegionName());
        // Wait around a while and assert count of regions remains constant.
        for (int i = 0; i < 10; i++) {
            Thread.sleep(100);
            assertEquals(regionCount, ProtobufUtil.getOnlineRegions(server.getRSRpcServices()).size());
        }
        regionStates.regionOnline(hri, server.getServerName());
        // Now try splitting and it should work.
        split(hri, server, regionCount);
        // Get daughters
        checkAndGetDaughters(tableName);
    // OK, so split happened after we cleared the blocking node.
    } finally {
        admin.setBalancerRunning(true, false);
        cluster.getMaster().setCatalogJanitorEnabled(true);
        t.close();
    }
}
Also used : HRegionInfo(org.apache.hadoop.hbase.HRegionInfo) TableName(org.apache.hadoop.hbase.TableName) Table(org.apache.hadoop.hbase.client.Table) RegionStates(org.apache.hadoop.hbase.master.RegionStates) Test(org.junit.Test)

Example 10 with RegionStates

use of org.apache.hadoop.hbase.master.RegionStates in project hbase by apache.

the class TestRegionMergeTransactionOnCluster method testWholesomeMerge.

@Test
public void testWholesomeMerge() throws Exception {
    LOG.info("Starting " + name.getMethodName());
    final TableName tableName = TableName.valueOf(name.getMethodName());
    // Create table and load data.
    Table table = createTableAndLoadData(MASTER, tableName);
    // Merge 1st and 2nd region
    mergeRegionsAndVerifyRegionNum(MASTER, tableName, 0, 1, INITIAL_REGION_NUM - 1);
    // Merge 2nd and 3th region
    PairOfSameType<HRegionInfo> mergedRegions = mergeRegionsAndVerifyRegionNum(MASTER, tableName, 1, 2, INITIAL_REGION_NUM - 2);
    verifyRowCount(table, ROWSIZE);
    // Randomly choose one of the two merged regions
    HRegionInfo hri = RandomUtils.nextBoolean() ? mergedRegions.getFirst() : mergedRegions.getSecond();
    MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
    AssignmentManager am = cluster.getMaster().getAssignmentManager();
    RegionStates regionStates = am.getRegionStates();
    long start = EnvironmentEdgeManager.currentTime();
    while (!regionStates.isRegionInState(hri, State.MERGED)) {
        assertFalse("Timed out in waiting one merged region to be in state MERGED", EnvironmentEdgeManager.currentTime() - start > 60000);
        Thread.sleep(500);
    }
    // We should not be able to assign it again
    am.assign(hri, true);
    assertFalse("Merged region can't be assigned", regionStates.isRegionInTransition(hri));
    assertTrue(regionStates.isRegionInState(hri, State.MERGED));
    // We should not be able to unassign it either
    am.unassign(hri, null);
    assertFalse("Merged region can't be unassigned", regionStates.isRegionInTransition(hri));
    assertTrue(regionStates.isRegionInState(hri, State.MERGED));
    table.close();
}
Also used : HRegionInfo(org.apache.hadoop.hbase.HRegionInfo) TableName(org.apache.hadoop.hbase.TableName) Table(org.apache.hadoop.hbase.client.Table) RegionStates(org.apache.hadoop.hbase.master.RegionStates) AssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager) MiniHBaseCluster(org.apache.hadoop.hbase.MiniHBaseCluster) Test(org.junit.Test)

Aggregations

RegionStates (org.apache.hadoop.hbase.master.RegionStates)19 HRegionInfo (org.apache.hadoop.hbase.HRegionInfo)13 TableName (org.apache.hadoop.hbase.TableName)8 Test (org.junit.Test)8 IOException (java.io.IOException)7 Table (org.apache.hadoop.hbase.client.Table)7 ServerName (org.apache.hadoop.hbase.ServerName)6 AssignmentManager (org.apache.hadoop.hbase.master.AssignmentManager)6 InterruptedIOException (java.io.InterruptedIOException)5 HMaster (org.apache.hadoop.hbase.master.HMaster)4 ArrayList (java.util.ArrayList)3 DoNotRetryIOException (org.apache.hadoop.hbase.DoNotRetryIOException)3 MiniHBaseCluster (org.apache.hadoop.hbase.MiniHBaseCluster)3 RegionState (org.apache.hadoop.hbase.master.RegionState)3 HRegionLocation (org.apache.hadoop.hbase.HRegionLocation)2 UnknownRegionException (org.apache.hadoop.hbase.UnknownRegionException)2 Result (org.apache.hadoop.hbase.client.Result)2 MergeRegionException (org.apache.hadoop.hbase.exceptions.MergeRegionException)2 HashMap (java.util.HashMap)1 List (java.util.List)1