diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableGetMultiThreaded.java hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableGetMultiThreaded.java index 2abc54d129..f528f00b1c 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableGetMultiThreaded.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAsyncTableGetMultiThreaded.java @@ -24,7 +24,9 @@ import static org.junit.Assert.assertEquals; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.concurrent.ExecutionException; @@ -37,7 +39,10 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import org.apache.commons.io.IOUtils; -import org.apache.hadoop.hbase.*; +import org.apache.hadoop.hbase.HBaseTestingUtility; +import org.apache.hadoop.hbase.MemoryCompactionPolicy; +import org.apache.hadoop.hbase.ServerName; +import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.io.ByteBufferPool; import org.apache.hadoop.hbase.regionserver.CompactingMemStore; import org.apache.hadoop.hbase.regionserver.HRegion; @@ -47,14 +52,12 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Threads; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import org.junit.experimental.categories.Category; /** * Will split the table, and move region randomly when testing. */ -@Ignore // Can't move hbase:meta off master server in AMv2. TODO. @Category({ LargeTests.class, ClientTests.class }) public class TestAsyncTableGetMultiThreaded { private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility(); @@ -130,20 +133,19 @@ public class TestAsyncTableGetMultiThreaded { }))); Collections.shuffle(Arrays.asList(SPLIT_KEYS), new Random(123)); Admin admin = TEST_UTIL.getAdmin(); + admin.balancer(true); + for (byte[] splitPoint : SPLIT_KEYS) { admin.split(TABLE_NAME, splitPoint); for (HRegion region : TEST_UTIL.getHBaseCluster().getRegions(TABLE_NAME)) { region.compact(true); } - Thread.sleep(5000); - admin.balancer(true); - Thread.sleep(5000); - ServerName metaServer = TEST_UTIL.getHBaseCluster().getServerHoldingMeta(); - ServerName newMetaServer = TEST_UTIL.getHBaseCluster().getRegionServerThreads().stream() - .map(t -> t.getRegionServer().getServerName()).filter(s -> !s.equals(metaServer)) - .findAny().get(); - admin.move(HRegionInfo.FIRST_META_REGIONINFO.getEncodedNameAsBytes(), - Bytes.toBytes(newMetaServer.getServerName())); + List regions = TEST_UTIL.getHBaseCluster().getRegions(TABLE_NAME); + Collection servers = TEST_UTIL.getHBaseCluster().getClusterStatus().getServers(); + ServerName server = selectRandom(servers); + HRegion region = selectRandom(regions); + admin.move(region.getRegionInfo().getEncodedNameAsBytes(), + server.getServerName().getBytes()); Thread.sleep(5000); } stop.set(true); @@ -152,4 +154,22 @@ public class TestAsyncTableGetMultiThreaded { future.get(); } } + + private ServerName selectRandom(Collection servers) { + Random rnd = new Random(); + int index = rnd.nextInt(servers.size()); + Iterator it = servers.iterator(); + int counter = 0; + ServerName sname = null; + while(counter++ < index) { + it.next(); + } + return it.next(); + } + + private HRegion selectRandom(List regions) { + Random rnd = new Random(); + int index = rnd.nextInt(regions.size()); + return regions.get(index); + } }