Repository: hbase
Updated Branches:
  refs/heads/branch-1 3862b30a4 -> 39c897e3f


HBASE-13100 Shell command to retrieve table splits


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/39c897e3
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/39c897e3
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/39c897e3

Branch: refs/heads/branch-1
Commit: 39c897e3fc078b3112cf3adfff30cc139a129e3f
Parents: 3862b30
Author: Ashish Singhi <ashish.sin...@huawei.com>
Authored: Sat Feb 28 17:45:58 2015 +0530
Committer: Sean Busbey <bus...@apache.org>
Committed: Sat Feb 28 10:24:31 2015 -0600

----------------------------------------------------------------------
 hbase-shell/src/main/ruby/hbase/table.rb        | 11 +++++
 hbase-shell/src/main/ruby/shell.rb              |  1 +
 .../src/main/ruby/shell/commands/get_splits.rb  | 46 ++++++++++++++++++++
 hbase-shell/src/test/ruby/hbase/table_test.rb   | 17 ++++++++
 hbase-shell/src/test/ruby/test_helper.rb        | 12 +++++
 5 files changed, 87 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/39c897e3/hbase-shell/src/main/ruby/hbase/table.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/hbase/table.rb 
b/hbase-shell/src/main/ruby/hbase/table.rb
index bf99037..448b244 100644
--- a/hbase-shell/src/main/ruby/hbase/table.rb
+++ b/hbase-shell/src/main/ruby/hbase/table.rb
@@ -678,5 +678,16 @@ EOF
         column[1] = parts[0]
       end
     end
+
+    
#----------------------------------------------------------------------------------------------
+    # Get the split points for the table
+    def _get_splits_internal()
+      locator = @table.getRegionLocator()
+      splits = locator.getAllRegionLocations().
+          map{|i| 
Bytes.toStringBinary(i.getRegionInfo().getStartKey)}.delete_if{|k| k == ""}
+      locator.close()
+      puts("Total number of splits = %s" % [splits.size + 1])
+      return splits
+    end
   end
 end

http://git-wip-us.apache.org/repos/asf/hbase/blob/39c897e3/hbase-shell/src/main/ruby/shell.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell.rb 
b/hbase-shell/src/main/ruby/shell.rb
index 994a195..1879d7c 100644
--- a/hbase-shell/src/main/ruby/shell.rb
+++ b/hbase-shell/src/main/ruby/shell.rb
@@ -294,6 +294,7 @@ Shell.load_command_group(
     truncate
     truncate_preserve
     append
+    get_splits
   ]
 )
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/39c897e3/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell/commands/get_splits.rb 
b/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
new file mode 100644
index 0000000..8b6ae82
--- /dev/null
+++ b/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
@@ -0,0 +1,46 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+module Shell
+  module Commands
+    class GetSplits < Command
+      def help
+        return <<-EOF
+Get the splits of the named table:
+  hbase> get_splits 't1'
+  hbase> get_splits 'ns1:t1'
+
+The same commands also can be run on a table reference. Suppose you had a 
reference
+t to table 't1', the corresponding command would be:
+
+  hbase> t.get_splits
+EOF
+      end
+
+      def command(table)
+        get_splits(table(table))
+      end
+
+      def get_splits(table)
+        table._get_splits_internal()
+      end
+    end
+  end
+end
+
+::Hbase::Table.add_shell_command("get_splits")
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hbase/blob/39c897e3/hbase-shell/src/test/ruby/hbase/table_test.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/hbase/table_test.rb 
b/hbase-shell/src/test/ruby/hbase/table_test.rb
index dc4dc0d..184e0d4 100644
--- a/hbase-shell/src/test/ruby/hbase/table_test.rb
+++ b/hbase-shell/src/test/ruby/hbase/table_test.rb
@@ -611,5 +611,22 @@ module Hbase
       end
     end
 
+    define_test "Split count for a table" do
+      @testTableName = "tableWithSplits"
+      create_test_table_with_splits(@testTableName, SPLITS => ['10', '20', 
'30', '40'])
+      @table = table(@testTableName)
+      splits = @table._get_splits_internal()
+      #Total splits is 5 but here count is 4 as we ignore implicit empty split.
+      assert_equal(4, splits.size)
+      assert_equal(["10", "20", "30", "40"], splits)
+      drop_test_table(@testTableName)
+    end
+
+    define_test "Split count for a empty table" do
+      splits = @test_table._get_splits_internal()
+      #Empty split should not be part of this array.
+      assert_equal(0, splits.size)
+      assert_equal([], splits)
+    end
   end
 end

http://git-wip-us.apache.org/repos/asf/hbase/blob/39c897e3/hbase-shell/src/test/ruby/test_helper.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/test_helper.rb 
b/hbase-shell/src/test/ruby/test_helper.rb
index e2ab921..80eb4f5 100644
--- a/hbase-shell/src/test/ruby/test_helper.rb
+++ b/hbase-shell/src/test/ruby/test_helper.rb
@@ -85,6 +85,18 @@ module Hbase
       end
     end
 
+    def create_test_table_with_splits(name, splits)
+      # Create the table if needed
+      unless admin.exists?(name)
+        admin.create name, 'f1', splits
+      end
+
+      # Enable the table if needed
+      unless admin.enabled?(name)
+        admin.enable(name)
+      end
+    end
+
     def drop_test_table(name)
       return unless admin.exists?(name)
       begin

Reply via email to