diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java index d7b52d5..ecfdd03 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Admin.java @@ -22,6 +22,7 @@ import java.io.Closeable; import java.io.IOException; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.concurrent.Future; import java.util.regex.Pattern; @@ -903,6 +904,16 @@ public interface Admin extends Abortable, Closeable { throws IOException; /** + * Split a table. Asynchronous operation. + * + * @param tableName table to split + * @param splitPoint the explicit position to split on + * @param id identifies this split request + * @throws IOException if a remote or network exception occurs + */ + void split(final TableName tableName, final byte[] splitPoint, final UUID id) throws IOException; + + /** * Split an individual region. Asynchronous operation. * * @param regionName region to split @@ -913,6 +924,17 @@ public interface Admin extends Abortable, Closeable { throws IOException; /** + * Split an individual region. Asynchronous operation. + * + * @param regionName region to split + * @param splitPoint the explicit position to split on + * @param id identifies this split request + * @throws IOException if a remote or network exception occurs + */ + void splitRegion(final byte[] regionName, final byte[] splitPoint, final UUID id) + throws IOException; + + /** * Modify an existing table, more IRB friendly version. Asynchronous operation. This means that * it may be a while before your schema change is updated across all of the table. * You can use Future.get(long, TimeUnit) to wait on the operation to complete. diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java index db94ff4..470a755 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java @@ -27,6 +27,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.Map.Entry; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -1506,7 +1507,17 @@ public class HBaseAdmin implements Admin { * {@inheritDoc} */ @Override - public void split(final TableName tableName, final byte [] splitPoint) throws IOException { + public void split(final TableName tableName, final byte [] splitPoint) + throws IOException { + split(tableName, splitPoint, UUID.randomUUID()); + } + + /** + * {@inheritDoc} + */ + @Override + public void split(final TableName tableName, final byte [] splitPoint, final UUID id) + throws IOException { ZooKeeperWatcher zookeeper = null; try { checkTableExists(tableName); @@ -1539,6 +1550,12 @@ public class HBaseAdmin implements Admin { @Override public void splitRegion(final byte[] regionName, final byte [] splitPoint) throws IOException { + splitRegion(regionName, splitPoint, UUID.randomUUID()); + } + + @Override + public void splitRegion(final byte[] regionName, final byte [] splitPoint, final UUID id) + throws IOException { Pair regionServerPair = getRegion(regionName); if (regionServerPair == null) { throw new IllegalArgumentException("Invalid region: " + Bytes.toStringBinary(regionName)); diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java index 76b7cc2..a9b531e 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java @@ -27,6 +27,7 @@ import org.apache.hadoop.hbase.normalizer.NormalizationPlan; import java.io.IOException; import java.util.Arrays; +import java.util.UUID; /** * Normalization plan to split region. @@ -79,7 +80,7 @@ public class SplitNormalizationPlan implements NormalizationPlan { public void execute(Admin admin) { LOG.info("Executing splitting normalization plan: " + this); try { - admin.splitRegion(regionInfo.getRegionName()); + admin.splitRegion(regionInfo.getRegionName(), null, UUID.randomUUID()); } catch (IOException ex) { LOG.error("Error during region split: ", ex); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java index 91a5f37..6e6de05 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/SplitRequest.java @@ -19,6 +19,7 @@ package org.apache.hadoop.hbase.regionserver; import java.io.IOException; +import java.util.UUID; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,6 +45,7 @@ class SplitRequest implements Runnable { private final HRegionServer server; private final User user; private TableLock tableLock; + private UUID uuid; SplitRequest(Region region, byte[] midKey, HRegionServer hrs, User user) { Preconditions.checkNotNull(hrs);