HBASE-12229 NullPointerException in SnapshotTestingUtils

* Implemented the waitUntilAllRegionsOnline in HBaseTestingUtility#createTable
* Add waitFor around #isTableAvailable call that previously didn't do anything
* Remove unused byte[] hex

Signed-off-by: stack <stack@apache.org>
This commit is contained in:
Dima Spivak 2014-10-15 22:02:54 -07:00 committed by stack
parent cad86cca00
commit 5e9360d80c
2 changed files with 27 additions and 5 deletions

View File

@ -1196,6 +1196,21 @@ public class HBaseTestingUtility extends HBaseCommonTestingUtility {
return new HTable(c, htd.getTableName());
}
/**
* Create a table.
* @param htd
* @param splitRows
* @return An HTable instance for the created table.
* @throws IOException
*/
public HTable createTable(HTableDescriptor htd, byte[][] splitRows)
throws IOException {
getHBaseAdmin().createTable(htd, splitRows);
// HBaseAdmin only waits for regions to appear in hbase:meta we should wait until they are assigned
waitUntilAllRegionsAssigned(htd.getTableName());
return new HTable(getConfiguration(), htd.getTableName());
}
/**
* Create a table.
* @param tableName

View File

@ -44,8 +44,10 @@ import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.TableNotEnabledException;
import org.apache.hadoop.hbase.Waiter;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Durability;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
@ -630,27 +632,32 @@ public class SnapshotTestingUtils {
for (HRegion region : onlineRegions) {
region.waitForFlushesAndCompactions();
}
util.getHBaseAdmin().isTableAvailable(tableName);
// Wait up to 60 seconds for a table to be available.
final HBaseAdmin hBaseAdmin = util.getHBaseAdmin();
util.waitFor(60000, new Waiter.Predicate<IOException>() {
@Override
public boolean evaluate() throws IOException {
return hBaseAdmin.isTableAvailable(tableName);
}
});
}
public static void createTable(final HBaseTestingUtility util, final TableName tableName,
int regionReplication, final byte[]... families) throws IOException, InterruptedException {
HTableDescriptor htd = new HTableDescriptor(tableName);
htd.setRegionReplication(regionReplication);
for (byte[] family: families) {
for (byte[] family : families) {
HColumnDescriptor hcd = new HColumnDescriptor(family);
htd.addFamily(hcd);
}
byte[][] splitKeys = getSplitKeys();
util.getHBaseAdmin().createTable(htd, splitKeys);
waitForTableToBeOnline(util, tableName);
util.createTable(htd, splitKeys);
assertEquals((splitKeys.length + 1) * regionReplication,
util.getHBaseAdmin().getTableRegions(tableName).size());
}
public static byte[][] getSplitKeys() {
byte[][] splitKeys = new byte[KEYS.length-2][];
byte[] hex = Bytes.toBytes("123456789abcde");
for (int i = 0; i < splitKeys.length; ++i) {
splitKeys[i] = new byte[] { KEYS[i+1] };
}