@Override public void startRegionServer(String hostname, int port) throws IOException { this.startRegionServer(); }
/** * Make sure that at least the specified number of region servers * are running * @param num minimum number of region servers that should be running * @return true if we started some servers * @throws IOException */ public boolean ensureSomeRegionServersAvailable(final int num) throws IOException { boolean startedServer = false; MiniHBaseCluster hbaseCluster = getMiniHBaseCluster(); for (int i=hbaseCluster.getLiveRegionServerThreads().size(); i<num; ++i) { LOG.info("Started new server=" + hbaseCluster.startRegionServer()); startedServer = true; } return startedServer; }
@Test public void test() throws IOException, InterruptedException { UTIL2.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID, SyncReplicationState.STANDBY); UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID, SyncReplicationState.ACTIVE); ARRIVE = new CountDownLatch(1); RESUME = new CountDownLatch(1); HALT = true; Thread t = new Thread(() -> { try { UTIL1.getAdmin().transitReplicationPeerSyncReplicationState(PEER_ID, SyncReplicationState.DOWNGRADE_ACTIVE); } catch (IOException e) { throw new UncheckedIOException(e); } }); t.start(); ARRIVE.await(); UTIL1.getMiniHBaseCluster().startRegionServer(); RESUME.countDown(); t.join(); assertEquals(SyncReplicationState.DOWNGRADE_ACTIVE, UTIL1.getAdmin().getReplicationPeerSyncReplicationState(PEER_ID)); } }
/** * Starts a region server thread and waits until its processed by master. Throws an exception * when it can't start a region server or when the region server is not processed by master * within the timeout. * * @return New RegionServerThread */ public JVMClusterUtil.RegionServerThread startRegionServerAndWait(long timeout) throws IOException { JVMClusterUtil.RegionServerThread t = startRegionServer(); ServerName rsServerName = t.getRegionServer().getServerName(); long start = System.currentTimeMillis(); ClusterStatus clusterStatus = getClusterStatus(); while ((System.currentTimeMillis() - start) < timeout) { if (clusterStatus != null && clusterStatus.getServers().contains(rsServerName)) { return t; } Threads.sleep(100); } if (t.getRegionServer().isOnline()) { throw new IOException("RS: " + rsServerName + " online, but not processed by master"); } else { throw new IOException("RS: " + rsServerName + " is offline"); } }
@Test public void testChangingNumberOfPeerRegionServers() throws IOException, InterruptedException { LOG.info("testSimplePutDelete"); MiniHBaseCluster peerCluster = utility2.getMiniHBaseCluster(); int numRS = peerCluster.getRegionServerThreads().size(); doPutTest(Bytes.toBytes(1)); int rsToStop = peerCluster.getServerWithMeta() == 0 ? 1 : 0; peerCluster.stopRegionServer(rsToStop); peerCluster.waitOnRegionServer(rsToStop); // Sanity check assertEquals(numRS - 1, peerCluster.getRegionServerThreads().size()); doPutTest(Bytes.toBytes(2)); peerCluster.startRegionServer(); // Sanity check assertEquals(numRS, peerCluster.getRegionServerThreads().size()); doPutTest(Bytes.toBytes(3)); }
@Test public void testNewStartedRegionServerVersion() throws Exception { UTIL.startMiniCluster(1); // Start 3 new region server Thread t = new Thread(() -> { for (int i = 0; i < 3; i++) { try { JVMClusterUtil.RegionServerThread newRS = UTIL.getMiniHBaseCluster().startRegionServer(); newRS.waitForServerOnline(); } catch (IOException e) { LOG.error("Failed to start a new RS", e); } } }); t.start(); HMaster master = UTIL.getMiniHBaseCluster().getMaster(); while (t.isAlive()) { List<ServerName> serverNames = master.getServerManager().getOnlineServersList(); for (ServerName serverName : serverNames) { assertNotEquals(0, master.getServerManager().getVersionNumber(serverName)); } Thread.sleep(100); } }
/** * Make sure that at least the specified number of region servers * are running. We don't count the ones that are currently stopping or are * stopped. * @param num minimum number of region servers that should be running * @return true if we started some servers * @throws IOException */ public boolean ensureSomeNonStoppedRegionServersAvailable(final int num) throws IOException { boolean startedServer = ensureSomeRegionServersAvailable(num); int nonStoppedServers = 0; for (JVMClusterUtil.RegionServerThread rst : getMiniHBaseCluster().getRegionServerThreads()) { HRegionServer hrs = rst.getRegionServer(); if (hrs.isStopping() || hrs.isStopped()) { LOG.info("A region server is stopped or stopping:"+hrs); } else { nonStoppedServers++; } } for (int i=nonStoppedServers; i<num; ++i) { LOG.info("Started new server=" + getMiniHBaseCluster().startRegionServer()); startedServer = true; } return startedServer; }
@Test public void testAddNewServer() throws Exception { List<FakeServerProcedure> testProcedures = new ArrayList<>(); for (int i = 0; i < 4; i++) { testProcedures.add(new FakeServerProcedure( TEST_UTIL.getHBaseCluster().getServerHoldingMeta())); } ServerName server = splitWALManager.acquireSplitWALWorker(testProcedures.get(0)); Assert.assertNotNull(server); Assert.assertNotNull(splitWALManager.acquireSplitWALWorker(testProcedures.get(1))); Assert.assertNotNull(splitWALManager.acquireSplitWALWorker(testProcedures.get(2))); Exception e = null; try { splitWALManager.acquireSplitWALWorker(testProcedures.get(3)); } catch (ProcedureSuspendedException suspendException) { e = suspendException; } Assert.assertNotNull(e); Assert.assertTrue(e instanceof ProcedureSuspendedException); JVMClusterUtil.RegionServerThread newServer = TEST_UTIL.getHBaseCluster().startRegionServer(); newServer.waitForServerOnline(); Assert.assertNotNull(splitWALManager.acquireSplitWALWorker(testProcedures.get(3))); }
public void testLogSplittingAfterMasterRecoveryDueToZKExpiry() throws Exception { MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster(); cluster.startRegionServer(); TableName tableName = TableName.valueOf(name.getMethodName()); byte[] family = Bytes.toBytes("col");
UTIL.getMiniHBaseCluster().killRegionServer( UTIL.getMiniHBaseCluster().getRegionServer(0).getServerName()); UTIL.getMiniHBaseCluster().startRegionServer(); UTIL.waitUntilNoRegionsInTransition(); Scan scan = new Scan();
public void testRegionAssignmentAfterMasterRecoveryDueToZKExpiry() throws Exception { MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster(); cluster.startRegionServer(); cluster.waitForActiveAndReadyMaster(10000); HMaster m = cluster.getMaster();
@Test public void testPreWALRestoreSkip() throws Exception { LOG.info(TestRegionObserverInterface.class.getName() + "." + name.getMethodName()); TableName tableName = TableName.valueOf(SimpleRegionObserver.TABLE_SKIPPED); Table table = util.createTable(tableName, new byte[][] { A, B, C }); try (RegionLocator locator = util.getConnection().getRegionLocator(tableName)) { JVMClusterUtil.RegionServerThread rs1 = cluster.startRegionServer(); ServerName sn2 = rs1.getRegionServer().getServerName(); String regEN = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName(); util.getAdmin().move(regEN.getBytes(), sn2.getServerName().getBytes()); while (!sn2.equals(locator.getAllRegionLocations().get(0).getServerName())) { Thread.sleep(100); } Put put = new Put(ROW); put.addColumn(A, A, A); put.addColumn(B, B, B); put.addColumn(C, C, C); table.put(put); cluster.killRegionServer(rs1.getRegionServer().getServerName()); Threads.sleep(20000); // just to be sure that the kill has fully started. util.waitUntilAllRegionsAssigned(tableName); } verifyMethodResult(SimpleRegionObserver.class, new String[] { "getCtPreWALRestore", "getCtPostWALRestore", }, tableName, new Integer[] { 0, 0 }); util.deleteTable(tableName); table.close(); }
UTIL.getMiniHBaseCluster().killRegionServer( UTIL.getMiniHBaseCluster().getRegionServer(0).getServerName()); UTIL.getMiniHBaseCluster().startRegionServer(); UTIL.waitUntilNoRegionsInTransition(); Scan scan = new Scan();
@Test public void testVisibilityLabelsOnWALReplay() throws Exception { final TableName tableName = TableName.valueOf(TEST_NAME.getMethodName()); try (Table table = createTableAndWriteDataWithLabels(tableName, "(" + SECRET + "|" + CONFIDENTIAL + ")", PRIVATE)) { List<RegionServerThread> regionServerThreads = TEST_UTIL.getHBaseCluster() .getRegionServerThreads(); for (RegionServerThread rsThread : regionServerThreads) { rsThread.getRegionServer().abort("Aborting "); } // Start one new RS RegionServerThread rs = TEST_UTIL.getHBaseCluster().startRegionServer(); waitForLabelsRegionAvailability(rs.getRegionServer()); Scan s = new Scan(); s.setAuthorizations(new Authorizations(SECRET)); ResultScanner scanner = table.getScanner(s); Result[] next = scanner.next(3); assertTrue(next.length == 1); } } }
@Test public void testVisibilityLabelsOnRSRestart() throws Exception { final TableName tableName = TableName.valueOf(TEST_NAME.getMethodName()); List<RegionServerThread> regionServerThreads = TEST_UTIL.getHBaseCluster() .getRegionServerThreads(); for (RegionServerThread rsThread : regionServerThreads) { rsThread.getRegionServer().abort("Aborting "); } // Start one new RS RegionServerThread rs = TEST_UTIL.getHBaseCluster().startRegionServer(); waitForLabelsRegionAvailability(rs.getRegionServer()); try (Table table = createTableAndWriteDataWithLabels(tableName, "(" + SECRET + "|" + CONFIDENTIAL + ")", PRIVATE)) { Scan s = new Scan(); s.setAuthorizations(new Authorizations(SECRET)); ResultScanner scanner = table.getScanner(s); Result[] next = scanner.next(3); assertTrue(next.length == 1); } }
try (RegionLocator locator = util.getConnection().getRegionLocator(tableName)) { JVMClusterUtil.RegionServerThread rs1 = cluster.startRegionServer(); ServerName sn2 = rs1.getRegionServer().getServerName(); String regEN = locator.getAllRegionLocations().get(0).getRegionInfo().getEncodedName();
LOG.info("Restoring servers: "+missing); for(int i=0; i<missing; i++) { ((MiniHBaseCluster)cluster).startRegionServer();
private void stopMasterAndValidateReplicaCount(final int originalReplicaCount, final int newReplicaCount) throws Exception { ServerName sn = TEST_UTIL.getHBaseClusterInterface().getClusterMetrics().getMasterName(); TEST_UTIL.getHBaseClusterInterface().stopMaster(sn); TEST_UTIL.getHBaseClusterInterface().waitForMasterToStop(sn, 60000); List<String> metaZnodes = TEST_UTIL.getZooKeeperWatcher().getMetaReplicaNodes(); assert(metaZnodes.size() == originalReplicaCount); //we should have what was configured before TEST_UTIL.getHBaseClusterInterface().getConf().setInt(HConstants.META_REPLICAS_NUM, newReplicaCount); if (TEST_UTIL.getHBaseCluster().countServedRegions() < newReplicaCount) { TEST_UTIL.getHBaseCluster().startRegionServer(); } TEST_UTIL.getHBaseClusterInterface().startMaster(sn.getHostname(), 0); TEST_UTIL.getHBaseClusterInterface().waitForActiveAndReadyMaster(); TEST_UTIL.waitFor(10000, predicateMetaHasReplicas(newReplicaCount)); // also check if hbck returns without errors TEST_UTIL.getConfiguration().setInt(HConstants.META_REPLICAS_NUM, newReplicaCount); HBaseFsck hbck = HbckTestingUtil.doFsck(TEST_UTIL.getConfiguration(), false); HbckTestingUtil.assertNoErrors(hbck); }
HTU.getMiniHBaseCluster().startRegionServer();
HTU.getMiniHBaseCluster().startRegionServer();