Search in sources :

Example 41 with SingleProcessHBaseCluster

use of org.apache.hadoop.hbase.SingleProcessHBaseCluster in project hbase by apache.

the class TestRSGroupsBase method tearDownAfterMethod.

public void tearDownAfterMethod() throws Exception {
    deleteTableIfNecessary();
    deleteNamespaceIfNecessary();
    deleteGroups();
    for (ServerName sn : ADMIN.listDecommissionedRegionServers()) {
        ADMIN.recommissionRegionServer(sn, null);
    }
    assertTrue(ADMIN.listDecommissionedRegionServers().isEmpty());
    int missing = NUM_SLAVES_BASE - getNumServers();
    LOG.info("Restoring servers: " + missing);
    for (int i = 0; i < missing; i++) {
        ((SingleProcessHBaseCluster) CLUSTER).startRegionServer();
    }
    ADMIN.addRSGroup("master");
    ServerName masterServerName = ((SingleProcessHBaseCluster) CLUSTER).getMaster().getServerName();
    try {
        ADMIN.moveServersToRSGroup(Sets.newHashSet(masterServerName.getAddress()), "master");
    } catch (Exception ex) {
        LOG.warn("Got this on setup, FYI", ex);
    }
    assertTrue(OBSERVER.preMoveServersCalled);
    TEST_UTIL.waitFor(WAIT_TIMEOUT, new Waiter.Predicate<Exception>() {

        @Override
        public boolean evaluate() throws Exception {
            LOG.info("Waiting for cleanup to finish " + ADMIN.listRSGroups());
            return ADMIN.getRSGroup(RSGroupInfo.DEFAULT_GROUP).getServers().size() == NUM_SLAVES_BASE;
        }
    });
}
Also used : SingleProcessHBaseCluster(org.apache.hadoop.hbase.SingleProcessHBaseCluster) ServerName(org.apache.hadoop.hbase.ServerName) Waiter(org.apache.hadoop.hbase.Waiter) IOException(java.io.IOException)

Example 42 with SingleProcessHBaseCluster

use of org.apache.hadoop.hbase.SingleProcessHBaseCluster in project hbase by apache.

the class TestMaster method testMasterOpsWhileSplitting.

@Test
@SuppressWarnings("deprecation")
public void testMasterOpsWhileSplitting() throws Exception {
    SingleProcessHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
    HMaster m = cluster.getMaster();
    try (Table ht = TEST_UTIL.createTable(TABLENAME, FAMILYNAME)) {
        assertTrue(m.getTableStateManager().isTableState(TABLENAME, TableState.State.ENABLED));
        TEST_UTIL.loadTable(ht, FAMILYNAME, false);
    }
    List<Pair<RegionInfo, ServerName>> tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getConnection(), TABLENAME);
    LOG.info("Regions after load: " + Joiner.on(',').join(tableRegions));
    assertEquals(1, tableRegions.size());
    assertArrayEquals(HConstants.EMPTY_START_ROW, tableRegions.get(0).getFirst().getStartKey());
    assertArrayEquals(HConstants.EMPTY_END_ROW, tableRegions.get(0).getFirst().getEndKey());
    // Now trigger a split and stop when the split is in progress
    LOG.info("Splitting table");
    TEST_UTIL.getAdmin().split(TABLENAME);
    LOG.info("Making sure we can call getTableRegions while opening");
    while (tableRegions.size() < 3) {
        tableRegions = MetaTableAccessor.getTableRegionsAndLocations(m.getConnection(), TABLENAME, false);
        Thread.sleep(100);
    }
    LOG.info("Regions: " + Joiner.on(',').join(tableRegions));
    // We have three regions because one is split-in-progress
    assertEquals(3, tableRegions.size());
    LOG.info("Making sure we can call getTableRegionClosest while opening");
    Pair<RegionInfo, ServerName> pair = getTableRegionForRow(m, TABLENAME, Bytes.toBytes("cde"));
    LOG.info("Result is: " + pair);
    Pair<RegionInfo, ServerName> tableRegionFromName = MetaTableAccessor.getRegion(m.getConnection(), pair.getFirst().getRegionName());
    assertTrue(RegionInfo.COMPARATOR.compare(tableRegionFromName.getFirst(), pair.getFirst()) == 0);
}
Also used : SingleProcessHBaseCluster(org.apache.hadoop.hbase.SingleProcessHBaseCluster) Table(org.apache.hadoop.hbase.client.Table) ServerName(org.apache.hadoop.hbase.ServerName) RegionInfo(org.apache.hadoop.hbase.client.RegionInfo) Pair(org.apache.hadoop.hbase.util.Pair) Test(org.junit.Test)

Example 43 with SingleProcessHBaseCluster

