/** * @return Return online regions of table; does not include OFFLINE or SPLITTING regions. */ public List<RegionInfo> getRegionsOfTable(final TableName table) { return getRegionsOfTable(table, false); }
/** * @return Return online regions of table; does not include OFFLINE or SPLITTING regions. */ public List<RegionInfo> getRegionsOfTable(TableName table, boolean offline) { return getRegionsOfTable(table, state -> include(state, offline)); }
@Override public boolean evaluate() throws IOException { List<RegionInfo> hris = states.getRegionsOfTable(tableName); return hris != null && !hris.isEmpty(); } });
/** * Fetches all Regions for a table. Cache the result of this method if you need to use it multiple * times. Be aware that it may change over in between calls to this procedure. */ private List<RegionInfo> getRegionInfoList(final MasterProcedureEnv env) throws IOException { return env.getAssignmentManager().getRegionStates().getRegionsOfTable(getTableName()); } }
/** * Check hbase:namespace table is assigned. If not, startup will hang looking for the ns table * <p/> * This is for rolling upgrading, later we will migrate the data in ns table to the ns family of * meta table. And if this is a new clsuter, this method will return immediately as there will be * no namespace table/region. * @return True if namespace table is up/online. */ private boolean waitForNamespaceOnline() throws InterruptedException, IOException { TableState nsTableState = MetaTableAccessor.getTableState(getClusterConnection(), TableName.NAMESPACE_TABLE_NAME); if (nsTableState == null || nsTableState.isDisabled()) { // this means we have already migrated the data and disabled or deleted the namespace table, // or this is a new depliy which does not have a namespace table from the beginning. return true; } List<RegionInfo> ris = this.assignmentManager.getRegionStates().getRegionsOfTable(TableName.NAMESPACE_TABLE_NAME); if (ris.isEmpty()) { // maybe this will not happen any more, but anyway, no harm to add a check here... return true; } // Else there are namespace regions up in meta. Ensure they are assigned before we go on. for (RegionInfo ri : ris) { isRegionOnline(ri); } return true; }
private void checkTableRegions(final RegionStates stateMap, final TableName tableName, final int nregions) { List<RegionInfo> hris = stateMap.getRegionsOfTable(tableName, true); assertEquals(nregions, hris.size()); for (int i = 1; i < hris.size(); ++i) { long a = Bytes.toLong(hris.get(i - 1).getStartKey()); long b = Bytes.toLong(hris.get(i + 0).getStartKey()); assertEquals(b, a + 1); } }
/** * Moves every region of tables which should be kept on the servers, * but currently they are located on other servers. * @param servers the regions of these servers will be kept on the servers, others will be moved * @param tables the tables that will move to new group * @param targetGroupName the target group name * @throws IOException if moving the region fails */ private void moveRegionsToServers(Set<Address> servers, Set<TableName> tables, String targetGroupName) throws IOException { for (TableName table: tables) { LOG.info("Moving region(s) from " + table + " for table move to " + targetGroupName); for (RegionInfo region : master.getAssignmentManager().getRegionStates() .getRegionsOfTable(table)) { ServerName sn = master.getAssignmentManager().getRegionStates() .getRegionServerOfRegion(region); if (!servers.contains(sn.getAddress())) { master.getAssignmentManager().move(region); } } } }
private Map<String, RegionState> rsGroupGetRegionsInTransition(String groupName) throws IOException { Map<String, RegionState> rit = Maps.newTreeMap(); AssignmentManager am = master.getAssignmentManager(); for(TableName tableName : getRSGroupInfo(groupName).getTables()) { for(RegionInfo regionInfo: am.getRegionStates().getRegionsOfTable(tableName)) { RegionState state = am.getRegionStates().getRegionTransitionState(regionInfo); if(state != null) { rit.put(regionInfo.getEncodedName(), state); } } } return rit; }
private void waitAndVerifyRegionNum(HMaster master, TableName tablename, int expectedRegionNum) throws Exception { List<Pair<RegionInfo, ServerName>> tableRegionsInMeta; List<RegionInfo> tableRegionsInMaster; long timeout = System.currentTimeMillis() + waitTime; while (System.currentTimeMillis() < timeout) { tableRegionsInMeta = MetaTableAccessor.getTableRegionsAndLocations(TEST_UTIL.getConnection(), tablename); tableRegionsInMaster = master.getAssignmentManager().getRegionStates().getRegionsOfTable(tablename); LOG.info(Objects.toString(tableRegionsInMaster)); LOG.info(Objects.toString(tableRegionsInMeta)); int tableRegionsInMetaSize = tableRegionsInMeta.size(); int tableRegionsInMasterSize = tableRegionsInMaster.size(); if (tableRegionsInMetaSize == expectedRegionNum && tableRegionsInMasterSize == expectedRegionNum) { break; } Thread.sleep(250); } tableRegionsInMeta = MetaTableAccessor.getTableRegionsAndLocations( TEST_UTIL.getConnection(), tablename); LOG.info("Regions after merge:" + Joiner.on(',').join(tableRegionsInMeta)); assertEquals(expectedRegionNum, tableRegionsInMeta.size()); }
master.getAssignmentManager().getRegionStates().getRegionsOfTable(table)) { LOG.info("Moving region " + region.getShortNameToLog() + " to RSGroup " + targetGroup);
getRegionsOfTable(any())).thenReturn(RegionInfo); when(masterServices.getAssignmentManager().getRegionStates(). getRegionServerOfRegion(any())).thenReturn(sn);
regions = env.getAssignmentManager().getRegionStates().getRegionsOfTable(getTableName()); assert regions != null && !regions.isEmpty() : "unexpected 0 regions"; ProcedureSyncWait.waitRegionInTransition(env, regions);
RegionInfo createTableAndGetOneRegion(final TableName tableName) throws IOException, InterruptedException, ExecutionException { TableDescriptor desc = TableDescriptorBuilder.newBuilder(tableName) .setColumnFamily(ColumnFamilyDescriptorBuilder.of(FAMILY)).build(); admin.createTable(desc, Bytes.toBytes("A"), Bytes.toBytes("Z"), 5).get(); // wait till the table is assigned HMaster master = TEST_UTIL.getHBaseCluster().getMaster(); long timeoutTime = System.currentTimeMillis() + 3000; while (true) { List<RegionInfo> regions = master.getAssignmentManager().getRegionStates().getRegionsOfTable(tableName); if (regions.size() > 3) { return regions.get(2); } long now = System.currentTimeMillis(); if (now > timeoutTime) { fail("Could not find an online region"); } Thread.sleep(10); } }
List<RegionInfo> regionsOfTable = cluster.getMaster().getAssignmentManager().getRegionStates() .getRegionsOfTable(userTableName); assertEquals(1, regionsOfTable.size()); RegionInfo hRegionInfo = regionsOfTable.get(0); regionsOfTable = cluster.getMaster() .getAssignmentManager().getRegionStates() .getRegionsOfTable(userTableName); regionsOfTable = cluster.getMaster() .getAssignmentManager().getRegionStates() .getRegionsOfTable(userTableName); LOG.debug("waiting 2 regions to be available, got " + regionsOfTable.size() + ": " + regionsOfTable);
while (true) { List<RegionInfo> regions = master.getAssignmentManager(). getRegionStates().getRegionsOfTable(table); if (regions.size() > 3) { hri = regions.get(2);
regions = env.getAssignmentManager().getRegionStates().getRegionsOfTable(getTableName()); RegionReplicaUtil.removeNonDefaultRegions(regions); assert regions != null && !regions.isEmpty() : "unexpected 0 regions";
assert(ADMIN.isTableEnabled(tableName)); List<RegionInfo> regions = TEST_UTIL.getMiniHBaseCluster().getMaster() .getAssignmentManager().getRegionStates().getRegionsOfTable(tableName); assert(regions.size() == numRegions * numReplica); } finally {
List<RegionInfo> regions = am.getRegionStates().getRegionsOfTable(tableName);
.getBufferedMutator(TableName.META_TABLE_NAME)) { for (RegionInfo region : env.getAssignmentManager().getRegionStates() .getRegionsOfTable(tableName)) { long maxSequenceId = WALSplitter.getMaxRegionSequenceId(walFS, getWALRegionDir(env, region));
@Test public void testAssignRegionAndUnassignRegion() throws Exception { createTableWithDefaultConf(tableName); // assign region. HMaster master = TEST_UTIL.getHBaseCluster().getMaster(); AssignmentManager am = master.getAssignmentManager(); RegionInfo hri = am.getRegionStates().getRegionsOfTable(tableName).get(0); // assert region on server RegionStates regionStates = am.getRegionStates(); ServerName serverName = regionStates.getRegionServerOfRegion(hri); TEST_UTIL.assertRegionOnServer(hri, serverName, 200); assertTrue(regionStates.getRegionState(hri).isOpened()); // Region is assigned now. Let's assign it again. // Master should not abort, and region should stay assigned. try { admin.assign(hri.getRegionName()).get(); fail("Should fail when assigning an already onlined region"); } catch (ExecutionException e) { // Expected assertThat(e.getCause(), instanceOf(DoNotRetryRegionException.class)); } assertFalse(am.getRegionStates().getRegionStateNode(hri).isInTransition()); assertTrue(regionStates.getRegionState(hri).isOpened()); // unassign region admin.unassign(hri.getRegionName(), true).get(); assertFalse(am.getRegionStates().getRegionStateNode(hri).isInTransition()); assertTrue(regionStates.getRegionState(hri).isClosed()); }