/* * Should we check all assignments or just not in RIT? */ public static void waitUntilAssigned(HBaseAdmin admin, HRegionInfo region) throws IOException, InterruptedException { long timeout = admin.getConfiguration().getLong("hbase.hbck.assign.timeout", 120000); long expiration = timeout + System.currentTimeMillis(); while (System.currentTimeMillis() < expiration) { try { Map<String, RegionState> rits = admin.getClusterStatus().getRegionsInTransition(); if (rits.keySet() != null && !rits.keySet().contains(region.getEncodedName())) { // yay! no longer RIT return; } // still in rit LOG.info("Region still in transition, waiting for " + "it to become assigned: " + region); } catch (IOException e) { LOG.warn("Exception when waiting for region to become assigned," + " retrying", e); } Thread.sleep(1000); } throw new IOException( "Region " + region + " failed to move out of " + "transition within timeout " + timeout + "ms"); }
protected HServerLoad.RegionLoad getRegionLoad(HRegionInfo regionInfo, ServerName serverName) throws IOException { HServerLoad serverLoad = admin.getClusterStatus().getLoad(serverName); Map<byte[], HServerLoad.RegionLoad> regionsLoad = serverLoad.getRegionsLoad(); for (Map.Entry<byte[], HServerLoad.RegionLoad> entry : regionsLoad.entrySet()) { if (Arrays.equals(entry.getKey(), regionInfo.getRegionName())) { return entry.getValue(); } } return null; }
protected static ArrayList<ServerName> getServerNameList() throws IOException { if (TestBase.serverNameList == null) { Set<ServerName> serverNameSet = new TreeSet<>(admin.getClusterStatus().getServers()); ArrayList<ServerName> serverNameList = new ArrayList<>(); for (ServerName serverName : serverNameSet) { serverNameList.add(serverName); } TestBase.serverNameList = serverNameList; } return TestBase.serverNameList; }
protected void waitForMoving(HRegionInfo hRegionInfo, ServerName serverName) throws Exception { Map<byte[], HServerLoad.RegionLoad> regionsLoad = null; for (int i = 0; i < MAX_WAIT_ITERATION; i++) { HServerLoad load = admin.getClusterStatus().getLoad(serverName); regionsLoad = load.getRegionsLoad(); for (byte[] regionName : regionsLoad.keySet()) { if (Arrays.equals(regionName, hRegionInfo.getRegionName())) return; } admin.move(hRegionInfo.getEncodedNameAsBytes(), serverName.getServerName().getBytes()); Thread.sleep(WAIT_INTERVAL); } System.out.println("hRegionInfo = " + Bytes.toString(hRegionInfo.getRegionName())); for (Map.Entry<byte[], HServerLoad.RegionLoad> entry : regionsLoad.entrySet()) { System.out.println( "regionsLoad = " + Bytes.toString(entry.getKey()) + " - " + entry.getValue()); } Assert.fail(Util.getMethodName() + " failed"); }
protected void waitForSplitting(String tableName, int regionCount) throws IOException, InterruptedException { int regionCountActual = 0; for (int i = 0; i < MAX_WAIT_ITERATION; i++) { try (HTable table = new HTable(conf, tableName)) { regionCountActual = 0; NavigableMap<HRegionInfo, ServerName> regionLocations = table.getRegionLocations(); for (Map.Entry<HRegionInfo, ServerName> entry : regionLocations.entrySet()) { HServerLoad serverLoad = admin.getClusterStatus().getLoad(entry.getValue()); for (HServerLoad.RegionLoad regionLoad : serverLoad.getRegionsLoad().values()) { if (Arrays.equals(entry.getKey().getRegionName(), regionLoad.getName())) regionCountActual++; } } if (regionCountActual == regionCount) { return; } } Thread.sleep(WAIT_INTERVAL); } Assert.assertEquals(getMethodName() + " failed - ", regionCount, regionCountActual); }
public static Map<String, HRegionContent> getRegionMap(HTable table, HBaseAdmin admin) throws Exception { // TODO Auto-generated method stub Map<String, HRegionContent> regionMap = new HashMap<String, HRegionContent>(); try { Map<HRegionInfo, ServerName> regionsInfo = table.getRegionLocations(); for (HRegionInfo ri : regionsInfo.keySet()) { HRegionContent regionContent = new HRegionContent(); regionContent.tableName = ri.getTableNameAsString(); regionContent.encodedName = ri.getEncodedName(); regionContent.regionName = ri.getRegionNameAsString(); regionContent.regionNameBytes = ri.getRegionName(); regionContent.regionId = ri.getRegionId(); regionContent.startKey = ri.getStartKey(); regionContent.endKey = ri.getEndKey(); regionMap.put(regionContent.encodedName, regionContent); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ClusterStatus status = admin.getClusterStatus(); /* System.out.println("Cluster Status:\n--------------"); System.out.println("HBase Version: " + status.getHBaseVersion()); System.out.println("Version: " + status.getVersion()); System.out.println("No. Live Servers: " + status.getServersSize()); System.out.println("Cluster ID: " + status.getClusterId()); System.out.println("Servers: " + status.getServers()); System.out.println("No. Dead Servers: " + status.getDeadServers()); System.out.println("Dead Servers: " + status.getDeadServerNames()); System.out.println("No. Regions: " + status.getRegionsCount()); System.out.println("Regions in Transition: " + status.getRegionsInTransition()); System.out.println("No. Requests: " + status.getRequestsCount()); System.out.println("Avg Load: " + status.getAverageLoad()); System.out.println("\nServer Info:\n--------------");*/ for (ServerName server : status.getServers()) { /*System.out.println("Hostname: " + server.getHostname()); System.out.println("Host and Port: " + server.getHostAndPort()); System.out.println("Server Name: " + server.getServerName()); System.out.println("RPC Port: " + server.getPort()); System.out.println("Start Code: " + server.getStartcode());*/ HServerLoad load = status.getLoad(server); /*System.out.println("\nServer Load:\n--------------"); System.out.println("Load: " + load.getLoad()); System.out.println("Max Heap (MB): " + load.getMaxHeapMB()); System.out.println("Memstore Size (MB): " + load.getMemStoreSizeInMB()); System.out.println("No. Regions: " + load.getNumberOfRegions()); System.out.println("No. Requests: " + load.getNumberOfRequests()); System.out.println("Storefile Index Size (MB): " + load.getStorefileIndexSizeInMB()); System.out.println("No. Storefiles: " + load.getStorefiles()); System.out.println("Storefile Size (MB): " + load.getStorefileSizeInMB()); System.out.println("Used Heap (MB): " + load.getUsedHeapMB()); System.out.println("\nRegion Load:\n--------------");*/ for (Map.Entry<byte[], HServerLoad.RegionLoad> entry : load.getRegionsLoad().entrySet()) { HServerLoad.RegionLoad regionLoad = entry.getValue(); String regionLoadName = regionLoad.getNameAsString(); String[] tmpStrings = regionLoadName.split("\\."); String encodeName = tmpStrings[tmpStrings.length - 1]; if (!regionMap.containsKey(encodeName)) { continue; } HRegionContent regionContent = regionMap.get(encodeName); regionContent.stores = regionLoad.getStores(); regionContent.storeFiles = regionLoad.getStorefiles(); regionContent.storefileSizeMB = regionLoad.getStorefileSizeMB(); regionContent.storefileIndexSizeMB = regionLoad.getStorefileIndexSizeMB(); regionContent.memStoreSizeMB = regionLoad.getMemStoreSizeMB(); regionContent.requestsCount = regionLoad.getRequestsCount(); regionContent.readRequestCount = regionLoad.getReadRequestsCount(); regionContent.writeRequestCount = regionLoad.getWriteRequestsCount(); } } int count = 0; for (HRegionContent regionContent : regionMap.values()) { /*System.out.println("table name : " + regionContent.tableName); System.out.println("encoded name : " + regionContent.encodedName); System.out.println("region name : " + regionContent.regionName); System.out.println("regionId : " + regionContent.regionId); System.out.println("startKey : " + regionContent.startKey.toString()); System.out.println("endKey : " + regionContent.endKey.toString()); System.out.println("No. Stores: " + regionContent.stores); System.out.println("No. Storefiles: " + regionContent.storeFiles); System.out.println("Storefile Size (MB): " + regionContent.storefileSizeMB); System.out.println("Storefile Index Size (MB): " + regionContent.storefileIndexSizeMB); System.out.println("Memstore Size (MB): " + regionContent.memStoreSizeMB); System.out.println("No. Requests: " + regionContent.requestsCount); System.out.println("No. Read Requests: " + regionContent.readRequestCount); System.out.println("No. Write Requests: " + regionContent.writeRequestCount); System.out.println();*/ count++; } /*LOG.info("region sum num: " + regionMap.size()); LOG.info("not null region num:" + count); LOG.info("file size :" + fileSize);*/ return regionMap; }