Repository: hbase Updated Branches: refs/heads/0.98 6e6cf74c1 -> 5e993eeef
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/5e993eee Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/5e993eee Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/5e993eee Branch: refs/heads/0.98 Commit: 5e993eeefdf96579e7aed8d03d215e7df2e52d0d Parents: 6e6cf74 Author: Ashish Singhi <ashish.sin...@huawei.com> Authored: Tue Mar 3 10:52:41 2015 +0530 Committer: Sean Busbey <bus...@apache.org> Committed: Mon Mar 2 23:41:08 2015 -0600 ---------------------------------------------------------------------- hbase-shell/src/main/ruby/hbase/table.rb | 9 ++++ 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, 85 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/5e993eee/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 10b754a..b1d2671 100644 --- a/hbase-shell/src/main/ruby/hbase/table.rb +++ b/hbase-shell/src/main/ruby/hbase/table.rb @@ -669,5 +669,14 @@ EOF column[1] = parts[0] end end + + #---------------------------------------------------------------------------------------------- + # Get the split points for the table + def _get_splits_internal() + splits = @table.getRegionLocations().keys(). + map{|i| Bytes.toStringBinary(i.getStartKey)}.delete_if{|k| k == ""} + puts("Total number of splits = %s" % [splits.size + 1]) + return splits + end end end http://git-wip-us.apache.org/repos/asf/hbase/blob/5e993eee/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 d934846..6af4473 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/5e993eee/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/5e993eee/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 d634992..86780a1 100644 --- a/hbase-shell/src/test/ruby/hbase/table_test.rb +++ b/hbase-shell/src/test/ruby/hbase/table_test.rb @@ -573,5 +573,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/5e993eee/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 a776c23..4ab56f2 100644 --- a/hbase-shell/src/test/ruby/test_helper.rb +++ b/hbase-shell/src/test/ruby/test_helper.rb @@ -77,6 +77,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