Index: hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java =================================================================== --- hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (revision 1499374) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java (working copy) @@ -504,6 +504,19 @@ final HTableDescriptor desc, final byte [][] splitKeys) throws IOException { HTableDescriptor.isLegalTableName(desc.getName()); + checkSplitKeysSortOrder(splitKeys); + + execute(new MasterAdminCallable() { + @Override + public Void call() throws ServiceException { + CreateTableRequest request = RequestConverter.buildCreateTableRequest(desc, splitKeys); + masterAdmin.createTable(null, request); + return null; + } + }); + } + + public static void checkSplitKeysSortOrder(final byte[][] splitKeys) { if(splitKeys != null && splitKeys.length > 0) { Arrays.sort(splitKeys, Bytes.BYTES_COMPARATOR); // Verify there are no duplicate split keys @@ -521,15 +534,6 @@ lastKey = splitKey; } } - - execute(new MasterAdminCallable() { - @Override - public Void call() throws ServiceException { - CreateTableRequest request = RequestConverter.buildCreateTableRequest(desc, splitKeys); - masterAdmin.createTable(null, request); - return null; - } - }); } /** Index: hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (revision 1499374) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestAdmin.java (working copy) @@ -1694,4 +1694,40 @@ ct.stop(); } } + + @Test + public void testSplitKeys() throws Exception { + byte[][] startKeys = null; + try { + startKeys = getStartKeys(); + HBaseAdmin.checkSplitKeysSortOrder(startKeys); + } catch (Exception e) { + fail("split keys should not be equal."); + } + try { + String[] splits = new String[startKeys.length]; + for (int i = 0; i < startKeys.length; i++) { + splits[i] = Bytes.toString(startKeys[i]); + } + HBaseAdmin.checkSplitKeysSortOrder(Bytes.toByteArrays(splits)); + } catch (Exception e) { + fail("split keys should not be equal."); + } + } + + public static byte[][] getStartKeys() { + long startKey = 18600000000L; + long endKey = 18610000000L; + int totalRegions = 250; + long numberOfKeys = (endKey - startKey) / totalRegions; + byte[][] regionStartKeys = new byte[totalRegions - 1][]; + for (int i = 0; i < totalRegions - 1; i++) { + // As phoneNo is the 1st part of the actual RK and we have some more bytes + // coming after it in + // every RK, we have to use phoneNo string form. + regionStartKeys[i] = Bytes.toBytes(startKey + + ((i + 1) * numberOfKeys)); + } + return regionStartKeys; + } }