use of org.apache.hadoop.hbase.SingleProcessHBaseCluster in project hbase by apache.

the class TestGetLastFlushedSequenceId method test.

@Test
public void test() throws IOException, InterruptedException {
    testUtil.getAdmin().createNamespace(NamespaceDescriptor.create(tableName.getNamespaceAsString()).build());
    Table table = testUtil.createTable(tableName, families);
    table.put(new Put(Bytes.toBytes("k")).addColumn(family, Bytes.toBytes("q"), Bytes.toBytes("v")));
    SingleProcessHBaseCluster cluster = testUtil.getMiniHBaseCluster();
    List<JVMClusterUtil.RegionServerThread> rsts = cluster.getRegionServerThreads();
    Region region = null;
    for (int i = 0; i < cluster.getRegionServerThreads().size(); i++) {
        HRegionServer hrs = rsts.get(i).getRegionServer();
        for (Region r : hrs.getRegions(tableName)) {
            region = r;
            break;
        }
    }
    assertNotNull(region);
    Thread.sleep(2000);
    RegionStoreSequenceIds ids = testUtil.getHBaseCluster().getMaster().getServerManager().getLastFlushedSequenceId(region.getRegionInfo().getEncodedNameAsBytes());
    assertEquals(HConstants.NO_SEQNUM, ids.getLastFlushedSequenceId());
    // This will be the sequenceid just before that of the earliest edit in memstore.
    long storeSequenceId = ids.getStoreSequenceId(0).getSequenceId();
    assertTrue(storeSequenceId > 0);
    testUtil.getAdmin().flush(tableName);
    Thread.sleep(2000);
    ids = testUtil.getHBaseCluster().getMaster().getServerManager().getLastFlushedSequenceId(region.getRegionInfo().getEncodedNameAsBytes());
    assertTrue(ids.getLastFlushedSequenceId() + " > " + storeSequenceId, ids.getLastFlushedSequenceId() > storeSequenceId);
    assertEquals(ids.getLastFlushedSequenceId(), ids.getStoreSequenceId(0).getSequenceId());
    table.close();
}
Also used : SingleProcessHBaseCluster(org.apache.hadoop.hbase.SingleProcessHBaseCluster) Table(org.apache.hadoop.hbase.client.Table) Region(org.apache.hadoop.hbase.regionserver.Region) RegionStoreSequenceIds(org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionStoreSequenceIds) Put(org.apache.hadoop.hbase.client.Put) HRegionServer(org.apache.hadoop.hbase.regionserver.HRegionServer) Test(org.junit.Test)

Example 44 with SingleProcessHBaseCluster

use of org.apache.hadoop.hbase.SingleProcessHBaseCluster in project hbase by apache.

the class TestMultiSlaveReplication method testMultiSlaveReplication.

@Test
public void testMultiSlaveReplication() throws Exception {
    LOG.info("testCyclicReplication");
    SingleProcessHBaseCluster master = utility1.startMiniCluster();
    utility2.startMiniCluster();
    utility3.startMiniCluster();
    try (Connection conn = ConnectionFactory.createConnection(conf1);
        Admin admin1 = conn.getAdmin()) {
        utility1.getAdmin().createTable(table);
        utility2.getAdmin().createTable(table);
        utility3.getAdmin().createTable(table);
        Table htable1 = utility1.getConnection().getTable(tableName);
        Table htable2 = utility2.getConnection().getTable(tableName);
        Table htable3 = utility3.getConnection().getTable(tableName);
        ReplicationPeerConfigBuilder rpcBuilder = ReplicationPeerConfig.newBuilder().setClusterKey(utility2.getClusterKey());
        admin1.addReplicationPeer("1", rpcBuilder.build());
        // put "row" and wait 'til it got around, then delete
        putAndWait(row, famName, htable1, htable2);
        deleteAndWait(row, htable1, htable2);
        // check it wasn't replication to cluster 3
        checkRow(row, 0, htable3);
        putAndWait(row2, famName, htable1, htable2);
        // now roll the region server's logs
        rollWALAndWait(utility1, htable1.getName(), row2);
        // after the log was rolled put a new row
        putAndWait(row3, famName, htable1, htable2);
        rpcBuilder.setClusterKey(utility3.getClusterKey());
        admin1.addReplicationPeer("2", rpcBuilder.build());
        // put a row, check it was replicated to all clusters
        putAndWait(row1, famName, htable1, htable2, htable3);
        // delete and verify
        deleteAndWait(row1, htable1, htable2, htable3);
        // make sure row2 did not get replicated after
        // cluster 3 was added
        checkRow(row2, 0, htable3);
        // row3 will get replicated, because it was in the
        // latest log
        checkRow(row3, 1, htable3);
        Put p = new Put(row);
        p.addColumn(famName, row, row);
        htable1.put(p);
        // now roll the logs again
        rollWALAndWait(utility1, htable1.getName(), row);
        // cleanup "row2", also conveniently use this to wait replication
        // to finish
        deleteAndWait(row2, htable1, htable2, htable3);
        // Even if the log was rolled in the middle of the replication
        // "row" is still replication.
        checkRow(row, 1, htable2);
        // Replication thread of cluster 2 may be sleeping, and since row2 is not there in it,
        // we should wait before checking.
        checkWithWait(row, 1, htable3);
        // cleanup the rest
        deleteAndWait(row, htable1, htable2, htable3);
        deleteAndWait(row3, htable1, htable2, htable3);
        utility3.shutdownMiniCluster();
        utility2.shutdownMiniCluster();
        utility1.shutdownMiniCluster();
    }
}
Also used : SingleProcessHBaseCluster(org.apache.hadoop.hbase.SingleProcessHBaseCluster) Table(org.apache.hadoop.hbase.client.Table) Connection(org.apache.hadoop.hbase.client.Connection) Admin(org.apache.hadoop.hbase.client.Admin) Put(org.apache.hadoop.hbase.client.Put) Test(org.junit.Test)

