HBASE-3905 HBaseAdmin.createTableAsync() should check for invalid split keys.

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1125233 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2011-05-20 04:45:40 +00:00
parent 5b4cb8c66b
commit 2b1f7dbd54
2 changed files with 15 additions and 13 deletions

View File

@ -109,6 +109,8 @@ Release 0.91.0 - Unreleased
HBASE-3898 TestSplitTransactionOnCluster broke in TRUNK HBASE-3898 TestSplitTransactionOnCluster broke in TRUNK
HBASE-3826 Minor compaction needs to check if still over HBASE-3826 Minor compaction needs to check if still over
compactionThreshold after compacting (Nicolas Spiegelberg) compactionThreshold after compacting (Nicolas Spiegelberg)
HBASE-3905 HBaseAdmin.createTableAsync() should check for invalid split
keys (Ted Yu)
IMPROVEMENTS IMPROVEMENTS
HBASE-3290 Max Compaction Size (Nicolas Spiegelberg via Stack) HBASE-3290 Max Compaction Size (Nicolas Spiegelberg via Stack)

View File

@ -286,19 +286,6 @@ public class HBaseAdmin implements Abortable, Closeable {
public void createTable(HTableDescriptor desc, byte [][] splitKeys) public void createTable(HTableDescriptor desc, byte [][] splitKeys)
throws IOException { throws IOException {
HTableDescriptor.isLegalTableName(desc.getName()); HTableDescriptor.isLegalTableName(desc.getName());
if(splitKeys != null && splitKeys.length > 1) {
Arrays.sort(splitKeys, Bytes.BYTES_COMPARATOR);
// Verify there are no duplicate split keys
byte [] lastKey = null;
for(byte [] splitKey : splitKeys) {
if(lastKey != null && Bytes.equals(splitKey, lastKey)) {
throw new IllegalArgumentException("All split keys must be unique, " +
"found duplicate: " + Bytes.toStringBinary(splitKey) +
", " + Bytes.toStringBinary(lastKey));
}
lastKey = splitKey;
}
}
createTableAsync(desc, splitKeys); createTableAsync(desc, splitKeys);
for (int tries = 0; tries < numRetries; tries++) { for (int tries = 0; tries < numRetries; tries++) {
try { try {
@ -336,6 +323,19 @@ public class HBaseAdmin implements Abortable, Closeable {
public void createTableAsync(HTableDescriptor desc, byte [][] splitKeys) public void createTableAsync(HTableDescriptor desc, byte [][] splitKeys)
throws IOException { throws IOException {
HTableDescriptor.isLegalTableName(desc.getName()); HTableDescriptor.isLegalTableName(desc.getName());
if(splitKeys != null && splitKeys.length > 1) {
Arrays.sort(splitKeys, Bytes.BYTES_COMPARATOR);
// Verify there are no duplicate split keys
byte [] lastKey = null;
for(byte [] splitKey : splitKeys) {
if(lastKey != null && Bytes.equals(splitKey, lastKey)) {
throw new IllegalArgumentException("All split keys must be unique, " +
"found duplicate: " + Bytes.toStringBinary(splitKey) +
", " + Bytes.toStringBinary(lastKey));
}
lastKey = splitKey;
}
}
try { try {
getMaster().createTable(desc, splitKeys); getMaster().createTable(desc, splitKeys);
} catch (RemoteException e) { } catch (RemoteException e) {