commit 8c8ab8d24888b68b6d04f62eafaa2f9dba986008 Author: nspiegelberg Date: 51 seconds ago HBASE-3437 : Support Explict Split Points from the Shell diff --git a/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java b/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java index a09028b..dc14176 100644 --- a/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java +++ b/src/main/java/org/apache/hadoop/hbase/client/HBaseAdmin.java @@ -1059,6 +1059,11 @@ public class HBaseAdmin implements Abortable { split(tableNameOrRegionName, null); } + public void split(final String tableNameOrRegionName, + final String splitPoint) throws IOException, InterruptedException { + split(Bytes.toBytes(tableNameOrRegionName), Bytes.toBytes(splitPoint)); + } + /** * Split a table or an individual region. * Asynchronous operation. diff --git a/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java b/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java index 27d9843..ba9733d 100644 --- a/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java +++ b/src/main/java/org/apache/hadoop/hbase/regionserver/Store.java @@ -1319,12 +1319,11 @@ public class Store implements HeapSize { StoreSize checkSplit(final boolean force) { this.lock.readLock().lock(); try { - // Iterate through all store files - if (this.storefiles.isEmpty()) { - return null; - } - if (!force && (storeSize < this.desiredMaxFileSize)) { - return null; + // sanity checks + if (!force) { + if (storeSize < this.desiredMaxFileSize || this.storefiles.isEmpty()) { + return null; + } } if (this.region.getRegionInfo().isMetaRegion()) { diff --git a/src/main/ruby/hbase/admin.rb b/src/main/ruby/hbase/admin.rb index 6d7717d..88bd373 100644 --- a/src/main/ruby/hbase/admin.rb +++ b/src/main/ruby/hbase/admin.rb @@ -61,8 +61,12 @@ module Hbase #---------------------------------------------------------------------------------------------- # Requests a table or region split - def split(table_or_region_name) - @admin.split(table_or_region_name) + def split(table_or_region_name, split_point) + if split_point == nil + @admin.split(table_or_region_name) + else + @admin.split(table_or_region_name, split_point) + end end #---------------------------------------------------------------------------------------------- diff --git a/src/main/ruby/shell/commands/split.rb b/src/main/ruby/shell/commands/split.rb index c4de875..47e21f8 100644 --- a/src/main/ruby/shell/commands/split.rb +++ b/src/main/ruby/shell/commands/split.rb @@ -23,13 +23,19 @@ module Shell class Split < Command def help return <<-EOF -Split table or pass a region row to split individual region +Split entire table or pass a region to split individual region. With the +second parameter, you can specify an explicit split key for the region. +Examples: + split 'tableName' + split 'regionName' # format: 'tableName,startKey,id' + split 'tableName', 'splitKey' + split 'regionName', 'splitKey' EOF end - def command(table_or_region_name) + def command(table_or_region_name, split_point = nil) format_simple_command do - admin.split(table_or_region_name) + admin.split(table_or_region_name, split_point) end end end