Example 45 with SingleProcessHBaseCluster

use of org.apache.hadoop.hbase.SingleProcessHBaseCluster in project hbase by apache.

the class TestMasterReplication method rollWALAndWait.

private void rollWALAndWait(final HBaseTestingUtil utility, final TableName table, final byte[] row) throws IOException {
    final Admin admin = utility.getAdmin();
    final SingleProcessHBaseCluster cluster = utility.getMiniHBaseCluster();
    // find the region that corresponds to the given row.
    HRegion region = null;
    for (HRegion candidate : cluster.getRegions(table)) {
        if (HRegion.rowIsInRange(candidate.getRegionInfo(), row)) {
            region = candidate;
            break;
        }
    }
    assertNotNull("Couldn't find the region for row '" + Arrays.toString(row) + "'", region);
    final CountDownLatch latch = new CountDownLatch(1);
    // listen for successful log rolls
    final WALActionsListener listener = new WALActionsListener() {

        @Override
        public void postLogRoll(final Path oldPath, final Path newPath) throws IOException {
            latch.countDown();
        }
    };
    region.getWAL().registerWALActionsListener(listener);
    // request a roll
    admin.rollWALWriter(cluster.getServerHoldingRegion(region.getTableDescriptor().getTableName(), region.getRegionInfo().getRegionName()));
    // wait
    try {
        latch.await();
    } catch (InterruptedException exception) {
        LOG.warn("Interrupted while waiting for the wal of '" + region + "' to roll. If later " + "replication tests fail, it's probably because we should still be waiting.");
        Thread.currentThread().interrupt();
    }
    region.getWAL().unregisterWALActionsListener(listener);
}
Also used : SingleProcessHBaseCluster(org.apache.hadoop.hbase.SingleProcessHBaseCluster) Path(org.apache.hadoop.fs.Path) HRegion(org.apache.hadoop.hbase.regionserver.HRegion) WALActionsListener(org.apache.hadoop.hbase.regionserver.wal.WALActionsListener) Admin(org.apache.hadoop.hbase.client.Admin) CountDownLatch(java.util.concurrent.CountDownLatch)

Aggregations

SingleProcessHBaseCluster (org.apache.hadoop.hbase.SingleProcessHBaseCluster)85 Test (org.junit.Test)69 HRegionServer (org.apache.hadoop.hbase.regionserver.HRegionServer)31 TableName (org.apache.hadoop.hbase.TableName)26 Admin (org.apache.hadoop.hbase.client.Admin)24 Table (org.apache.hadoop.hbase.client.Table)22 HRegion (org.apache.hadoop.hbase.regionserver.HRegion)22 HMaster (org.apache.hadoop.hbase.master.HMaster)21 ServerName (org.apache.hadoop.hbase.ServerName)18 TableDescriptor (org.apache.hadoop.hbase.client.TableDescriptor)18 HBaseTestingUtil (org.apache.hadoop.hbase.HBaseTestingUtil)14 MasterCoprocessorHost (org.apache.hadoop.hbase.master.MasterCoprocessorHost)13 IOException (java.io.IOException)12 Configuration (org.apache.hadoop.conf.Configuration)12 Put (org.apache.hadoop.hbase.client.Put)12 RegionInfo (org.apache.hadoop.hbase.client.RegionInfo)12 TableDescriptorBuilder (org.apache.hadoop.hbase.client.TableDescriptorBuilder)10 File (java.io.File)9 Path (org.apache.hadoop.fs.Path)9 RegionMoverBuilder (org.apache.hadoop.hbase.util.RegionMover.RegionMoverBuilder)9