HBASE-21076 refactor TestTableResource to ask for a multi-region table instead of relying on a split operation.
Also correct how the test does string conversion for region names that include non-printable characters. includes addendum. Signed-off-by: Duo Zhang <zhangduo@apache.org> Signed-off-by: Ted Yu <tyu@apache.org> Signed-off-by: Andrew Purtell <apurtell@apache.org> (cherry picked from commit6b18e39f30
) (cherry picked from commit63f2d3cbdc
)
This commit is contained in:
parent
1120f33c38
commit
9a3093a886
|
@ -31,19 +31,15 @@ import javax.xml.bind.JAXBException;
|
|||
import org.apache.hadoop.hbase.CellUtil;
|
||||
import org.apache.hadoop.hbase.HBaseClassTestRule;
|
||||
import org.apache.hadoop.hbase.HBaseTestingUtility;
|
||||
import org.apache.hadoop.hbase.HColumnDescriptor;
|
||||
import org.apache.hadoop.hbase.HRegionInfo;
|
||||
import org.apache.hadoop.hbase.HRegionLocation;
|
||||
import org.apache.hadoop.hbase.HTableDescriptor;
|
||||
import org.apache.hadoop.hbase.ServerName;
|
||||
import org.apache.hadoop.hbase.TableName;
|
||||
import org.apache.hadoop.hbase.client.Admin;
|
||||
import org.apache.hadoop.hbase.client.Connection;
|
||||
import org.apache.hadoop.hbase.client.Durability;
|
||||
import org.apache.hadoop.hbase.client.Put;
|
||||
import org.apache.hadoop.hbase.client.RegionLocator;
|
||||
import org.apache.hadoop.hbase.client.Table;
|
||||
import org.apache.hadoop.hbase.regionserver.TestEndToEndSplitTransaction;
|
||||
import org.apache.hadoop.hbase.rest.client.Client;
|
||||
import org.apache.hadoop.hbase.rest.client.Cluster;
|
||||
import org.apache.hadoop.hbase.rest.client.Response;
|
||||
|
@ -54,7 +50,6 @@ import org.apache.hadoop.hbase.rest.model.TableRegionModel;
|
|||
import org.apache.hadoop.hbase.testclassification.MediumTests;
|
||||
import org.apache.hadoop.hbase.testclassification.RestTests;
|
||||
import org.apache.hadoop.hbase.util.Bytes;
|
||||
import org.apache.hadoop.util.StringUtils;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.ClassRule;
|
||||
|
@ -72,9 +67,10 @@ public class TestTableResource {
|
|||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(TestTableResource.class);
|
||||
|
||||
private static TableName TABLE = TableName.valueOf("TestTableResource");
|
||||
private static String COLUMN_FAMILY = "test";
|
||||
private static String COLUMN = COLUMN_FAMILY + ":qualifier";
|
||||
private static final TableName TABLE = TableName.valueOf("TestTableResource");
|
||||
private static final String COLUMN_FAMILY = "test";
|
||||
private static final String COLUMN = COLUMN_FAMILY + ":qualifier";
|
||||
private static final int NUM_REGIONS = 4;
|
||||
private static List<HRegionLocation> regionMap;
|
||||
|
||||
private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
|
||||
|
@ -94,13 +90,7 @@ public class TestTableResource {
|
|||
TableInfoModel.class,
|
||||
TableListModel.class,
|
||||
TableRegionModel.class);
|
||||
Admin admin = TEST_UTIL.getAdmin();
|
||||
if (admin.tableExists(TABLE)) {
|
||||
return;
|
||||
}
|
||||
HTableDescriptor htd = new HTableDescriptor(TABLE);
|
||||
htd.addFamily(new HColumnDescriptor(COLUMN_FAMILY));
|
||||
admin.createTable(htd);
|
||||
TEST_UTIL.createMultiRegionTable(TABLE, Bytes.toBytes(COLUMN_FAMILY), NUM_REGIONS);
|
||||
byte[] k = new byte[3];
|
||||
byte [][] famAndQf = CellUtil.parseColumn(Bytes.toBytes(COLUMN));
|
||||
List<Put> puts = new ArrayList<>();
|
||||
|
@ -117,37 +107,20 @@ public class TestTableResource {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
Connection connection = TEST_UTIL.getConnection();
|
||||
|
||||
Table table = connection.getTable(TABLE);
|
||||
table.put(puts);
|
||||
table.close();
|
||||
// get the initial layout (should just be one region)
|
||||
|
||||
RegionLocator regionLocator = connection.getRegionLocator(TABLE);
|
||||
List<HRegionLocation> m = regionLocator.getAllRegionLocations();
|
||||
assertEquals(1, m.size());
|
||||
// tell the master to split the table
|
||||
admin.split(TABLE);
|
||||
// give some time for the split to happen
|
||||
|
||||
TestEndToEndSplitTransaction.blockUntilRegionSplit(TEST_UTIL.getConfiguration(), 60000,
|
||||
m.get(0).getRegionInfo().getRegionName(), true);
|
||||
long timeout = System.currentTimeMillis() + (15 * 1000);
|
||||
while (System.currentTimeMillis() < timeout && m.size()!=2){
|
||||
try {
|
||||
Thread.sleep(250);
|
||||
} catch (InterruptedException e) {
|
||||
LOG.warn(StringUtils.stringifyException(e));
|
||||
}
|
||||
// check again
|
||||
m = regionLocator.getAllRegionLocations();
|
||||
}
|
||||
|
||||
// should have two regions now
|
||||
assertEquals(2, m.size());
|
||||
// should have four regions now
|
||||
assertEquals(NUM_REGIONS, m.size());
|
||||
regionMap = m;
|
||||
LOG.info("regions: " + regionMap);
|
||||
LOG.error("regions: " + regionMap);
|
||||
regionLocator.close();
|
||||
}
|
||||
|
||||
|
@ -178,10 +151,14 @@ public class TestTableResource {
|
|||
while (regions.hasNext()) {
|
||||
TableRegionModel region = regions.next();
|
||||
boolean found = false;
|
||||
LOG.debug("looking for region " + region.getName());
|
||||
for (HRegionLocation e: regionMap) {
|
||||
HRegionInfo hri = e.getRegionInfo();
|
||||
String hriRegionName = hri.getRegionNameAsString();
|
||||
// getRegionNameAsString uses Bytes.toStringBinary which escapes some non-printable
|
||||
// characters
|
||||
String hriRegionName = Bytes.toString(hri.getRegionName());
|
||||
String regionName = region.getName();
|
||||
LOG.debug("comparing to region " + hriRegionName);
|
||||
if (hriRegionName.equals(regionName)) {
|
||||
found = true;
|
||||
byte[] startKey = hri.getStartKey();
|
||||
|
@ -198,7 +175,7 @@ public class TestTableResource {
|
|||
break;
|
||||
}
|
||||
}
|
||||
assertTrue(found);
|
||||
assertTrue("Couldn't find region " + region.getName(), found);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue