@VisibleForTesting void setRegionServer(final HRegionServer hrs) { this.rpcServices = hrs.getRSRpcServices(); } }
/** * @param sn * @return Admin interface for the remote regionserver named <code>sn</code> * @throws IOException * @throws RetriesExhaustedException wrapping a ConnectException if failed */ public AdminService.BlockingInterface getRsAdmin(final ServerName sn) throws IOException { AdminService.BlockingInterface admin = this.rsAdmins.get(sn); if (admin == null) { LOG.debug("New admin connection to " + sn.toString()); if (sn.equals(master.getServerName()) && master instanceof HRegionServer) { // A master is also a region server now, see HBASE-10569 for details admin = ((HRegionServer)master).getRSRpcServices(); } else { admin = this.connection.getAdmin(sn); } this.rsAdmins.put(sn, admin); } return admin; }
private void printOutRegions(final HRegionServer hrs, final String prefix) throws IOException { List<RegionInfo> regions = ProtobufUtil.getOnlineRegions(hrs.getRSRpcServices()); for (RegionInfo region: regions) { LOG.info(prefix + region.getRegionNameAsString()); } }
private int getScannersCount() { return TEST_UTIL.getHBaseCluster().getRegionServerThreads().stream() .map(t -> t.getRegionServer()).mapToInt(rs -> rs.getRSRpcServices().getScannersCount()) .sum(); }
@Override public ClientService.BlockingInterface getClientProtocol(ServerName serverName) throws IOException { return getRegionServer(getRegionServerIndex(serverName)).getRSRpcServices(); } }
@Override public AdminService.BlockingInterface getAdminProtocol(ServerName serverName) throws IOException { return getRegionServer(getRegionServerIndex(serverName)).getRSRpcServices(); }
private NavigableSet<String> getDoubleAssignedRegions( MiniHBaseCluster cluster) throws IOException { NavigableSet<String> online = new TreeSet<>(); NavigableSet<String> doubled = new TreeSet<>(); for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) { for (RegionInfo region : ProtobufUtil.getOnlineRegions( rst.getRegionServer().getRSRpcServices())) { if(!online.add(region.getRegionNameAsString())) { doubled.add(region.getRegionNameAsString()); } } } return doubled; }
@Test public void testScanAll() throws Exception { List<Result> results = doScan(createScan()); // make sure all scanners are closed at RS side TEST_UTIL.getHBaseCluster().getRegionServerThreads().stream().map(t -> t.getRegionServer()) .forEach( rs -> assertEquals( "The scanner count of " + rs.getServerName() + " is " + rs.getRSRpcServices().getScannersCount(), 0, rs.getRSRpcServices().getScannersCount())); assertEquals(COUNT, results.size()); IntStream.range(0, COUNT).forEach(i -> { Result result = results.get(i); assertEquals(String.format("%03d", i), Bytes.toString(result.getRow())); assertEquals(i, Bytes.toInt(result.getValue(FAMILY, CQ1))); }); }
private void assertGetRpc(HRegionInfo info, int value, boolean expect) throws IOException, org.apache.hbase.thirdparty.com.google.protobuf.ServiceException { byte[] row = Bytes.toBytes(String.valueOf(value)); Get get = new Get(row); ClientProtos.GetRequest getReq = RequestConverter.buildGetRequest(info.getRegionName(), get); ClientProtos.GetResponse getResp = getRS().getRSRpcServices().get(null, getReq); Result result = ProtobufUtil.toResult(getResp.getResult()); if (expect) { Assert.assertArrayEquals(row, result.getValue(f, null)); } else { result.isEmpty(); } }
@Test public void testShouldUnassignTheRegion() throws Exception { final TableName tableName = TableName.valueOf(name.getMethodName()); createTableWithDefaultConf(tableName); RegionInfo info = null; HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(tableName); List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices()); for (RegionInfo regionInfo : onlineRegions) { if (!regionInfo.getTable().isSystemTable()) { info = regionInfo; admin.unassign(regionInfo.getRegionName(), true); } } boolean isInList = ProtobufUtil.getOnlineRegions( rs.getRSRpcServices()).contains(info); long timeout = System.currentTimeMillis() + 10000; while ((System.currentTimeMillis() < timeout) && (isInList)) { Thread.sleep(100); isInList = ProtobufUtil.getOnlineRegions( rs.getRSRpcServices()).contains(info); } assertFalse("The region should not be present in online regions list.", isInList); }
@Test public void testCloseRegionThatFetchesTheHRIFromMeta() throws Exception { final TableName tableName = TableName.valueOf(name.getMethodName()); createTableWithDefaultConf(tableName); RegionInfo info = null; HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(tableName); List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices()); for (RegionInfo regionInfo : onlineRegions) { if (!regionInfo.isMetaRegion()) { if (regionInfo.getRegionNameAsString().contains("TestHBACloseRegion2")) { info = regionInfo; admin.unassign(regionInfo.getRegionName(), true); } } } boolean isInList = ProtobufUtil.getOnlineRegions( rs.getRSRpcServices()).contains(info); long timeout = System.currentTimeMillis() + 10000; while ((System.currentTimeMillis() < timeout) && (isInList)) { Thread.sleep(100); isInList = ProtobufUtil.getOnlineRegions( rs.getRSRpcServices()).contains(info); } assertFalse("The region should not be present in online regions list.", isInList); }
@Test public void testCloseRegionIfInvalidRegionNameIsPassed() throws Exception { final String name = this.name.getMethodName(); byte[] tableName = Bytes.toBytes(name); createTableWithDefaultConf(tableName); RegionInfo info = null; HRegionServer rs = TEST_UTIL.getRSForFirstRegionInTable(TableName.valueOf(tableName)); List<RegionInfo> onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices()); for (RegionInfo regionInfo : onlineRegions) { if (!regionInfo.isMetaRegion()) { if (regionInfo.getRegionNameAsString().contains(name)) { info = regionInfo; try { admin.unassign(Bytes.toBytes("sample"), true); } catch (UnknownRegionException nsre) { // expected, ignore it } } } } onlineRegions = ProtobufUtil.getOnlineRegions(rs.getRSRpcServices()); assertTrue("The region should be present in online regions list.", onlineRegions.contains(info)); }
private void flushAllRegions(int rsId) throws ServiceException, org.apache.hbase.thirdparty.com.google.protobuf.ServiceException, IOException { HRegionServer hrs = getRegionServer(rsId); for (byte[] regionName : getRegionsByServer(rsId)) { FlushRegionRequest request = RequestConverter.buildFlushRegionRequest(regionName); hrs.getRSRpcServices().flushRegion(null, request); } }
/** * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { Configuration conf = TEST_UTIL.getConfiguration(); conf.setStrings(HConstants.REGION_SERVER_IMPL, RegionServerWithFakeRpcServices.class.getName()); TEST_UTIL.startMiniCluster(1); TEST_UTIL.getHBaseCluster().waitForActiveAndReadyMaster(); TEST_UTIL.waitUntilAllRegionsAssigned(TABLE_NAME.META_TABLE_NAME); badRS = TEST_UTIL.getHBaseCluster().getRegionServer(0); assertTrue(badRS.getRSRpcServices() instanceof FakeRSRpcServices); HTableDescriptor table = new HTableDescriptor(TABLE_NAME); HColumnDescriptor fam = new HColumnDescriptor(FAMILY); fam.setMaxVersions(2); table.addFamily(fam); TEST_UTIL.createTable(table, null); }
private void verifyMethodResult(Class<?> coprocessor, String methodName[], TableName tableName, Object value[]) throws IOException { try { for (JVMClusterUtil.RegionServerThread t : cluster.getRegionServerThreads()) { if (!t.isAlive() || t.getRegionServer().isAborted() || t.getRegionServer().isStopping()) { continue; } for (RegionInfo r : ProtobufUtil .getOnlineRegions(t.getRegionServer().getRSRpcServices())) { if (!r.getTable().equals(tableName)) { continue; } RegionCoprocessorHost cph = t.getRegionServer().getOnlineRegion(r.getRegionName()).getCoprocessorHost(); Coprocessor cp = cph.findCoprocessor(coprocessor.getName()); assertNotNull(cp); for (int i = 0; i < methodName.length; ++i) { Method m = coprocessor.getMethod(methodName[i]); Object o = m.invoke(cp); assertTrue("Result of " + coprocessor.getName() + "." + methodName[i] + " is expected to be " + value[i].toString() + ", while we get " + o.toString(), o.equals(value[i])); } } } } catch (Exception e) { throw new IOException(e.toString()); } }
public static NavigableSet<String> getAllOnlineRegions(MiniHBaseCluster cluster) throws IOException { NavigableSet<String> online = new TreeSet<>(); for (RegionServerThread rst : cluster.getLiveRegionServerThreads()) { try { for (RegionInfo region : ProtobufUtil.getOnlineRegions(rst.getRegionServer().getRSRpcServices())) { online.add(region.getRegionNameAsString()); } } catch (RegionServerStoppedException e) { // That's fine. } } for (MasterThread mt : cluster.getLiveMasterThreads()) { try { for (RegionInfo region : ProtobufUtil.getOnlineRegions(mt.getMaster().getRSRpcServices())) { online.add(region.getRegionNameAsString()); } } catch (RegionServerStoppedException e) { // That's fine. } catch (ServerNotRunningYetException e) { // That's fine. } } return online; }
ProtobufUtil.openRegion(null, hrs.getRSRpcServices(), hrs.getServerName(), HRegionInfo.FIRST_META_REGIONINFO); while (true) {
private void closeRegion(HRegionInfo hri) throws Exception { AdminProtos.CloseRegionRequest crr = ProtobufUtil.buildCloseRegionRequest( getRS().getServerName(), hri.getRegionName()); AdminProtos.CloseRegionResponse responseClose = getRS() .getRSRpcServices().closeRegion(null, crr); Assert.assertTrue(responseClose.getClosed()); checkRegionIsClosed(hri.getEncodedName()); }
private void openRegion(HRegionInfo hri) throws Exception { try { if (isRegionOpened(hri)) return; } catch (Exception e){} // first version is '0' AdminProtos.OpenRegionRequest orr = RequestConverter.buildOpenRegionRequest( getRS().getServerName(), hri, null); AdminProtos.OpenRegionResponse responseOpen = getRS().getRSRpcServices().openRegion(null, orr); Assert.assertEquals(1, responseOpen.getOpeningStateCount()); Assert.assertEquals(AdminProtos.OpenRegionResponse.RegionOpeningState.OPENED, responseOpen.getOpeningState(0)); checkRegionIsOpened(hri); }
getRS().getRSRpcServices().closeRegion(null, request); Assert.fail("The closeRegion should have been rejected"); } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException se) { AdminProtos.OpenRegionRequest orr = RequestConverter.buildOpenRegionRequest( earlierServerName, hri, null); getRS().getRSRpcServices().openRegion(null, orr); Assert.fail("The openRegion should have been rejected"); } catch (org.apache.hbase.thirdparty.com.google.protobuf.ServiceException se) {