int familyValues = admin.getTableDescriptor(tableName).getFamily(family).getValues().size();
StoppableImplementation stopper = new StoppableImplementation();
//alter table every 10 sec
Chore alterThread = new Chore("Alter Chore", 10000, stopper) {
@Override
protected void chore() {
Random random = new Random();
try {
HTableDescriptor htd = admin.getTableDescriptor(tableName);
String val = String.valueOf(random.nextInt());
htd.getFamily(family).setValue(val, val);
desc.getFamily(family).setValue(val, val); // save it for later
// control
admin.modifyTable(tableName, htd);
} catch (Exception ex) {
LOG.warn("Caught exception", ex);
fail(ex.getMessage());
}
}
};
//split table every 5 sec
Chore splitThread = new Chore("Split thread", 5000, stopper) {
@Override
public void chore() {
try {
HRegion region = TEST_UTIL.getSplittableRegion(tableName, -1);
if (region != null) {
byte[] regionName = region.getRegionName();
admin.flushRegion(regionName);
admin.compactRegion(regionName);
admin.splitRegion(regionName);
} else {
LOG.warn("Could not find suitable region for the table. Possibly the " +
"region got closed and the attempts got over before " +
"the region could have got reassigned.");
}
} catch (NotServingRegionException nsre) {
// the region may be in transition
LOG.warn("Caught exception", nsre);
} catch (Exception ex) {
LOG.warn("Caught exception", ex);
fail(ex.getMessage());
}
}
};
alterThread.start();
splitThread.start();
TEST_UTIL.waitTableEnabled(tableName);
while (true) {
List<HRegionInfo> regions = admin.getTableRegions(tableName);
LOG.info(String.format("Table #regions: %d regions: %s:", regions.size(), regions));
assertEquals(admin.getTableDescriptor(tableName), desc);